Автор Тема: Реализация отношений между классами  (Прочитано 3181 раз)

Максим

  • Newbie
  • *
  • Сообщений: 4
  • Рейтинг читателей: 0
    • Просмотр профиля
Здравствуйте, уважаемые форумчане. Не могу разобраться чем отличается реализация отношения ассоциации от агрегации и композиции в коде например в java или си шарпе? Во всех трех случаях необходимо создать в классе поле объектного типа. А в чем разница между ними я не могу понять. Ведь каждое отношение является самостоятельным.


Galogen

  • Member of CAR
  • Hero Member
  • *****
  • Сообщений: 6122
  • Рейтинг читателей: 195
  • Аксакал
    • Просмотр профиля
    • Профиль в Моем Круге
Re: Реализация отношений между классами
« Ответ #1 : 05 Октября 2014, 13:49:43 »
Разница как раз в реализации.

Ассоциация - это семантическая концепция, а агрегация или композиция - реализация связи в коде. Ассоциация в общем смысле связь типа has a, т.е. связь принадлежности. В зависимости от силы связи принадлежности - она сводится или к агрегации (share) или композиции.

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

Максим

  • Newbie
  • *
  • Сообщений: 4
  • Рейтинг читателей: 0
    • Просмотр профиля
Re: Реализация отношений между классами
« Ответ #2 : 05 Октября 2014, 15:40:46 »
Если я вас правильно понял, то однонаправленная ассоциация это как-бы абстрактное понятие, которое используется на начальном этапе проектирования и впоследствии в коде уже принимает вид либо агрегации, либо композиции. Верно я уловил смысл?

Galogen

  • Member of CAR
  • Hero Member
  • *****
  • Сообщений: 6122
  • Рейтинг читателей: 195
  • Аксакал
    • Просмотр профиля
    • Профиль в Моем Круге
Re: Реализация отношений между классами
« Ответ #3 : 05 Октября 2014, 21:37:49 »
Если я вас правильно понял, то однонаправленная ассоциация это как-бы абстрактное понятие, которое используется на начальном этапе проектирования и впоследствии в коде уже принимает вид либо агрегации, либо композиции. Верно я уловил смысл?
Не совсем. Я не говорил об однонаправленности. Одно или дву направленность - это другой момент. Кстати тоже относящийся к реализации.
Ассоциация - это абстракция связи. Ассоциация отражает отношение между двумя и более классами. Агрегация и композиция - частный случай ассоциации, определяющий более точный смысл такой связи.
Просто прямое воплощение ассоциации по смыслу (но не всегда) сводится к агрегации или композиции.

Григорий Печенкин

  • Member of CAR
  • Hero Member
  • *****
  • Сообщений: 1341
  • Рейтинг читателей: 59
    • Просмотр профиля
    • http://www.greesha.ru
Re: Реализация отношений между классами
« Ответ #4 : 06 Октября 2014, 11:27:16 »
Здравствуйте, уважаемые форумчане. Не могу разобраться чем отличается реализация отношения ассоциации от агрегации и композиции в коде например в java или си шарпе? Во всех трех случаях необходимо создать в классе поле объектного типа. А в чем разница между ними я не могу понять. Ведь каждое отношение является самостоятельным.

Статически реализация может быть одной и той же (в C++, например, любое из этих отношений может быть реализовано указателями на объект). В динамике тип отношения однозначно влияет на время жизни связанного объекта, пожалуй, только в отношении композиции: вложенный объект должен создаваться вместе (или после) создания контейнера и уничтожаться вместе (или до) уничтожения контейнера. То есть существование вложенного объекта без контейнера не имеет смысла.

Примеры здесь:
http://ootips.org/uml-hasa.html
greesha.ru

Реальность - это убийство прекрасной теории бандой мерзких фактов. (Роберт Гласс)

r84om

  • Newbie
  • *
  • Сообщений: 3
  • Рейтинг читателей: 0
    • Просмотр профиля
Re: Реализация отношений между классами
« Ответ #5 : 15 Декабря 2014, 21:26:15 »
Спасибо, что помогли разобраться мне с темой отношений между классами. У меня возник еще один вопрос. Ассоциация (и ее подвиды агрегация и композиция) позволяет представить программу в виде связанных друг с другом объектов. Какова форма этой структуры объектов? Она представляет собой дерево иерархии (как и в случае с иерархией наследования классов) или граф с циклическими связями между объектами?

[прилетело НЛО и...]

  • Sr. Member
  • ****
  • Сообщений: 263
  • Рейтинг читателей: 26
    • Просмотр профиля
Re: Реализация отношений между классами
« Ответ #6 : 14 Сентября 2017, 22:16:54 »
[Раз пошла такая тема]
Является ли объект-часть вложенным в объект-целое или нет, зависит от "многих гитик". Композиция так таковая (без рассмотрения её мощностей) в плане существования частей накладывает ограничение лишь на то, что все части целого, какие не успели отцепиться в момент удаления целого, также удаляются.
[...и улетело НЛО.]

Galogen

  • Member of CAR
  • Hero Member
  • *****
  • Сообщений: 6122
  • Рейтинг читателей: 195
  • Аксакал
    • Просмотр профиля
    • Профиль в Моем Круге
Re: Реализация отношений между классами
« Ответ #7 : 15 Сентября 2017, 23:06:04 »
[Раз пошла такая тема]
Является ли объект-часть вложенным в объект-целое или нет, зависит от "многих гитик". Композиция так таковая (без рассмотрения её мощностей) в плане существования частей накладывает ограничение лишь на то, что все части целого, какие не успели отцепиться в момент удаления целого, также удаляются.
Кто такие гитики?

Может ли квартира отцепиться от дома?

[прилетело НЛО и...]

  • Sr. Member
  • ****
  • Сообщений: 263
  • Рейтинг читателей: 26
    • Просмотр профиля
Re: Реализация отношений между классами
« Ответ #8 : 16 Сентября 2017, 12:59:39 »
Диаграмма составной структуры позволяет явно указать, является ли объект-часть вложенным в объект-целое.
Связь помещения с домом не тождественна композиции. Композиция может обладать стационарностью ({frozen}), а может нет .
[...и улетело НЛО.]

Galogen

  • Member of CAR
  • Hero Member
  • *****
  • Сообщений: 6122
  • Рейтинг читателей: 195
  • Аксакал
    • Просмотр профиля
    • Профиль в Моем Круге
Re: Реализация отношений между классами
« Ответ #9 : 17 Сентября 2017, 00:52:08 »
Диаграмма составной структуры позволяет явно указать, является ли объект-часть вложенным в объект-целое.
Связь помещения с домом не тождественна композиции. Композиция может обладать стационарностью ({frozen}), а может нет .
а по-русски?

[прилетело НЛО и...]

  • Sr. Member
  • ****
  • Сообщений: 263
  • Рейтинг читателей: 26
    • Просмотр профиля
Re: Реализация отношений между классами
« Ответ #10 : 17 Сентября 2017, 02:30:17 »
Прошу прощения, ксенолингвистический гаджет барахлит.
Если Вы хотите в модели показать, что объект-часть существует внутри объекта-целого, то для этого Вы рисуете диаграмму составной структуры (composite structure diagram). Сама по себе композиция, нарисованная на диаграмме классов не накладывает ограничений на то, чтобы части жили именно внутри целого.
Если Вы хотите в модели показать, что объект-часть в течение своей жизни не может сменить хозяина -- объект-целое --, как в Вашем примере с квартирой, то Вы пишете возле чёрного ромба {readOnly}, или как когда-то писали {frozen}. Если такой пометки нет, то [по умолчанию] композиция позволяет менять хозяина. [По умолчаию] она не обладает стационарностью.
[...и улетело НЛО.]

Galogen

  • Member of CAR
  • Hero Member
  • *****
  • Сообщений: 6122
  • Рейтинг читателей: 195
  • Аксакал
    • Просмотр профиля
    • Профиль в Моем Круге
Re: Реализация отношений между классами
« Ответ #11 : 17 Сентября 2017, 19:39:07 »
Прошу прощения, ксенолингвистический гаджет барахлит.
Если Вы хотите в модели показать, что объект-часть существует внутри объекта-целого, то для этого Вы рисуете диаграмму составной структуры (composite structure diagram). Сама по себе композиция, нарисованная на диаграмме классов не накладывает ограничений на то, чтобы части жили именно внутри целого.
Если Вы хотите в модели показать, что объект-часть в течение своей жизни не может сменить хозяина -- объект-целое --, как в Вашем примере с квартирой, то Вы пишете возле чёрного ромба {readOnly}, или как когда-то писали {frozen}. Если такой пометки нет, то [по умолчанию] композиция позволяет менять хозяина. [По умолчаию] она не обладает стационарностью.

Хм, а в таком случае чем композиция отличается от агрегации? Без этих уточняющих признаков?

[прилетело НЛО и...]

  • Sr. Member
  • ****
  • Сообщений: 263
  • Рейтинг читателей: 26
    • Просмотр профиля
Re: Реализация отношений между классами
« Ответ #12 : 17 Сентября 2017, 21:49:34 »
Гм. Видимо, важно добавить, что всюду у меня речь об UMLьных агрегациях и UMLьных композициях.
По UMLю композиция -- это усиленная форма агрегации, отличающаяся тем, что при композиции:
1) у части не может быть больше одного целого;
2) все части, имеющиеся у целого в момент его удаления также удаляются.
[...и улетело НЛО.]

Galogen

  • Member of CAR
  • Hero Member
  • *****
  • Сообщений: 6122
  • Рейтинг читателей: 195
  • Аксакал
    • Просмотр профиля
    • Профиль в Моем Круге
Re: Реализация отношений между классами
« Ответ #13 : 17 Сентября 2017, 22:34:14 »
Гм. Видимо, важно добавить, что всюду у меня речь об UMLьных агрегациях и UMLьных композициях.
По UMLю композиция -- это усиленная форма агрегации, отличающаяся тем, что при композиции:
1) у части не может быть больше одного целого;
2) все части, имеющиеся у целого в момент его удаления также удаляются.
Можно ли считать, что нотации для моделирования данных предшествовали нотациям для моделирования ОО структур. Например, IDEF1x ориентированная на реляционные данные поддерживает специфичные и неспецифичные связи.  Специфичными будут только связи принадлежности, то есть по сути агрегации, среди который выделяется идентификационно-зависимая - сиречь композиция.

[прилетело НЛО и...]

  • Sr. Member
  • ****
  • Сообщений: 263
  • Рейтинг читателей: 26
    • Просмотр профиля
Re: Реализация отношений между классами
« Ответ #14 : 17 Сентября 2017, 22:50:51 »
Похожие раскопки делали тут же на форуме в части диаграмм состояний. Думаю, что можно попытаться раскопать, кто же выдумал композицию с агрегацией, что он на самом деле имел в виду, до того как всё испортили авторы стандарта UML.)
[...и улетело НЛО.]