Ассоциация UML против состава и уровня детализации - PullRequest
18 голосов
/ 22 мая 2011

Собственно, сделайте пару любительских вопросов по UML!При создании UML-диаграммы для моделирования некоторых концепций домена вы сталкиваетесь с концепцией домена, которая «хранит» некоторую информацию о другой концепции, лучше ли хранить штамп / ссылку на эту сущность или всю сущность в самой модели?Пожалуйста, имейте в виду, что это связано с созданием простой высокоуровневой модели - я уверен, что на этапе реализации все будет немного по-другому.

Например, какая из двух моделей, приведенных ниже, на самом деле является правильной?Первый из них имеет композиционные отношения, а FlightBooking держит весь Flight.Во втором разделе FlightBooking просто ссылается на Flight.

http://imageshack.us/m/96/2227/flightiu.png

Во-вторых, при создании концепций домена моделирования UML-диаграмм высокого уровня, на сколько деталей вы действительно хотели бы пойти??Например, на диаграмме ниже полет может содержать подробности о происхождении / назначении в виде строк, или я мог бы смоделировать отдельные классы для этих концепций и создать композиционные отношения.Какой из этих двух вариантов целесообразен?

http://imageshack.us/m/23/3395/flight2s.png

Кроме того, просто при моделировании вышеизложенного, где Flight "содержит" источник / пункт назначения в качестве другого класса, а не строки,Какой из двух способов является правильным способом моделирования этого?Я совершенно сбит с толку относительно того, когда показывать ассоциацию и когда показывать композицию.

Ответы [ 4 ]

19 голосов
/ 22 мая 2011

Ассоциация :
Это означает, что два класса имеют какую-то связь, может быть чем угодно.
Например: A использует B, A связано с B определенным образом.

Состав:
Это также особый тип ассоциации, используемый для моделирования «Собственность».Это очень похоже на Агрегацию, с той лишь разницей, что она изображает отношение Целая-часть, а сущность «часть» не имеет своего собственного независимого существования

Например: A состоит из B;B является частью A и, следовательно, не может существовать без A.

Хорошее объяснение: Диаграмма классов UML: объединение, агрегация и состав

1 голос
/ 04 февраля 2014

Композиции, агрегаты и ассоциации.

  • Прежде чем приступить к другим вещам, вы должны понять, что такое ассоциация от А до Б.
    • По существу, это сплошная линия между A и B. Она может представлять одну структуру, которая связывает класс / экземпляры A с классом / экземплярами B. Структура может быть любого вида и принадлежать где угодно,Вся информация, написанная о строке, описывает эту структуру.
    • Если есть две структуры, одна структура, которая соединяет один экземпляр A с экземпляром (ами) B, и другая структура, которая соединяет экземпляр B с экземпляромВы можете показать их обоих в ОДНОЙ ассоциации.Затем информация, записанная о его конце B, описывает первую структуру (b-> a), а информация о другом конце описывает другую структуру.
    • Если у вас будет более одной структуры, ориентирующейся от A до B, вы должны нарисовать две разные ассоциации.
    • Если объединяющая структура сложна, вы можете представить ее как Ассоциативный класс.Там вы можете определить больше деталей.
    • Соединяющая структура может соединять более двух классов, тогда она будет показана в виде большого ромба с сплошными ветвями для этих классов.Это все еще ассоциация!Внимание: эти две более сложные ассоциации очень плохо поддерживаются существующими инструментами.Вы можете легко создать что-то абсолютно бессмысленное с ними.И они сложные.Используйте осторожно.
  • В C ++ экземпляр A может иметь экземпляр B не по указателю, а напрямую.Для него НЕТ специального знака UML, он должен отображаться так же, как и обычный атрибут атрибута указателя.

example Class diagram


  • Композиция показана тем, что называется черным или полным бриллиантом.Он находится на стороне контейнера .
  • Другой, пустой ромб, называется «общая агрегация», или, вкратце, «общая».Он не является строго определенным, и вы можете использовать его, создавая собственный стандарт.Конечно, было бы глупо размещать его на стороне предмета в ассоциации предмет-контейнер.Но это легко может быть на обоих концах ассоциации.
    • Почему состав алмаза может быть только на одной стороне?Поскольку состав означает, что элементы существуют ТОЛЬКО в то время, как существуют ссылки на них из контейнера (или самого контейнера).Конечно, это не может работать для обеих сторон.
    • Напротив, «общий» с обеих сторон часто имеет смысл.Например, у экземпляров Student может быть список всех посещенных курсов, а у экземпляров Courses - список всех посещаемых студентов.
  • Часто можно увидеть имя «агрегация», используемое для «общего агрегирования».Это плохая ошибка.Потому что, согласно стандарту, composition, shared и даже none, все три являются агрегациями.

Таким образом, композиция является подмножеством агрегации и агрегации является функцией ассоциация

1 голос
/ 23 мая 2011

Извините, если это немного долго ...

Если вы пытаетесь смоделировать концепцию предметной области, я бы посоветовал вам забыть о композиции / агрегации и придерживаться простых ассоциаций.Зачем?Потому что решение о композиции / агрегации мешает важным вопросам.Это:

  1. Почему существует связь?В частности, какие правила / ограничения домена он фиксирует?
  2. Каково количество элементов на обоих концах?
  3. Что такое поведение создания и удаления?то есть кто создает / удаляет экземпляры ассоциации?

Имена отношений Вы достигнете (1), присвоив имена окончанию.Не с именами ролей (например, «Полеты» в вашем первом примере), потому что это ничего не говорит о , почему связь существует.Итак, в вашем примере 1: что представляют собой отношения?Это зарезервированное место на рейсе?Подтвержденный?Заплачено за?Невозможно сказать из диаграммы, как она есть.Существуют различные подходы к именованию на основе глаголов, см., Например, этот пост .Зачем это делать?Потому что он предлагает вам убедиться, что вы понимаете домен.Большой процент (вероятно, большинство, хотя я никогда не доказывал это) правил домена существует в отношениях.Поэтому понимание того, почему существуют отношения, является фундаментальным для понимания предметной области.

Количество элементов Вероятно, более очевидно, чем наименование.Вы должны определить на обоих концах - и верхний и нижний.На нижнем конце важно, является ли это необязательным (то есть 0 или 1).На верхнем торце 1 или много.Опять же, это выявляет важные правила из области.Возвращаясь к вашему примеру снова: сколько рейсов в бронировании авиабилетов?Может ли один рейс быть в нескольких заказах?(что бы ни означало «в» ...).

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

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

Если вы действительно хотите показать композицию по сравнению с ассоциацией, однако это механично, если вы отвечаетевопросы выше:

  1. ЕСЛИ количество элементов на одном конце отношения равно 1: 1 (т. е. может быть только один), И
  2. этот же конец отвечает за создание иудаляя экземпляры другого конца, THEN
  3. Может отображаться как композиция.

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

hth.

PS: точка синтаксиса: в композиции используется заполненный ромб.То, что вы показали, это Агрегация.

0 голосов
/ 22 мая 2011

Для вашего первого примера первая диаграмма с составом верна.Ваш второй вариант, ссылаясь на flightID как на int, может работать, но он неполон: само по себе int не дает вам доступа к объекту Flight.Класс Flight не может волшебным образом хранить список объектов полета, которые вы можете получить по номеру, так что для второго варианта потребуется третий класс где-то для хранения всех объектов Flight.

Для вашего второго вопроса нана высоком уровне это действительно зависит от личных предпочтений (или личных предпочтений вашего профессора!).Просто постарайтесь использовать свое лучшее суждение.

...