Существует несколько способов разбиения атрибутов и операций по кате г ориям. Минимальный стандартный интерфейс определяет категории для операций, которые в свою очередь определяют атрибуты, поддерживающие эти операции. Составители минимального стандартного интерфейса руководствовались тем, что все классы должны определять такие операции и функции, которые делают его полезным. Вот список этих операций:
• конструктор по умолчанию;
• деструктор;
• конструктор копии;
• операции присваивания;
• операции сопоставления на равенство;
• операции ввода-вывода;
• операции хеширования;
• операции запросов.
Этот список можно использовать в качестве основного перечня категорий для классификации операций, определяемых в классе. В этот перечень можно внести категории, которые позволяют указать дополнительные характеристики для атрибутов и операций.
Атрибуты:
• static
• const
Операции:
• virtual
• pure virtual
• friend
При выборе категорий следует исходить из того, какал из них лучше всего описывает услуги, предоставляемые классом. Имя категории справа и слева заключается вдвойные угловые скобки («. . .»). На рис. 10.3 показано два возможных способа организации атрибутов и операций для класса student_schedule, использующих: символы видимости и спецификаторы доступа (рис. 10.3, а) и категории минимально-гостандартного интерфейса (рис. 10.3, б).
Рис. 10.3. Два способа организации атрибутов и операций в диаграмме класса |
Шаблонный класс представляет собой механизм, который позволяет в качестве параметра в определении класса использовать тип. Шаблон определяет действия, которые выполняются над переданным ему типом. В С++ параметризованный класс создается с помощью ключевого слова template.
template classname { . . . } ;
Параметр Турепредставляет любой тип, передаваемый шаблону. Это может быть встроенный С++-тип или определенный пользователем класс. При объявлении параметра Туре шаблон связывается с эле м енто м, переданным ему в качестве параметризованного типа. Например, класс student_scheduleвключает контейнер map,который содержит векторы объектов типа courseдля каждого дня недели. Как класс map,так и класс vectorявляются шаблонными, map > StudentSchedule;
Контейнер mapиспользует для ключа тип string,а для значения — тип vector.Контейнер vectorсодержит объекты определенно г о пользователе м типа course.Контейнер mapможет отобразить соответствие между значениями двух любых типов данных, а контейнер vectorсодержать значения любого типа данных.
map > Соответствие м ежду число м и векторо м строк
map > Соответствие м ежлучисло м истрокой
vector Вектор объектов класса student_schedule
vector > Вектор отображений, которые устанавливают соответствие между числом и строкой
Шаблонные классы также представляются как прямоугольники. Параметризованный тип представляется как прямоугольник (меньшего размера), начертанный штриховой линией и расположенный в правом верхнем углу прямоугольника класса. Шаблонный класс может быть связанным или несвязанным. При представлении несвязанного шаблонного класса в штриховом прямоугольнике отображается прописнал буква T, означающал несвязанный параметризованный тип. Для представления связанного шаблонного класса существует два способа. Один из них состоит в использовании символа класса, содержащего синтаксис С++ для объявления и связывания шаблонного класса, напри м ер: vector
Этот вариант называется неявным связыванием. В дру г о м способе используется стереотип зависи м ости bind (связать).Этот стереотип задает источник, который реализует шаблонный класс посредство м использования реально г о пара м етризованно г о ти па.Этот вариант называется явным связыванием. Шаблонный объект является реализацией шаблонно г о класса. Он обладает отношение м зависи м ости с шаблонным классом. С помощью стереотипа связатьуказывается и м я параметра-типа. В штриховом прямоугольнике отображаются соответствующие типы данных. Шаблонный объект можно также рассматривать как детализацию шаблонно г о класса. Детализаци я — это общий термин, означающий более высокий уровень представления информации о том, что уже существует. Стереотипный индикатор «связать»детализирует шаблонный класс посредством реализации параметризованного типа. Способы представления шаблонного класса для контейнера mapпредставлены на рис. 10.4.
Читать дальше