Класс Объектов Или Объекты Класса?

При устройстве на новую работу у меня возник новый вопрос на собеседовании.

Я хочу спросить это и у тебя.

Пусть у нас будет конкретная машина.

СПЕЦИФИЧЕСКИЙ! Не тип или класс машин, а конкретную машину, на которую я показываю указательным пальцем.

Владелец этого автомобиля утверждает, что его машина состоит из множества узлов, в том числе и из колес.

Он говорит, что у его машины пять колес (одно запасное).

Сразу отмечу, что владелец говорит: «состоит из», а не «включает».

Вопрос: слушая владельца автомобиля, что мы представляем: что машина состоит из колес одного класса?

Класс объектов или объекты класса?

Или что машина состоит из класса колес?

Класс объектов или объекты класса?

Комментарии по вопросу:

  • Под классом колес мы подразумеваем совокупность объектов.

    Не то, что подразумевается под этим термином в ООП (описание типа, объектная модель, описание общих возможностей), нет. Мы понимаем просто набор каких-то объектов.

    Тот факт, что один из объектов квадратный, нас не смущает. Хозяин сказал, что это колеса, а значит колеса.

  • Состоит из не означает, что он состоит только из.

    Автомобиль состоит из многих вещей.

    Мы не будем перечислять все.

    Но он также состоит из колес.

    Многие думают, что оно заключается в требовании перечисления всех элементов конструкции, но это не так.

  • Состоит из — означает, что машина и то, из чего она связана связью «состоит», связаны связью.

    Напомню, что термин «состоит из» имеет несколько значений:

  1. Состав:
    1. Газ состоит из молекул, а это означает, что между газом и классом молекул существует связь.

    2. Головоломка состоит из этих пяти элементов.

      В данном случае он состоит из пяти «композиционных» связей между головоломкой и объектами класса «элементы».

    3. Яблоня состоит из корней, ствола и кроны – обозначает три «композиционные» связи между яблоней и каждым из перечисленных объектов.

  2. Агрегация: Куча песка состоит из двух кучек.

  3. Специализация: Класс яблонь состоит из сортов яблонь.

    Это связь между множеством и его подмножеством.

  4. Классификация: Класс машин состоит из машин.

    Это связь между классом объектов и объектами класса.

Давайте запомним на будущее эти шесть различных интерпретаций термина «состоит из».

Однако в нашем случае тезис «автомобиль состоит из колес» можно трактовать только двояко: «автомобиль состоит из класса колес» или «автомобиль состоит из объектов класса «колеса».

Оба этих параметра определяют соединение композиции.

В философии считается, что сумма частей не может быть целым.

Такая точка зрения называется холистической.

Тех, кто утверждает обратное, называют редукционистами.

В моделировании предметной области мы исповедуем принцип холизма и поэтому утверждаем, что машина не является суммой своих компонентов.

И так соединяем машину с любым ее компонентом композиционным соединением.

Еще раз повторю вопрос: из чего состоит машина? Из класса колес? Или от классных колес? Если мы зададим этот вопрос программистам, они обомнутся.

В ООП нет моделей, связывающих объекты и классы.

У программистов есть либо диаграммы классов, либо диаграммы взаимодействия.

Но в UML невозможно разместить на одной диаграмме и классы, и объекты.

Поэтому в рассуждениях возникает заминка.

Далее я вынужден еще раз напомнить, что весь мир (кроме программистов) понимает класс как набор объектов.

И мы должны напомнить вам, что класс в ООП — это не класс в реальном мире.

Если слушатель это понимает, то он переходит к самой задаче.

Если не понимает, то включает серию вопросов под общий баннер «Зачем нам это нужноЭ» Предположим, что слушатель понял и вопрос, и тезис и начал рассуждать.

Сначала по инерции ООП слушатель ищет классы.

Но у нас нет класса машин, а только одна машина.

Слушатель пытается создать класс с единственным элементом, но это не помогает, потому что я все равно задаю крамольный вопрос с точки зрения ООП: может ли машина, а не класс машин, быть ассоциирована с классом колеса, а не с колесами какого класса? Шоу гарантировано.



Итак, ответ

Мы можем сказать, что автомобиль состоит из класса колес, так же, как двигатель состоит из класса болтов, так же, как табурет состоит из класса молекул.

При этом мы не можем точно сказать, как состоит автомобиль из колес, потому что в такой риторике нет координат, которые описывали бы расположение колес в автомобиле.

В этом случае мы обычно говорим, что автомобиль состоит из пяти колес.

Или – в работе задействованы пять плотников.

Или – чтобы построить дом нужны кирпичи.

Однако связь между транспортным средством и колесами класса можно использовать для описания расположения каждого из колес.

Тогда у нас будет пять звеньев «состоит из», которые соединят автомобиль и каждое из колес.

Каждому такому соединению мы можем присвоить атрибут «местоположение», и значение этого атрибута даст нам местоположение этого колеса, например, «переднее правое».

Ясно, что такие связи также образуют класс связей, состоящий из пяти элементов.

Тогда мы говорим: автомобиль состоит из колес (то есть 5 соединений), двигатель состоит из болтов (то есть 100 соединений), а табуретка состоит из молекул (то есть много связей).

Например, это будет звучать так: автомобиль состоит из следующих колес: правое переднее, правое заднее, левое переднее, левое заднее и запасное.

Есть те, кто использует упорядоченный класс колес, чтобы соотнести его с автомобилем.

Каждому числу в этом упорядоченном классе можно присвоить координату местоположения колеса.

А потом говорят, что можно связать машину с классом колес и при этом сохранить знания о расположении колес.

Это неправда.

Дело в том, что мы вводим еще один класс объектов — числа.

Мы устанавливаем связь между колесами и числами, связываем каждое число с автомобилем и связываем атрибут местоположения колеса с номером.

Поэтому в данном случае мы просто формируем связи между каждым колесом и автомобилем через значение атрибута (номер).

Итак, существует два способа построения объектной структуры.

Скажите, что он состоит из объектов, или скажите, что он состоит из классов объектов.

Эти два класса высказываний очень похожи друг на друга, но их необходимо различать.



Давайте усложним вопрос

Теперь усложним ситуацию.

Давайте теперь представим класс автомобилей.

У каждого автомобиля есть класс колес или классы колес.

Пусть это правда, что любой автомобиль состоит из 5 колёс.

Давайте посмотрим, какие объекты у нас уже есть:

  1. Объекты класса машин (автомобили).

    Таких объектов N.

  2. Класс автомобиля.

    Мощность этого множества равна N.

  3. Объекты класса Wheel (колеса).

    Число таких объектов равно 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.

Каждый объект и каждое отношение имеют смысловое значение.

Например, класс машин обозначает объект, состоящий из множества машин.

Класс классов колес, принадлежащих одному автомобилю, обозначает наличие комплектов колес, каждый из которых (комплектов) принадлежит одному автомобилю.

Связь класса автомобилей с классом колес указывает на тезис: для производства партии автомобилей необходима партия колес.

И так далее.

Умение извлекать необходимые сущности из истории клиента и правильно их моделировать — это искусство аналитика.

Вы можете продолжать практиковаться в поиске семантики связей самостоятельно, используя приведенную выше аналогию.

Правда, некоторые связи будут весьма странными с точки зрения логики обывателя.

Но это не исключает их невозможности.

Теги: #классификация #Логическая парадигма #онтология #аналитика #моделирование предметной области #Семантика #Анализ и проектирование систем #ООП #математика

Вместе с данным постом часто просматривают: