8. UML Логический и физический уровень. Иерархия классов. Объекты и пакеты.
Шаблоны (параметризованные классы).
На основе опыта,
накопленного при создании автоматизированных систем, целесообразно выделить
следующие группы (категории, стереотипы) классов:
1)
граничные (boundary) классы: объекты этих классов реализуют
интерфейсы системы с внешней средой и различными пользователями (не следует их
путать с внутренними интерфейсами взаимодействия классов, упоминавшихся ранее);
2)
сущностные (entity) классы: объекты этих классов
представляют собой блоки длительно хранимой информации, используемые для организации баз данных и знаний, файловых
систем хранения данных различной логической структуры; в основном в этих
классах развит атрибутный раздел, однако имеется небольшое число операций
контроля ограничений целостности, как стандартных, так и специфичных для данной
предметной области;
3)
классы управления (control): объекты этих классов являются активными, берущими на себя управление и
организацию вычислительных процессов; чаще всего это стандартные компоненты операционных систем и систем управления базами данных (СУБД),
таймеры, координаторы и т.п.;
4)
классы прикладной логики (logic): объекты этих классов реализуют основную
логику решения задач приложения; обычно это отдельные программные или
аппаратные модули, осуществляющие сложные расчеты, решение оптимизационных
задач и т.п.
Для группировок элементов и диаграмм в UML используется механизм пакетов.
Пакет
(package) – это контейнер с именем, в котором могут содержаться элементы, диаграммы
или другие пакеты, обладающие какой-либо степенью общности, определяемой
разработчиком системы. Пакет задаёт пространство имён, выделяющих содержащиеся
в пакете сущности из общего множества. Особыми видами пакетов являются модель,
подсистема и система.
Система (стереотип «system») – это корневая подсистема в иерархии
пакетов. Она является единственной сущностью, которая не может содержаться в
других пакетах. В пакете система содержатся
все остальные подсистемы и модели.
Подсистема (стереотип «subsystem») – это часть системы, которая может быть выделена разработчиком по тому
или иному признаку (обычно функциональному или территориальному).
Представляется отдельным пакетом. У подсистемы есть собственная спецификация и
программная реализация. Разбиение на подсистемы производится для сложных
систем, реализация которых основана на использовании большого количества
классов. Практически все подсистемы любого уровня детализации взаимозависимы.
Количество уровней иерархии в декомпозиции подсистем на подсистемы языком UML не ограничивается.
Модель
(стереотип «model») – некоторое абстрактное представление
системы, использующее ту или иную точку зрения разработчика (определённые
свойства системы). Моделей может быть множество, они могут быть взаимозависимы,
а также вкладываться друг в друга. Каждая модель представляется отдельным
пакетом. Все они содержатся в пакете система,
могут также содержаться в пакетах подсистема
и модель более высокого уровня.
Между пакетами могут
существовать отношения зависимости и обобщения. Чтобы возникло отношение
зависимости, достаточно, чтобы хотя бы один элемент внутри пакета зависел от
какого-либо элемента внутри другого пакета, например, вызывал его операции или
использовал его каким-либо другим способом.
Перед именем элемента, например, класса, может ставиться имя пакета. Оно отделяется двойным
двоеточием. Пример: displayWindow: WindowingSystem::
GraphicWindows::
Window (указаны два
пакета перед именем класса Window,
причем пакет GraphicWindows
входит в состав пакета Window).
Так отображается иерархия пакетов.
Пакет изображается в виде большого
прямоугольника, к левому углу которого прикреплён другой прямоугольник вида
«закладки» (подобно изображению папки в операционной системе Windows). Если содержимое пакета не раскрывается, то
внутри большого прямоугольника ставится
имя пакета. Иначе имя пакета помещается в закладку. Над именем пакета может
располагаться строка стереотипа в угловых кавычках. Пример диаграммы пакетов представлен на
рисунке 8.
Рисунок 8 – Пример диаграммы пакетов
На рисунке изображена в
виде пакета со стереотипом «подсистема» часть системы, формирующая отчёты по
продажам по запросам пользователей. Этот пакет содержит несколько пакетов,
связанных отношением зависимости (пунктирная стрелка) с внешними пакетами.
Интерфейсы
Интерфейсы являются элементами диаграммы вариантов использования и были рассмотрены в главе 4. Однако при построении диаграммы классов отдельные интерфейсы могут уточняться и в этом случае для их изображения используется специальный графический символ - прямоугольник класса с ключевым словом или стереотипом "interface" (рис. 5.17). При этом секция атрибутов у прямоугольника отсутствует, а указывается только секция операций.
Рис. 5.17. Пример графического изображения интерфейса на диаграмме классов
Объект (object) является отдельным экземпляром класса, который создается на этапе выполнения программы. Он имеет свое собственное имя и конкретные значения атрибутов. В силу самых различных причин может возникнуть необходимость показать взаимосвязи не только между классами модели, но и между отдельными объектами, реализующими эти классы. В данном случае может быть разработана диаграмма объектов, которая, хотя и не является канонической в метамодели языка UML, но имеет самостоятельное назначение.
Для графического изображения объектов используется такой же символ прямоугольника, что и для классов. Отличия проявляются при указании имен объектов, которые в случае объектов обязательно подчеркиваются (рис. 5.18). При этом запись имени объекта представляет собой строку текста "имя объекта:имя класса", разделенную двоеточием (рис. 5.18 а, б). Имя объекта может отсутствовать, в этом случае предполагается, что объект является анонимным, и двоеточие указывает на данное обстоятельство (рис. 5.18, г). Отсутствовать может и имя класса. Тогда указывается просто имя объекта (рис. 5.18, в). Атрибуты объектов принимают конкретные значения.
При изображении диаграммы объектов нужно помнить, что каждый объект представляет собой экземпляр соответствующего класса, а отношения между объектами описываются с помощью связей (links), которые являются экземплярами соответствующих отношений. При этом все связи изображаются сплошными линиями. Более подробно особенности представления объектов будут рассмотрены в главе 9 при изучении диаграмм кооперации.
Рис. 5.18. Пример графического изображения объектов на диаграммах языка UML
Шаблоны или параметризованные классы
Шаблон (template) или параметризованный класс (parametrized class) предназначен для обозначения такого класса, который имеет один (или более) нефиксированный формальный параметр. Он определяет целое семейство или множество классов, каждый из которых может быть получен связыванием этих параметров с действительными значениями. Обычно параметрами шаблонов служат типы атрибутов классов, такие как целые числа, перечисление, массив строк и др. В более сложном случае формальные параметры могут представлять и операции класса.
Графически шаблон изображается прямоугольником, к верхнему правому углу которого присоединен маленький прямоугольник из пунктирных линий (рис. 5.19), большой прямоугольник может быть разделен на секции, аналогично обозначению для класса. В верхнем прямоугольнике указывается список формальных параметров для тех классов, которые могут быть получены на основе данного шаблона. В верхней секции шаблона записывается его имя по правилам записи имен для классов.
Рис. 5.19. Графическое изображение шаблона на диаграмме классов
Шаблон не может быть непосредственно использован в качестве класса, поскольку содержит неопределенные параметры. Чаще всего в качестве шаблона выступает некоторый суперкласс, параметры которого уточняются в его классах-потомках. Очевидно, в этом случае между ними существует отношение зависимости с ключевым словом "bind", когда класс-клиент может использовать некоторый шаблон для своей последующей параметризации. В более частном случае между шаблоном и формируемым от него классом имеет место отношение обобщения с наследованием свойств шаблона (рис. 5.20). В данном примере отмечен тот факт, что класс "Адрес" может быть получен из шаблона Связный_список на основе актуализации формальных параметров "S, k, l" фактическими атрибутами "улица, дом, квартира".
Этот же шаблон может использоваться для задания (инстанцирования) другого класса, скажем, класса "Точки_на_плоскости". В этом случае класс "Точки_на_плоскости" актуализирует те же формальные параметры, но с другими значениями, например, "ЬтсГ<координаты_точки, х, у>. Концепция шаблонов является достаточно мощным средством в ООП, и поэтому ее использование в языке UML позволяет не только сократить размеры диаграмм, но и наиболее корректно управлять наследованием свойств и поведения отдельных элементов модели.
Рис. 5.20. Пример использования шаблона на диаграмме классов