Клас об «єктів або об» єкти класу?

Влаштовуючись на нову роботу, я придумав нове питання для співбесіди. Хочу поставити його і вам.

Нехай у нас є конкретна машина. КОНКРЕТНА! Не тип і не клас машин, а саме конкретна машина, на яку я вказую своїм вказівним пальцем. Господар цієї машини стверджує, що його машина складається з безлічі компонентів, у тому числі з коліс. Він каже, що його машина складається з п'яти коліс (одне запасне). Зауважу відразу, що господар каже: «складається з», а не «включає в себе».

Питання: слухаючи господаря машини, що ми собі уявляємо: те, що машина складається з коліс одного класу?

Або те, що машина складається з класу коліс?

Коментарі до питання:

  • Під класом коліс ми розуміємо безліч об'єктів. Не те, що розуміється під цим терміном в ОВП (опис типу, модель об'єктів, опис загальних ознак), немає. Ми розуміємо просто набір якихось об'єктів. Те, що один з об'єктів має квадратну форму, нас не хвилює. Господар сказав, що це колеса, - значить колеса.
  • Складається з не означає, що складається тільки з. Машина складається багато з чого. Все перераховувати ми не будемо. Але в тому числі складається з коліс. Багато хто думає, що складається з вимагає перерахування всіх елементів конструкції, але це не так.
  • Складається з - значить, що машина і те, з чим вона пов'язана зв'язком «складається з», пов'язані зв'язком. Нагадаю, що термін «складається з» має кілька сенсів:
  1. Композиція:
    1. Газ складається з молекул, що означає зв'язок між газом і класом молекул.
    2. Паззл складається з п'яти ось цих елементів. Складається з даного випадку передбачає п'ять зв'язків «композиція» між паззлом і об'єктами класу «Елементи».
    3. Яблуня складається з коріння, стовбура і крони - позначає три зв'язки «композиція» між яблункою і кожним з перерахованих об'єктів.
  2. Агрегація: купа піску складається з двох осередків.
  3. Спеціалізація: клас яблуень складається з сортів яблуень. Це зв'язок між безліччю і його підмножиною.
  4. Класифікація: клас машин складається з машин. Це зв'язок між класом об'єктів і об'єктами класу.

Запам'ятаємо на майбутнє ці шість різних трактувань терміну «складається з».

Однак, у нашому випадку теза «машина складається з коліс» може трактуватися лише двома способами: "машина складається з класу коліс" або "машина складається з об'єктів класу" колеса ".

Обидва ці варіанти визначають зв'язок композиція. У філософії вважається, що сума частин не може бути цілим. Цей погляд називається холістичним. Ті, хто сповідують протилежне, називаються редукціоністи. У моделюванні предметної області ми сповідуємо принцип холізму і тому стверджуємо, що машина не є сума її компонент. І тому ми пов'язуємо машину з будь-яким з її компонент зв'язком композиція.

Ще раз повторю питання: з чого складається машина? З класу коліс? Або з коліс класу?

Якщо ми задаємо це питання програмістам, то вони входять у ступор. В ОВП немає моделей, що зв'язують об'єкти і класи. У програмістів є або діаграми класів, або діаграми взаємодій. Але, щоб на одній діаграмі були і класи і об'єкти - такого в UML немає. Тому виникає заминка в міркуваннях. Далі мені доводиться ще раз нагадати, що під класом весь світ (крім програмістів) розуміє безлічі об'єктів. І доводиться нагадувати, що клас в ОВП не є клас у реальному світі. Якщо слухач це розуміє, то він переходить до самого завдання. Якщо не розуміє, то включає серію питань під загальним прапором «А навіщо нам це треба?» Припустімо, що слухач зрозумів і питання, і тези і почав міркувати. Спочатку за інерцією з ОВП слухач шукає класи. А у нас немає класу машин, а є тільки одна машина. Слухач намагається створити клас з єдиним елементом, але це не рятує, тому що все одно я ставлю крамольне з точки зору ОВП питання: чи може машина, а не клас машин бути пов'язана з класом коліс, а не з колесами класу? Шоу забезпечено.

Отже, відповідь

Можна сказати, що машина складається з класу коліс, як двигун складається з класу болтів, як табуретка складається з класу молекул. При цьому ми не можемо сказати, як саме машина складається з коліс, тому що в такій риториці немає координат, які описували б місце розташування коліс в машині. У такому випадку ми зазвичай говоримо - машина складається з п'яти коліс. Або в роботі беруть участь п'ять теслярів. Або - для будівництва будинку потрібні цеглини.

Однак, для опису місця розташування кожного з коліс можна використовувати зв'язок між машиною і колесами класу. Тоді ми отримаємо п'ять зв'язків «складається з», які зв'яжуть машину і кожне з коліс. Кожний такий зв'язок ми можемо приписати атрибут «місце розташування», і значення цього атрибута видасть нам місце розташування даного колеса, наприклад, «праворуч спереду». Зрозуміло, що такі зв'язки теж утворюють клас зв'язків, що складається з п'яти елементів. Тоді ми говоримо: машина складається з коліс, (маючи на увазі 5 зв'язків), двигун складається з болтів (маючи на увазі 100 зв'язків) і табуретка складається з молекул, (маючи на увазі дуже багато зв'язків). Наприклад, звучати це буде так: машина складається з таких коліс: правого переднього, правого заднього, лівого переднього, лівого заднього і запасного.

Є ті, хто використовує впорядкований клас коліс для зв'язку його з машиною. Кожному номеру в цьому впорядкованому класі можна поставити координату місця розташування колеса. І тоді кажуть, що можна зв'язати машину з класом коліс і при цьому зберегти знання про місце розташування коліс. Це неправильно. Справа в тому, що ми вводимо ще один клас об'єктів - числа. Робимо зв'язок між колесами і числами, кожне число пов'язуємо з машиною і пов'язуємо атрибут розташування колеса з цифрою. Так що в цьому випадку ми просто формуємо зв'язки між кожним колесом і машиною через значення атрибута (номер).

Отже, є два способи побудувати конструкцію об'єкта. Сказати, що він складається з об'єктів, або сказати, що він складається з класів об'єктів. Ці два класи тверджень дуже схожі один на одного, але їх треба розрізняти.

Ускладнимо питання

Тепер ускладнимо ситуацію. Нехай тепер у нас є клас машин. У кожної машини - клас коліс, або колеса класів. Нехай вірно, що будь-яка машина складається з 5 коліс. Давайте подивимося, які об'єкти у нас вже є:

  1. Об'єкти класу машин (машини). Кількість таких об'єктів N.
  2. Клас машин. Потужність цієї безлічі N.
  3. Об'єкти класу коліс (колеса). Кількість таких об "єктів 5 * N.
  4. Клас коліс. Потужність цієї безлічі 5 * N.
  5. Класи коліс, що належать одній машині. Кількість таких об'єктів N.
  6. Клас класів коліс, що належать одній машині. Потужність цієї безлічі N.
  7. Зв'язки між машинами і колесами. Кількість таких об "єктів 5 * N.
  8. Клас зв'язків між машинами і колесами. Потужність цієї безлічі 5 * N.
  9. Зв'язки між машинами і класами коліс, що належать одній машині. Кількість таких об'єктів N.
  10. Клас зв'язків між машинами і класами коліс, що належать одній машині. Потужність цієї безлічі N.
  11. Ми можемо додати нові зв'язки:
  12. Клас машин можна пов'язати з класом коліс. Кількість таких зв'язків 1.
  13. Клас машин можна пов'язати з класом класів коліс, що належать одній машині. Кількість таких зв'язків 1.
  14. Клас коліс можна пов'язати з колесами класу. Кількість таких зв'язків 5 * N.

Кожен об'єкт і кожен зв'язок мають семантичне значення. Наприклад, клас машин позначає об'єкт, що складається з безлічі машин. Клас класів коліс, що належать одній машині, позначає наявність комплектів коліс, кожен з яких (комплектів) належить одній машині. Зв'язок між класом машин і класом коліс позначає тезу: для виготовлення партії машин потрібна партія коліс. І так далі. Вміння з розповіді замовника витягувати потрібні сутності і моделювати їх коректним чином і є мистецтво аналітика. Ви можете продовжити тренуватися в знаходженні семантики зв'язків самостійно за вказаною аналогією. Правда, деякі зв'язки будуть досить дивними з точки зору логіки обивателя. Але це не виключає їх неможливості.

logo

Follow us