Агрегация и ассоциация
От: artgonch  
Дата: 23.09.04 05:40
Оценка:
Подскажите, чем они отличаются. Приведите, пожалуйста, примеры использования и того и другого (в жвух-пяти словах).
Заранее спасибо.
Re: Агрегация и ассоциация
От: aka50 Россия  
Дата: 23.09.04 06:12
Оценка:
Здравствуйте, artgonch, Вы писали:

A>Подскажите, чем они отличаются. Приведите, пожалуйста, примеры использования и того и другого (в жвух-пяти словах).

A>Заранее спасибо.

http://ooad.asf.ru/standarts/uml/spr/Aggregation.asp

Разница между агрегацией и ассоциацией в большей степени является вопросом личного предпочтения разработчика, а не семантики. Всегда помните, что агрегация — это ассоциация. Агрегация несет в себе идею, что агрегат является совокупностью своих частей. Единственной новой семантической чертой, которую агрегация добавляет к ассоциации, является ограничение на цикличность связей. Все прочие ограничения (такие как зависимости существования) определяются множественностью, а не значком агрегации. Несмотря на всю скудность семантики агрегации, многие разработчики рассматривают ее как обязательную часть моделирования. Мы бы рекомендовали относиться к ней как к дополнительному, а не обязательному средству.
С агрегацией связано несколько второстепенных свойств, которые не были включены в определение агрегации. К ним относятся передача операций от агрегата к его частям (например, операция перемещения) и компактное распределение памяти (употребляется для того, чтобы агрегат и его части можно было загрузить с помощью одного обращения к памяти). Некоторые авторы различают несколько видов агрегации, но нам кажется, что различия между этими видами слишком слабы, чтобы считать их необходимыми при стандартном моделировании.
Агрегация представляет собой свойство, выходящее за пределы отдельной ассоциации. Можно построить агрегацию из разных пар классов, и результатом будет новая агрегация. Агрегация накладывает ограничение на экземпляры всех агрегированных ассоциаций (включая и композиции), запрещающее цикличность связей, включая те, которые существуют между различными ассоциациями. В некотором роде агрегация является обобщением ассоциации, в котором к ассоциациям различных видов применяются одни и те же ограничения и операции.
Композиция имеет более специфическую семантику, которая касается физического хранения объектов и различных аспектов их принадлежности другим объектам. Композицию можно использовать тогда, когда каждая часть принадлежит только одному объекту и не существует независимо от этого объекта. Лучше всего использовать композицию в тех случаях, когда части должны быть размещены в памяти и проинициализированы во время создания агрегата (части не могут пережить уничтожение своего владельца). Этими свойствами обладают атрибуты классов, поэтому их можно считать определенного рода композицией, хотя они и не моделируются подобным образом. С помощью композиций можно избежать таких опасностей, как появление провисших указателей или осиротевших объектов. Композицию используют также в ситуациях, когда в целях инкапсуляции и удобства манипулирования несколько атрибутов помещают в отдельный класс, хотя в действительности они относятся к основному классу. Еще одним вероятным кандидатом в качестве композитной части выступают классы-контейнеры, реализующие ассоциации (несмотря на то, что, как правило, они создаются с помощью генераторов кода, а не моделируются). Не забудьте, что у композитной части, такой как класс-контейнер, например, могут быть ссылки (указатели) на не композитные части. При этом объекты, на которые делаются ссылки, не уничтожаются вместе со ссылавшимся объектом.

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.