Ассоциация "один ко многим"
Данный вид ассоциаций также представляет особую ценность при проектировании классов. Множественность ассоциации задается в свойствах связи (пункты Role A Detail и Role B Detail. Где помимо ролей можно задать и специфические атрибуты конкретной ассоциациии, ну, скажем, дать ей название. Рис. 3 показывает скриншот данного окна). Рисунок 4, в свою очередь, демонстрирует внешний вид данной ассоциации.
Рис.3
Рис.4
ФАЙЛ STRING.h
* * *
private: //## implementation // Data Members for Associations
//## Association: <unnamed>%39FD300C00A9 //## begin String::<the_NewString>%39FD300C033E.role preserve=no public: NewString {n -> 1RHN} NewString *the_NewString; //## end String::<the_NewString>%39FD300C033E.role
// Additional Implementation Declarations //## begin String%39FD295103B9.implementation preserve=yes //## end String%39FD295103B9.implementation * * *
ФАЙЛ NEWSTRING.h
* * *
private: //## implementation // Data Members for Associations
//## Association: <unnamed>%39FD300C00A9 //## begin NewString::<the_String>%39FD300C0348.role preserve=no public: String {1 -> nRHN} UnboundedSetByReference<String> the_String; //## end NewString::<the_String>%39FD300C0348.role
// Additional Implementation Declarations //## begin NewString%39FD296801A9.implementation preserve=yes //## end NewString%39FD296801A9.implementation * * *
Как видно из фрагментов кода, мы получили, как и впредыдущих случаях, ссылку на класс, в то то время, как для другого класса был использован контейнер. По умолчанию Rational Rose не предоставляет реализацию контейнерного класса. Вместо него генерируется код с UnboundedSetByReference в качестве контейнерного. Указание же конкретного контейнерного класса - дело самого разработчика.