Некоторые языки, в особенности C++, включают в себя понятие параметризованного класса (parameterized class) или шаблона (template). (Шаблоны могут быть включены в языки Java и С# в ближайшем будущем.)
Наиболее очевидная польза от применения этого понятия проявляется при работе с коллекциями в строго типизированных языках. Таким образом, в общем случае поведение для множества можно определить с помощью шаблона класса Set (Множество).
class Set <T> {
void insert (T newElement);
void remove (Т anElement);
После этого можно использовать данное общее определение для задания более конкретных классов-множеств:
Set <Еmрlоуее> employeeSet;
Для объявления класса-шаблона в языке UML используется нотация, показанная на рис. 5.17. Прямоугольник с буквой «Т» на диаграмме служит для указания параметра типа. (Можно указать более одного параметра.)
Применение параметризованного класса, такого как Set<Employee>, называется образованием производных (derivation). Образование производных можно изобразить двумя способами. Первый способ отражает синтаксис языка C++ (рис. 5.18). Выражение образования производных описывается в угловых скобках в виде <parameter-name::parameter-valuex Если указывается только один параметр, то обычно имя параметра опускают. Альтернативная нотация (рис. 5.19) усиливает связь с шаблоном и допускает переименование связанного элемента.
|
|
Ключевое слово «bind» (связать) является стереотипом отношения уточнения. Это отношение означает, что класс EmployeeSet (Множество служащих) будет согласован с интерфейсом класса Set. Можете считать EmployeeSet подтипом типа Set. Это соответствует другому способу реализации типизированных коллекций, который заключается в объявлении всех соответствующих подтипов.
Однако использование образования производных не эквивалентно определению подтипа. В связанный элемент нельзя добавлять новые возможности - он полностью определен своим шаблоном; можно только добавить информацию, ограничивающую его тип. Если же вы хотите добавить возможности, то должны создать некоторый подтип.
Перечисления
Перечисления (рис. 5.20) используются для представления фиксированного набора значений, у которых нет других свойств кроме их символических значений. Они изображаются в виде класса с ключевым словом «enumeration»