Является ли эта диаграмма классов семейства примером агрегации или композиции? - PullRequest
1 голос
/ 07 апреля 2020

Я ищу некоторые пояснения, которые у меня есть в отношении диаграммы классов ниже: «Это агрегация или композиция? Объясните почему».

Class Diagram in question

I Я в раздумье об этом ответе. Из того, что я понимаю изначально, у ученика есть «семья», мать и отец; поэтому это пример композиции, потому что концепция матери или отца перестает существовать без ученика (сына, дочери). Однако, если я смотрю на это по-другому, если ученик (ребенок) [перестает существовать] / [никогда не существовал вообще], существует вероятность того, что два отдельных объекта (называемых здесь Отцом и матерью) существуют и будут содержать те же атрибуты; который был бы примером агрегации.

Надеюсь, то, как я пытался донести свою мысль, имеет смысл. Может кто-нибудь, пожалуйста, проясните это для меня?

Спасибо за ваше время.

1 Ответ

1 голос
/ 08 апреля 2020

Если вы правильно используете UML-диаграмму, ответ на рисунке - это агрегация, основанная на типе стрелок. Но давайте выясним. Также эта статья имеет то же объяснение, что и я, но другими словами.

Давайте go шаг за шагом с вашими утверждениями.

у ученика есть семья, мать и отец

Не совсем правильно: у матери есть семья, а у отца есть семья. И в семье «есть» ученик.
Давайте рассмотрим пример из Wiki :

enter image description here

Диаграмма сверху показывает состав между двумя классами: автомобиль имеет ровно один карбюратор, а карбюратор является частью одного автомобиля. Карбюраторы не могут существовать как отдельные части, отсоединенные от конкретной машины c. Диаграмма внизу показывает агрегацию между двумя классами: пруд имеет ноль или более уток, а утка имеет не более одного пруда (одновременно). Утка может существовать отдельно от пруда, например, она может жить рядом с озером.

Согласно этому описанию к иллюстрации, объект, к которому прикреплена стрелка, является владельцем. Но давайте go к следующему вашему утверждению.

, потому что концепция матери или отца перестает существовать без ученика

Это не совсем правильно, как ваша диаграмма не отображает никаких «концептов», диаграммы UML показывают свойства объекта и отношения между ними. Поэтому, если есть какая-либо «концепция», ее следует указывать за пределами диаграммы.
Давайте предположим, что ваша диаграмма показывает отношения из реального мира: может ли Семья существовать, не будучи «частью» Матери или Отца? Нет. Тогда отношения между матерью, отцом и семьей составляются, так как семья сама по себе не используется и не существует.

, если ученик (ребенок) [прекращает существование] / [никогда не существовал вообще], существует возможность того, что два отдельных объекта (называемых здесь Отцом и Матерью) существуют и будут по-прежнему содержать одинаковые атрибуты

Правильно. Но согласно диаграмме, у них не было никаких отношений в первую очередь. Поэтому нет необходимости подвергать сомнению или доказывать свою привязанность друг к другу. Но вы должны смотреть на отношения между семьей и учеником.
Может ли ученик быть действительным объектом и действовать самостоятельно, если он не является частью семьи? По реальному миру - да, это возможно. Затем это композиция.

Важное замечание : Я подразумевал отношения между этими объектами, например, принимая правила из реального мира, что Семья не существует, если она не является частью какого-то Отца и Мать.
Но в программировании, где мы используем OO модели и отношения, мы знаем, что эти модели не отражают реальный мир 1 к 1, поэтому можно использовать object Family, если есть нет объектов "Отец" и "Мать" в какой-то программе? Конечно, это может - в зависимости от цели объекта. Например, его можно использовать для хранения статистических данных, без каких-либо связей с конкретными Отцом и Матерью. Это сделало бы эти отношения агрегацией. Чтобы избежать таких вопросов, отношения между объектами и их возможность жить самостоятельно должны быть описаны в явном виде, поэтому можно предположить правильный тип отношений.

...