Шаг 89.
Унифицированный язык моделирования UML.
Абстрактные, листовые и полиморфные элементы

    На этом шаге рассмотрим абстракные, листовые и полиморфные элементы диаграммы класса.

    Связи обобщения используются для моделирования структуры классов с более общими абстракциями, расположенными на вершине иерархии, и более детальными – внизу. В пределах такой иерархии некоторые классы часто определяются как абстрактные – это значит, что они не могут иметь прямых экземпляров. Например, на рис. 1 Icon (Пиктограмма), RectangularIcon (ПрямоугольнаяПиктограмма) и ArbitraryIcon (ПиктограммаПроизвольнойФормы) – абстрактные классы. В отличие от них, конкретные классы Button (Кнопка) и OKButton (КнопкаOK) могут сопровождаться экземплярами.


Рис.1. Абстрактные и конкретные классы и операции

    Создавая новый класс, вы, вероятно, захотите, чтобы он наследовал свои свойства от других, более общих классов, а также имел потомков – более специализированные классы, наследующие его свойства. Это нормальная семантика классов в UML. Впрочем, может случиться и так, что класс не должен иметь потомков. Такой элемент называется листовым и обозначается в UML свойством leaf, записанным под именем класса. Например, на рис. 1 OKButton – листовой класс.

    Операции имеют аналогичные свойства. Обычно операция полиморфна, то есть вы можете специфицировать операцию с той же сигнатурой в разных местах иерархии классов. Операция в дочернем классе отменяет поведение такой же операции родительского класса (приоритетна перед ней). Когда сообщение посылается во время исполнения, конкретная вызываемая операция выбирается из иерархии полиморфно – определяется во время исполнения соответственно типу объекта. Например, операции display (отобразить) и isInside (внутри) на рис. 1 полиморфны. Более того, операция Icon::display() абстрактна: она не реализована в классе Icon и требует от потомков предоставления собственных ее реализаций. В UML имена абстрактных операций по аналогии с абстрактными классами выделяются курсивом. А вот Icon::getID() – листовая операция, на что указывает слово leaf. Следовательно, она не полиморфна и не может быть переопределена в классах-потомках. В языке Java такие операции называются final (конечными).

    На следующем шаге рассмотрим обозначение множественности в UML.




Предыдущий шаг Содержание Следующий шаг