Site Tools


c_aggregation

Более общим понятием по сравнению с композицией является агрегация. Отличие в том, что в случае композиции время жизни контейнера и внутреннего объекта одинаково. Композицию поэтому еще называют агрегацией по значению. Композиция не может быть цикличной: один объект – это целое, другой – часть, т.е. физическое вхождение одного в другое нельзя “зациклить”, а вот указатели или ссылки, с помощью которых создается агрегация - можно (каждый из двух объектов может содержать указатель или ссылку на другой). Таким образом, композиция используется, когда у некоторого объекта есть неотъемлимые составные части. Например, Самолет имеет крылья, двигатель, хвост и т.д. Иногда композиция соответствует физическому объекту, иногда это более абстрактное понятие (например, классы Клуб или Пользователь). В случае агрегации уничтожение контейнера не уничтожает его содержимое. Агрегация по ссылке позволяет части быть независимой от целого. Пример: курс и студенты.


стр.38 GOF
Рассмотрим различие между агрегацией и осведомленностью (acquaintance) (синоним “использование”)
объектов и его проявления на этапах компиляции и выполнения. Агрегация подразумевает, что один объект
владеет другим или несет за него ответственность.
В общем случае мы говорим, что объект содержит другой объект или является его частью. В общем случае мы
говорим, что один объект содержит другой объект или является его частью. Агрегирование означает, что агрегат
и его составляющие имеют одинаковое время жизни.
Говоря же об осведомленности, мы имеем в виду, что объекту известно о другом объекте. Иногда
осведомленность называют ассоциацией или отношением «использует». Осведомленные объекты могут запрашивать
друг у друга операции, но они не несут никакой ответственности друг за друга. Осведомленность - это более
слабое отношение, чем агрегирование; оно предполагает гораздо менее тесную связь между объектами.
В С++ агрегирование можно реализовать путем определения переменных-членов, которые являются экземплярами,
но чаще их определяют как указатели или ссылки. Осведомленность также реализуется с помощью указателей и
ссылок.
Различие между осведомленностью и агрегированиеам определяется, скорее, предпологаемым использованием, а не
языковыми механизмами.

Вероятно, авторы хотели сказать, что агрегация, это переменные класса(антрибуты), как ссылочные так и указателем.
Композиция, это агрегация указателем.
Осведомленность, это агрегация ссылочная + все остальные случае обращения по ссылкам.

You could leave a comment if you were logged in.
c_aggregation.txt · Last modified: 2013/02/25 11:17 by konovalov

Page Tools