Каково различие между ассоциацией, агрегированием и составом?

Каково различие между ассоциацией, агрегированием и составом? Объясните с точки зрения реализации.

361
задан default locale 21 November 2019 в 18:37
поделиться

3 ответа

От: Remo H. Jansen книга «Beactning React: Изучение TypeScript 2.x - Второе издание»:

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

Мы называем агрегацию теми отношениями, чьи объекты имеют независимый жизненный цикл, но есть владение, и дочерние объекты не могут принадлежать другому родительскому объекту. Давайте рассмотрим пример сотового телефона и аккумулятора сотового телефона. Одна батарея может принадлежать телефону, но если телефон перестает работать, и мы удаляем его из нашей базы данных, батарея телефона не будет удалена, потому что она все еще может функционировать. Таким образом, при агрегации при наличии владения объекты имеют свой жизненный цикл

. Мы используем термин состав для обозначения отношений, чьи объекты не имеют независимого жизненного цикла, и если родительский объект будет удален, все дочерние объекты также будут удалены. Давайте рассмотрим пример взаимосвязи между вопросами и ответами. Отдельные вопросы могут иметь несколько ответов, и ответы не могут принадлежать нескольким вопросам. Если мы удалим вопросы, ответы будут автоматически удалены.

1
ответ дан 23 November 2019 в 00:15
поделиться

I think this link will do your homework: http://ootips.org/uml-hasa.html

To understand the terms I remember an example in my early programming days:

If you have a 'chess board' object that contains 'box' objects that is composition because if the 'chess board' is deleted there is no reason for the boxes to exist anymore.

If you have a 'square' object that have a 'color' object and the square gets deleted the 'color' object may still exist, that is aggregation

Both of them are associations, the main difference is conceptual

5
ответ дан 23 November 2019 в 00:15
поделиться

Как говорили другие, ассоциация - это связь между объектами, агрегация и композиция - это типы ассоциации.

С точки зрения реализации агрегация достигается за счет наличия члена класса по ссылке . Например, если класс A агрегирует объект класса B, у вас будет что-то вроде этого (в C ++):

class A {
    B & element;
  // or B * element;
};

Семантика агрегации такова, что когда объект A уничтожается, объект B, который он хранит, все еще существует . При использовании композиции у вас более сильные отношения, обычно за счет сохранения члена по значению :

class A {
    B element;
};

Здесь, когда объект A уничтожается, содержащийся в нем объект B также будет уничтожен. Самый простой способ добиться этого - сохранить член по значению, но вы также можете использовать какой-нибудь умный указатель или удалить член в деструкторе:

21
ответ дан 23 November 2019 в 00:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: