KNOW INTUIT, Лекция, Въведение в UML 2
N-арни асоциации и класови асоциации
Този курс се занимава основно с бинарни асоциации - тоест тези, които свързват два класа. Рефлексивните асоциации също бяха обсъдени по-горе. В същото време в UML са възможни n-арни асоциации, които свързват няколко класа заедно. Например асоциация, наречена „Семейство“, може да свърже следните класове: „Съпруг“, „Съпруга“, „Дете“, както е показано на фигура 1. 4.6.
В този пример съпруг и съпруга трябва да присъстват в семейството (стойността за множество в съответния край на асоциацията „Семейство“ е 1) и може да има произволен брой деца, включително нито едно (стойността за множество в съответния край на асоциацията е 0..*).
Една асоциация не може да има атрибути, но това е много желателно в много случаи. Например, ако студент има асоциация много към много с курс, тогава има смисъл тази асоциация да има атрибут, наречен оценка. Това се постига чрез обвързване към асоциацията на специален клас - клас на асоциация (клас на асоциация), в който са посочени всички необходими атрибути, както е показано на фиг. 4.7.
Агрегиране
В края на асоциацията може да има едно важно свойство, наречено агрегиране, което показва наличието на връзка „цяло/част“ (част от) между екземплярите на класа. Предметът-част под една или друга форма е включен в обект-цялото. Така например на фиг. Фигура 4-1 показва, че обекти от клас COperator са включени в обект от клас COperatorList (т.е. първият клас се агрегира от втория). По този начин агрегацията, като специален случай на асоцииране, също задължително влиза във взаимоотношения между инстанции.класове.
Агрегацията може да бъде "слаба", както в примера на фиг. 4.1 и "силен". В последния случай се нарича композиция и означава, че агрегатният обект е единствено отговорен за създаването и изтриването, както и за съществуването на обекти, които са свързани с него чрез композиция, а също така един обект във всеки момент от своето съществуване може едновременно да бъде част само от един агрегат. Ако в примера с класовете COperator и COperatorList последният стриктно контролира достъпа до всеки оператор от неговия списък (създаване, изтриване, достъп до оператора по номер в списъка и т.н.), тогава можем да обозначим свързващата ги агрегационна асоциация като композиция:
Агрегацията е фундаментално различна от наследяването. Това е важно, защото при моделиране на домейн с помощта на UML диаграми на класове, може да се забележат определени прилики между тях: (i) и двете ви позволяват да изградите дървовидна йерархия на класове; (ii) предшественикът, подобно на агрегирания клас, добавя функционалност към детето/агрегата; (iii) изображенията на двете съотношения са донякъде сходни визуално. И веднъж трябваше да убедя анализаторите в труден диалог, че наследяването и агрегацията не са едно и също нещо. И ето защо.