OpenU.Ru
Элемент модели, полученный путем связывания значений аргументов с параметрами
шаблона.
См. binding; template.
Семантика
Шаблон - это параметризованное описание множества
возможных элементов. Чтобы получить конкретный элемент, формальные параметры
шаблона должны быть связаны с фактическими значениями. Такие значения описываются
выражениями, определяемыми той областью действия, в которой происходит связывание.
Большинство аргументов является классами или числами.
Если область действия связывания сама по себе является шаблоном, то параметры
внешнего шаблона можно использовать, в качестве аргументов при связывании внутреннего
шаблона, иными словами, задавать ему новые параметры. Однако имена параметров
шаблона не имеют вне его никакого смысла. Параметры двух шаблонов нельзя считать
соответствующими друг другу только потому, что у них одинаковые имена. Точно
так же нельзя считать соответствующими друг другу параметры методов, исходя
лишь из совпадения их имен.
Связанный элемент полностью определяется своим шаблоном, что делает невозможным
его расширение. Невозможно объявить новые атрибуты
или операции в классах. Однако для них можно создать
подклассы, которые можно расширять стандартным способом.
Пример
На рис. 35 показано повторное связывание шаблона. Polygon (Многоугольник) представляет
собой шаблон, имеющий всего один параметр - размер n. Мы хотим создать его на
основе существующего шаблона FArray, у которого есть два параметра - тип элемента
Т и размер k. Для этого параметр k из шаблона FArray связывается с параметром
n из шаблона Polygon. Параметр Т из шаблона FArray связан с классом Point (Точка).
В данном случае происходит удаление параметра из исходного шаблона. Чтобы создать
класс Triangle (Треугольник), нужно связать параметр размера n со значением
3. Чтобы создать не Triangle, a Quadrilateral (Четырехугольник), нужно, чтобы
значение было равно А.
Кроме этого, на рисунке показано, что шаблон Polygon является классом-потомком
Shape (Формы). Это значит, что каждый класс, связанный из шаблона, является
подклассом Shape (и Triangle, и Quadrilateral являются подклассами Shape).
Рис. 35. Повторное связывание шаблона
Нотация
Связанный элемент можно изобразить при помощи пунктирной стрелки, идущей от
шаблона к связанному элементу. Возле стрелки ставится ключевое слово "bind".
Другим способом это можно сделать, используя синтаксис ИмяШаблона<аргументсписок>,
куда подставляется имя, позволяющее идентифицировать шаблон. Текстовая форма
нотации избавляет от необходимости изображать на диаграмме сам шаблон или рисовать
идущие от него стрелки. Такая форма нотации особенно удобна, когда связанный
элемент представляет собой классификатор, используемый в качестве параметра
атрибута или операции.
См. более подробно в статье binding. Пример представлен
на рис. 34.
Разделы для указания атрибута и операции в символе связанного класса обычно
опускаются, поскольку их нельзя изменить.
Имя связанного элемента можно использовать везде, где используется имя параметризованного
элемента, независимо от формы нотации (вложенный "аноним" в угловых
скобках или же явная "связующая" стрелка). Например, имя связанного
класса может использоваться на диаграмме классов внутри символа класса в качестве
типа атрибута или части сигнатуры операции (рис. 36).
Рис. 36. Использование в ассоциации связанных шаблонов
Обсуждение
Классификаторы - самые вероятные кандидаты на
параметризацию. Типы их атрибутов, операций или ассоциированных классификаторов
совпадают с параметрами шаблонов. Параметризованные кооперации, по сути, являются
образцами. В некотором роде, операции параметризованы сами по себе. Как использовать
параметризацию с другими элементами, не очень понятно, но и для них что-то можно
придумать.