Unidirectional association

Одна из ответственных и сложных типов связи, которая употребляется в диаграмме классов. Эта сообщение говорит о том, что один класс включается в второй как атрибут, по ссылке либо по значению (рис. 12.1).

Совет. Применяйте задание атрибутов, в то время, когда желаете включить в класс переменную несложного типа, и применяйте Unidirectional Association, в то время, когда желаете включить в класс переменную со сложным типом, к примеру, класс либо структуру.

Рис. 12.1.Пример связи Unidirectional Association

Приведенный потом листинг показывает код C++, что был создан для продемонстрированной на рисунке связи.

class Class2; class Class1

{

public:

Class2* theClass2;

};

Замечание. Детально создание кода класса на C++ и Visual C++ будет рассмотрено в темах 13, 14.

Rational Rose формирует код класса в зависимости от установленных спецификаций связи, исходя из этого разглядим влияние разных установок спецификаций на приобретаемый код. При нажатии правой кнопки мыши на связи активизируется контекстное меню, которое предоставляет стремительный доступ к установкам связи. Но спецификации связи разрешают выполнить то же самое при помощи вкладок диалоговых окон.

Активизируйте окно спецификаций при помощи контекстного меню либо двойного нажатия мыши на стрелке ассоциации, наряду с этим раскрывается вкладка General спецификаций (рис. 12.2).

Рис. 12.2.Вкладка General спецификаций Unidirectional Association

Вкладка General

Показывает данные об имени, стереотипе, родительском классе и другую основные данные о связи.

  • Name (имя) задает имя связи. Для каждой связи возможно, не смотря на то, что и не обязательно, задано имя, которое одним словом либо целой фразой показывает цель либо семантику связи;
  • Parent (родительский) показывает имя контейнера, у которого в собствености сообщение;
  • Stereotype (стереотип) показывает стереотип;
  • Role A/Role В показывает имя роли, с которой один класс ассоциируется с другим;
  • Element A/Element В показывает имя класса, что ассоциирован с данной ролью.

Вкладка Detail

Вкладка Detail показывает дополнительные особенности связи (рис. 12.3).

Рис. 12.3.Вкладка Detail спецификаций Unidirectional Association

  • Link Element показывает ассоциированный класс, в случае если сообщение соединена с ним ассоциацией, как продемонстрировано на рис. 12.1;
  • Name direction показывает имя связанного класса;
  • Constraints показывает выражение некоего семантического условия, которое должно быть выполнено, тогда как совокупность будет в устойчивом состоянии.

Вкладка Role General

Вкладка Role General отражает настройки переменной, которая будет включена в класс (рис. 12.4).

Рис. 12.4.Вкладка Role A General спецификаций Unidirectional Association

Так как направление связи в отечественном примере от Classl к Class2, то будем заполнять вкладку Role A General. Эта вкладка имеет следующие поля:

  • Role разрешает задавать имя переменной класса;
  • Element показывает имя класса, для которого создается переменная;
  • Export Control определяет доступ к данному элементу. В нашем случае установлен тумблер Public, исходя из этого переменная была создана в секции Public.

Вкладка Role Detail

Вкладка Role Detail детализирует установки для связи (рис. 12.5). Тут представлены следующие поля:

  • Role разрешает задавать имя переменной класса;
  • Element показывает имя класса, для которого создается переменная;
  • Constraints показывает выражение некоего семантического условия, которое должно быть выполнено, тогда как совокупность будет в устойчивом состоянии. При задании ограничения оно будет продемонстрировано на диаграмме в фигурных скобках. Причем, на формируемом коде данное ограничение не будет отражаться.

Замечание. Поле Constraints во вкладке Detail используется к связи в целом, тогда как ограничение, указанное в данной вкладке используется конкретно к данной роли.

Рис. 12.5.Вкладка Role A Detail спецификаций Unidirectional Association

  • Multiplicity показывает, сколько ожидается создать объектов данного класса, возможно задано числом либо буквой «n». Значение «n» показывает что количество не лимитировано. Возможно задать разные варианты ожидаемого количества либо диапазон. Причем, указанное число отображается рядом со стрелкой связи;
  • Navigable показывает направление, в котором действует сообщение. При установке этого флажка сообщение получает вид стрелки, показывающей направление связи. Это поле напрямую воздействует на создаваемый код класса, поскольку на какой класс будет направлена стрелка связи, тот и будет включен в второй. Чтобы поменять направление связи, достаточно снять флажок с вкладки Role A Detail и установить его во вкладке Role В Detail. Наряду с этим при, кода сняты флажки на обеих вкладках ни один элемент не будет включен в второй. Наряду с этим на диаграмме будет продемонстрирована легко линия (рис. 12.6);

Рис. 12.6.Пример ненаправленной связи

  • Aggregate говорит о том, что один класс не просто использует, а содержит второй. Но будьте внимательны, чтобы продемонстрировать, что класс Class2 входит в класс Classl, нужно установить данный флажок во вкладке Role В Detail. Наряду с этим стрелка связи на диаграмме получает ромб с обратной стороны стрелки (рис. 12.7).

Рис. 12.7.Пример агрегирования класса

Агрегирование свидетельствует физическое включение связанного класса в второй класс. Наряду с этим генератором кода C++ Rational Rose формирует код, приведенный на листинге.

class Class2;

class Class1

{

public:

Class2 theClass2;

};

Замечание. Агрегирование возможно включено лишь для одной вкладки — либо для Role A, либо для Role В, но не в один момент.

  • Static обозначает, что этот реквизит — неспециализированный для всех объектов данного класса. Причем, по окончании инициализации к нему возможно обращаться, даже в том случае, если еще не было создано ни одного объекта класса. Static используется чтобы переменные для того чтобы типа не тиражировались при создании нового объекта класса. К примеру, в случае если нужно совершенно верно знать, сколько объектов класса создано, то возможно поручить самому классу смотреть за этим числом, создав в нем переменную типа static int iCnt, видимую во всех объектах класса;
  • Friend определяет, что указанный класс есть дружественным классом, другими словами имеет доступ к защищенным атрибутам и методам класса.

Замечание. Будьте внимательны, в случае если флажок установить, а позже снять, а между этими операциями обновить код по модели, то после этого нужно вручную удалить из кода класса строчок friend.

  • Key/Qualifiers — атрибут, что идентифицирует неповторимым образом единичный объект. На генерацию кода влияния не оказывает.

Association Class (ассоциированный класс)

Применяйте этот тип связи для отображения свойства ассоциации. Особенности сохраняются в классе и соединяются связью Association (рис. 12.8). Данный тип связи не имеет собственных спецификаций.

Рис. 12.8.Пример применения Association Class

Dependency of instanties (зависимость)

Данный тип связи разрешает продемонстрировать, что один класс применяет объекты другого. Применение может осуществляться при передаче параметров либо вызове операций класса. В этом случае генератор кода C++ Rational Rose включает заголовочный файл в класс, что применяет операторы либо объекты другого класса. Графически данный вид связи отражается пунктирной стрелкой (рис. 12.9).

Рис. 12.9.Пример связи Dependency of instanties

Generalization

Этот тип связи разрешает указать, что один класс есть родительским по отношению к второму, наряду с этим будет создан код наследования класса. Пример таковой связи продемонстрирован на рис. 12.10.

Рис. 12.10.Пример связи Generalization

Потом продемонстрирован листинг, полученный при генерации кода для продемонстрированного примера.

#include Class1. h

class Class2 : public Classl

{

};

Потом для работы мы, по большей части, будем пользоваться двумя видами связей — это Unidirectional Association, для агрегирования включения ссылок на классы, и Generalization, для иерархии наследования.

Примерные вопросы для защиты и самопроверки

1. виды и Назначение связей, употребляющихся в диаграмме классов.

2. спецификации и Назначение связи Unidirectional Association.

3. Обрисуйте другие виды связей: Association Class, Dependency, Generalization.

Литература

1. Трофимов С.А. Case-технологии: практическая работа в Rational Rose — М.: ЗАО «Издательство ДВУЧЛЕН», 2001 г. — 272 с.: ил.

Doctrine ManyToOne Unidirectional — Association Mapping


Также читать:

Понравилась статья? Поделиться с друзьями: