Другим основным видом отношений между классами и объектами является агрегация. Она означает, что один класс содержит в себе в качестве агрегатов (составных частей, подсистем) другие классы. Так автомобиль состоит из кузова, двигателя, трансмиссии и т.п., а в состав приемопередающего устройства входят передатчик, приемник и антенно-фидерное устройство. В UML агрегации обозначаются в виде линии с закрашенным ромбом на конце. Агрегация имеет кратность. Так автомобиль обычно содержит один двигатель, который в свою очередь может принадлежать только одному автомобилю. Автомобиль может обычно содержать от двух до пяти дверей. В свою очередь каждая дверь может принадлежать лишь одному автомобилю.
Чтобы обратиться к атрибутам и методам агрегата, необходимо сначала получить указатель на его владельца, а затем уже выбрать требуемые атрибуты и методы.
Пусть объект E имеет методы f1() и f2() (рис. 2). Чтобы воспользоваться ими, надо сначала получить указатель на корневой объект А, затем на объект С, что в объектно-ориентированном программировании обычно записывается следующим образом: A.C Далее получаем указатель на D, так как он является агрегатом C, и, наконец, вызываем требуемые методы f1() и f2(): A.C.D.f1() A.C.D.f2()
Композиция является еще одним отношением, родственным агрегации. Но если в агрегации агрегаты принадлежат классу или объекту, то в композиции существует более слабая связь. Так, студенты с вузом находятся в отношении композиции, тогда как факультеты, которые входят в состав вуза (т. е. являются его неотъемлемой частью или агрегатами), связаны с ним отношением агрегации. На UML композиция обозначается с помощью незакрашенных ромбов. Как и в случае агрегации, отношение композиции имеет кратность. Агрегация и композиция являются подклассами класса отношений ассоциации. Ассоциация обозначается в виде линии без стрелок и ромбиков и может принимать вид как агрегации, так и композиции
<< назад вперед >>