Параллельное и распределенное программирование на С++
Шрифт:
Рис. 10.3. Два способа организации атрибутов и операций в диаграмме класса
Шаблонные классы
Шаблонный класс представляет собой механизм, который позволяет в качестве параметра в определении класса использовать тип. Шаблон определяет действия, которые выполняются над переданным ему типом. В С++ параметризованный класс создается с помощью ключевого слова template.
template <class Type > classname { . . . } ;
Параметр Туре представляет любой тип, передаваемый шаблону. Это может быть встроенный С++-тип или определенный пользователем класс. При объявлении параметра Туре шаблон связывается с эле м енто м, переданным
Контейнер map использует для ключа тип string, а для значения — тип vector. Контейнер vector содержит объекты определенно г о пользователе м типа course. Контейнер map может отобразить соответствие между значениями двух любых типов данных, а контейнер vector содержать значения любого типа данных.
map <int, vector <string> > Соответствие м ежду число м и векторо м строк
map <int, string> > Соответствие м ежлучисло м истрокой
vector <student_schedule> Вектор объектов класса student_schedule
vector <map <int,string> > Вектор отображений, которые устанавливают соответствие между числом и строкой
Шаблонные классы также представляются как прямоугольники. Параметризованный тип представляется как прямоугольник (меньшего размера), начертанный штриховой линией и расположенный в правом верхнем углу прямоугольника класса. Шаблонный класс может быть связанным или несвязанным. При представлении несвязанного шаблонного класса в штриховом прямоугольнике отображается прописнал буква T, означающал несвязанный параметризованный тип. Для представления связанного шаблонного класса существует два способа. Один из них состоит в использовании символа класса, содержащего синтаксис С++ для объявления и связывания шаблонного класса, напри м ер: vector <string>
Этот вариант называется неявным связыванием. В дру г о м способе используется стереотип зависи м ости bind (связать). Этот стереотип задает источник, который реализует шаблонный класс посредство м использования реально г о пара м етризованно г о ти па. Этот вариант называется явным связыванием. Шаблонный объект является реализацией шаблонно г о класса. Он обладает отношение м зависи м ости с шаблонным классом. С помощью стереотипа связать указывается и м я параметра-типа. В штриховом прямоугольнике отображаются соответствующие типы данных. Шаблонный объект можно также рассматривать как детализацию шаблонно г о класса. Детализаци я — это общий термин, означающий более высокий уровень представления информации о том, что уже существует. Стереотипный индикатор «связать» детализирует шаблонный класс посредством реализации параметризованного типа. Способы представления шаблонного класса для контейнера map представлены на рис. 10.4.
Рис. 10.4. Способы представления связанного и несвязанного шаблонного класса
Отношения между классами и объектами
Язык UML определяет три типа отношений между классами:
• зависимости;
• обобщения;
• ассоциации.
Зависимость определяет отношение между дву м я класса м и. Если один класс зависит
Зависимость, обобщение и ассоциацию можно рассматривать как различные классификации отношений, поскольку существует множество типов зависимостей, обобщений и ассоциаций, которые можно определить. Каждал классификация отношений имеет собственный символ представления. Таким символом является отрезок прямой (начертанный сплошной или пунктирной линией) между элементами, который может увенчиваться стрелкой некоторого типа. Для более детального определения отношений отрезки прямых могут дополняться стереотипами и специальными обозначениями («украшениями»). Стереотип — это метка, используемая для более подробного описания UML-элемента. Он представляется в виде имени, заключенного в угловые скобки, и размещаемого над элементом или рядом с ним. Например, на рис. 10.4 для описания шаблонного объекта стереотип
<<bind>> (<<связать>>)
размещен рядом со стрелкой, которая отображает зависимость используемых объектов. Под «украшениями» понимаются текстовые или графические элементы, добавляемые к базовой интерпретации элемента и используемые для документирования сведений о спецификации элемента. Например, ассоциация отображается в виде отрезка сплошной линии между элементами. Агрегирование — это тип ассоциации, который выражает отношение «целое-часть». Для отображения агрегирования используется отрезок сплошной линии, у которого один конец (прилегающий к «целому» элементу) венчается полым ромбом.
Зависимость обозначается пунктирной направленной линией (со стрелкой), которая указывает на зависимую конструкцию. Отношение зависимости следует применять в случае, когда одна конструкция использует другую. Обобщение обозначается сплошной направленной линией со стрелкой, указывающей на родительский класс (суперкласс). Отношение обобщения следует применять в случае, когда одна конструкция выведена из другой. Ассоциация обозначается сплошной линией, которая соединяет одинаковые или различные конструкции. Отношение ассоциации следует применять в случае, когда одна конструкция структурно связана с другой. Некоторые стереотипы и ограничивающие условия, которые применяются к зависимостям, приведены в табл. 10.2. Эти стереотипы используются для отображения зависимостей между классами, интерактивными объектами, состояниями и пакетами. Стереотипы и ограничивающие условия, которые могут применяться к обобщениям и ассоциациям, приведены в табл. 10.3 и 10.4. Если стереотипы используют графические «украшения», они показаны в таблицах.
Таблица 10.2. Стереотипы, применяемые к зависимостям
Зависимость
Описание
<< bind >> (<< связать>>)
источник реализует шаблонный приемник, используя peальные параметры
<<friend>>(<<друг>>)
видимость источника распространяется на содержимое приемника
<<instanceOf>> (<<экземпляр>>)