Форум Сообщества Аналитиков

Дисциплины => Реализация => Тема начата: Максим от 05 Октября 2014, 12:20:23

Название: Реализация отношений между классами
Отправлено: Максим от 05 Октября 2014, 12:20:23
Здравствуйте, уважаемые форумчане. Не могу разобраться чем отличается реализация отношения ассоциации от агрегации и композиции в коде например в java или си шарпе? Во всех трех случаях необходимо создать в классе поле объектного типа. А в чем разница между ними я не могу понять. Ведь каждое отношение является самостоятельным.
Название: Re: Реализация отношений между классами
Отправлено: Galogen от 05 Октября 2014, 13:49:43
Разница как раз в реализации.

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

С другой стороны можно привести и ассоциации типа многие-ко-многим, которые не могут быть сведены к агрегации или композиции.
Название: Re: Реализация отношений между классами
Отправлено: Максим от 05 Октября 2014, 15:40:46
Если я вас правильно понял, то однонаправленная ассоциация это как-бы абстрактное понятие, которое используется на начальном этапе проектирования и впоследствии в коде уже принимает вид либо агрегации, либо композиции. Верно я уловил смысл?
Название: Re: Реализация отношений между классами
Отправлено: Galogen от 05 Октября 2014, 21:37:49
Если я вас правильно понял, то однонаправленная ассоциация это как-бы абстрактное понятие, которое используется на начальном этапе проектирования и впоследствии в коде уже принимает вид либо агрегации, либо композиции. Верно я уловил смысл?
Не совсем. Я не говорил об однонаправленности. Одно или дву направленность - это другой момент. Кстати тоже относящийся к реализации.
Ассоциация - это абстракция связи. Ассоциация отражает отношение между двумя и более классами. Агрегация и композиция - частный случай ассоциации, определяющий более точный смысл такой связи.
Просто прямое воплощение ассоциации по смыслу (но не всегда) сводится к агрегации или композиции.
Название: Re: Реализация отношений между классами
Отправлено: Григорий Печенкин от 06 Октября 2014, 11:27:16
Здравствуйте, уважаемые форумчане. Не могу разобраться чем отличается реализация отношения ассоциации от агрегации и композиции в коде например в java или си шарпе? Во всех трех случаях необходимо создать в классе поле объектного типа. А в чем разница между ними я не могу понять. Ведь каждое отношение является самостоятельным.

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

Примеры здесь:
http://ootips.org/uml-hasa.html
Название: Re: Реализация отношений между классами
Отправлено: r84om от 15 Декабря 2014, 21:26:15
Спасибо, что помогли разобраться мне с темой отношений между классами. У меня возник еще один вопрос. Ассоциация (и ее подвиды агрегация и композиция) позволяет представить программу в виде связанных друг с другом объектов. Какова форма этой структуры объектов? Она представляет собой дерево иерархии (как и в случае с иерархией наследования классов) или граф с циклическими связями между объектами?
Название: Re: Реализация отношений между классами
Отправлено: [прилетело НЛО и...] от 14 Сентября 2017, 22:16:54
[Раз пошла такая тема]
Является ли объект-часть вложенным в объект-целое или нет, зависит от "многих гитик". Композиция так таковая (без рассмотрения её мощностей) в плане существования частей накладывает ограничение лишь на то, что все части целого, какие не успели отцепиться в момент удаления целого, также удаляются.
Название: Re: Реализация отношений между классами
Отправлено: Galogen от 15 Сентября 2017, 23:06:04
[Раз пошла такая тема]
Является ли объект-часть вложенным в объект-целое или нет, зависит от "многих гитик". Композиция так таковая (без рассмотрения её мощностей) в плане существования частей накладывает ограничение лишь на то, что все части целого, какие не успели отцепиться в момент удаления целого, также удаляются.
Кто такие гитики?

Может ли квартира отцепиться от дома?
Название: Re: Реализация отношений между классами
Отправлено: [прилетело НЛО и...] от 16 Сентября 2017, 12:59:39
Диаграмма составной структуры позволяет явно указать, является ли объект-часть вложенным в объект-целое.
Связь помещения с домом не тождественна композиции. Композиция может обладать стационарностью ({frozen}), а может нет .
Название: Re: Реализация отношений между классами
Отправлено: Galogen от 17 Сентября 2017, 00:52:08
Диаграмма составной структуры позволяет явно указать, является ли объект-часть вложенным в объект-целое.
Связь помещения с домом не тождественна композиции. Композиция может обладать стационарностью ({frozen}), а может нет .
а по-русски?
Название: Re: Реализация отношений между классами
Отправлено: [прилетело НЛО и...] от 17 Сентября 2017, 02:30:17
Прошу прощения, ксенолингвистический гаджет барахлит.
Если Вы хотите в модели показать, что объект-часть существует внутри объекта-целого, то для этого Вы рисуете диаграмму составной структуры (composite structure diagram). Сама по себе композиция, нарисованная на диаграмме классов не накладывает ограничений на то, чтобы части жили именно внутри целого.
Если Вы хотите в модели показать, что объект-часть в течение своей жизни не может сменить хозяина -- объект-целое --, как в Вашем примере с квартирой, то Вы пишете возле чёрного ромба {readOnly}, или как когда-то писали {frozen}. Если такой пометки нет, то [по умолчанию] композиция позволяет менять хозяина. [По умолчаию] она не обладает стационарностью.
Название: Re: Реализация отношений между классами
Отправлено: Galogen от 17 Сентября 2017, 19:39:07
Прошу прощения, ксенолингвистический гаджет барахлит.
Если Вы хотите в модели показать, что объект-часть существует внутри объекта-целого, то для этого Вы рисуете диаграмму составной структуры (composite structure diagram). Сама по себе композиция, нарисованная на диаграмме классов не накладывает ограничений на то, чтобы части жили именно внутри целого.
Если Вы хотите в модели показать, что объект-часть в течение своей жизни не может сменить хозяина -- объект-целое --, как в Вашем примере с квартирой, то Вы пишете возле чёрного ромба {readOnly}, или как когда-то писали {frozen}. Если такой пометки нет, то [по умолчанию] композиция позволяет менять хозяина. [По умолчаию] она не обладает стационарностью.

Хм, а в таком случае чем композиция отличается от агрегации? Без этих уточняющих признаков?
Название: Re: Реализация отношений между классами
Отправлено: [прилетело НЛО и...] от 17 Сентября 2017, 21:49:34
Гм. Видимо, важно добавить, что всюду у меня речь об UMLьных агрегациях и UMLьных композициях.
По UMLю композиция -- это усиленная форма агрегации, отличающаяся тем, что при композиции:
1) у части не может быть больше одного целого;
2) все части, имеющиеся у целого в момент его удаления также удаляются.
Название: Re: Реализация отношений между классами
Отправлено: Galogen от 17 Сентября 2017, 22:34:14
Гм. Видимо, важно добавить, что всюду у меня речь об UMLьных агрегациях и UMLьных композициях.
По UMLю композиция -- это усиленная форма агрегации, отличающаяся тем, что при композиции:
1) у части не может быть больше одного целого;
2) все части, имеющиеся у целого в момент его удаления также удаляются.
Можно ли считать, что нотации для моделирования данных предшествовали нотациям для моделирования ОО структур. Например, IDEF1x ориентированная на реляционные данные поддерживает специфичные и неспецифичные связи.  Специфичными будут только связи принадлежности, то есть по сути агрегации, среди который выделяется идентификационно-зависимая - сиречь композиция.
Название: Re: Реализация отношений между классами
Отправлено: [прилетело НЛО и...] от 17 Сентября 2017, 22:50:51
Похожие раскопки делали тут же на форуме в части диаграмм состояний. Думаю, что можно попытаться раскопать, кто же выдумал композицию с агрегацией, что он на самом деле имел в виду, до того как всё испортили авторы стандарта UML.)