2016-09-18 4 views
2

Представьте эти классы, где SeasonPoints агрегируются композицией Team и Season, где Team, который играет во многих Season х может иметь несколько SeasonPoints, и Season со многими Team с может иметь несколько различных SeasonPoints из Team с.UML: Может ли класс быть агрегирован через композицию для двух других классов?

Обратите внимание, что для того, чтобы SeasonPoints существовать она нужна команда, которая набирал очки и сезон, что точки были забиты на, так что я не вижу другого способа сделать эту схему:

 1  n    n  1 
|Team|<comp>----|SeasonPoints|-----<comp>|Season| 

возникает вопрос, потому что таким образом вы могли бы уничтожить либо Team, либо Season и SeasonPoints все еще существовали (в другом классе, который не был уничтожен), что означало бы уничтожение контейнера без уничтожения содержащегося в нем класса, и в композиции говорится, что если контейнер уничтожен, поэтому должны содержаться классы.

ответ

2

Вот что говорят спецификации:

Иногда свойство используется для моделирования условий, в которых один экземпляр используется для группы вместе набор экземпляров; это называется агрегацией. Чтобы представить такие обстоятельства, свойство имеет свойство агрегации типа AggregationKind; экземпляр, представляющий всю группу, классифицируется владельцем Имущества, а экземпляры, представляющие сгруппированных лиц, классифицируются по типу Имущества. AggregationKind - это перечисление со следующими буквальными значениями:

none: Указывает, что свойство не имеет семантики агрегирования.

общий: Указывает, что свойство имеет общую семантику агрегации. Точная семантика общей агрегирования зависит от области приложения и модельера.

composite: Указывает, что свойство агрегируется по назначению, т. Е. Составной объект несет ответственность за существование и хранение составных объектов (см. Определение частей в 11.2.3).

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

Таким образом, ваша модель просто ошибочна (согласно последнему предложению).

Но - Лучше вы забываете об агрегации, так как они вводят больше пуха, чем на самом деле добавляют семантику. Об этом так много дискуссий. Является ли автомобиль составленным колес, так как даже приведенные выше спецификации показывают его в примерах? Вы знаете, что колесо может жить само по себе и не «разрушается», когда автомобиль уничтожается. При моделировании базы данных это может быть полезно (удалить зависимую информацию) или когда вам нужно моделировать память (свободное пространство для составных элементов). Но почти во всех случаях простая связь с множественностью является достаточной информацией.

+0

любая идея, что было бы «правильной моделью» для этих трех классов? – Jose

+1

Используйте либо простое объединение, либо общую агрегацию.Но я бы моделировал SeasonPoints как класс ассоциации (на самом деле это). –