Лабораторная работа № 4
Тема: Диаграммы классов. Шаблоны. Работа с пакетами.
Цель: Научится выявлять классы, строить диаграммы классов, определять спецификацию классов.
Теоретическая часть
Класс (class) в языке UML служит для обозначения множества объектов, которые обладают одинаковой структурой, поведением и отношениями с объектами из других классов.
Обязательным элементов обозначения класса является его имя. На начальных этапах разработки диаграммы отдельные классы могут обозначаться простым прямоугольником с указанием только имени соответствующего класса (рис.4.1, 1). По мере проработки отдельных компонентов диаграммы, описания классов дополняются атрибутами (рис.4.1, 2) и операциями (рис.4.1, 3).
Рис. 4.1. Графическое изображение класса на диаграмме классов
Иногда в обозначениях классов используется дополнительный четвертый раздел, в котором приводится семантическая информация справочного характера или явно указываются исключительные ситуации. Даже если секция атрибутов и операций является пустой, в обозначении класса она выделяется горизонтальной линией, чтобы сразу отличить класс от других элементов языка UML. Примеры графического изображения классов на диаграмме классов приведены на рис.2. В первом случае для класса «Прямоугольник» (рис.4.2, 1) указаны только его атрибуты – точки на координатной плоскости, которые определяют его расположение. Для класса «Окно» (рис.4.2, 2) указаны только его операции, секция атрибутов оставлена пустой. Для класса «Счет» (рис.4.2, 3) дополнительно изображена четвертая секция, в которой указано исключение – отказ от обработки просроченной кредитной карточки.
Рис.4.2. Примеры графического изображения классов на диаграмме
Имя класса должно быть уникальным в пределах пакета, который описывается некоторой совокупностью диаграмм классов. Оно указывается в первой верхней секции прямоугольника. В дополнение к общему правилу наименования элементов языка UML, имя класса записывается по центру секции имени полужирным шрифтом и должно начинаться с заглавной буквы. В первой секции обозначения класса могут находиться ссылки на стандартные шаблоны или абстрактные классы, от которых образован данный класс и, соответственно, от которых он наследует свойства и методы. В этой секции может приводиться информация о разработчике данного класса и статус состояния разработки, а также могут записываться и другие общие свойства этого класса, имеющие отношение к другим классам диаграммы или стандартным элементам языка UML.
Примерами имен классов могут быть такие существительные, как «Сотрудник», «Компания», «Руководитель», «Клиент», «Продавец», «Менеджер», «Офис» и многие другие, имеющие непосредственное отношение к моделируемой предметной области и функциональному назначению проектируемой системы.
Класс может не иметь экземпляров или объектов. В этом случае он называется абстрактным классом, а для обозначения его имени используется наклонный шрифт (курсив). В языке UML принято общее соглашение о том, что любой текст, относящийся к абстрактному элементу, записывается курсивом.
В некоторых случаях необходимо явно указать, к какому пакету относится тот или иной класс. Для этой цели используется специальный символ разделитель – двойное двоеточие «::». Синтаксис строки имени класса в этом случае будет следующий <Имя_пакета>::<Имя_класса>. Другими словами, перед именем класса должно быть явно указано имя пакета, к которому его следует отнести. Например, если определен пакет с именем «Банк», то класс «Счет» в этом банке может быть записан в виде: «Банк::Счет».
Выявление классов можно начать с изучения потока событий сценария. Имена существительные в описании этого потока дадут понять, что может являться классом. Другим способом является анализ диаграмм Последовательности и Кооперации, похожие объекты также можно объединить в класс. Каждый объект диаграмм Последовательности и Кооперации должен быть соотнесён с соответствующим классом.
Диаграмма классов (class diagram) служит для представления статической структуры модели системы в терминологии классов объектно-ориентированного программирования. Диаграмма классов может отражать, в частности, различные взаимосвязи между отдельными сущностями предметной области, такими как объекты и подсистемы, а также описывает их внутреннюю структуру и типы отношений. Диаграмма классов представляет собой некоторый граф, вершинами которого являются элементы типа «классификатор», которые связаны различными типами структурных отношений. Диаграмма классов может также содержать интерфейсы, пакеты, отношения и даже отдельные экземпляры, такие как объекты и связи. Обычно для описания системы создают несколько диаграмм классов.
Диаграмма классов является основным логическим представлением модели и содержит детальную информацию о внутреннем устройстве объектно-ориентированной программной системы или, используя современную терминологию, об архитектуре программной системы. Активизировать рабочее окно диаграммы классов можно несколькими способами:
· окно диаграммы классов появляется по умолчанию в рабочем окне диаграммы после создания нового проекта;
· щелкнуть на кнопке с изображением диаграммы классов на стандартной панели инструментов;
· раскрыть логическое представление (Logical View) в браузере проекта и дважды щелкнуть на пиктограмме Main (Главная);
· выполнить операцию главного меню: Browse>Class Diagram (Обзор>Диаграмма классов).
При этом появляется новое окно с чистым рабочим листом диаграммы классов и специальная панель инструментов, содержащая кнопки с изображением графических примитивов, необходимых для разработки диаграммы классов (табл. 1). Назначение отдельных кнопок панели можно узнать также из всплывающих подсказок.
Таблица 1
Палитра инструментов диаграммы классов
Графическое изображение | Всплывающая подсказка | Назначение кнопки | |||
Selection Tool | Превращает изображение курсора в форму стрелки для последующего выделения элементов на диаграмме | ||||
Text Box | Добавляет на диаграмму текстовую область | ||||
Note | Добавляет на диаграмму примечание | ||||
Anchor Note to Item | Добавляет на диаграмму связь примечания с соответствующим графическим элементом диаграммы | ||||
Class | Добавляет на диаграмму класс | ||||
Interface | Добавляет на диаграмму интерфейс | ||||
Unidirectional Association | Добавляет на диаграмму направленную ассоциацию | ||||
Association Class | Добавляет на диаграмму ассоциацию класс | ||||
Package | Добавляет на диаграмму пакет | ||||
Dependency or Instantiates | Добавляет на диаграмму отношения зависимости | ||||
Графическое изображение | Всплывающая подсказка | Назначение кнопки | |||
Generalization | Добавляет на диаграмму отношение зависимости | ||||
Realize | Добавляет на диаграмму отношения реализации | ||||
Шаблоны или параметризованные классы. Шаблон (template) или параметризованный класс (parametrized class) предназначен для обозначения такого класса, который имеет один (или более) нефиксированный формальный параметр. Он определяет целое семейство или множество классов, каждый из которых может быть получен связыванием этих параметров с действительными значениями. Обычно параметрами шаблонов служат типы атрибутов классов, такие как целые числа, перечисление, массив строк и др. В более сложном случае формальные параметры могут представлять и операции класса.
Графически шаблон изображается прямоугольником, к верхнему правому углу которого присоединен маленький прямоугольник из пунктирных линий (рис. 4.3), большой прямоугольник может быть разделен на секции, аналогично обозначению для класса. В верхнем прямоугольнике указывается список формальных параметров для тех классов, которые могут быть получены на основе данного шаблона. В верхней секции шаблона записывается его имя по правилам записи имен для классов.
Рис. 4.3. Графическое изображение шаблона на диаграмме классов
Шаблон не может быть непосредственно использован в качестве класса, поскольку содержит неопределенные параметры. Чаще всего в качестве шаблона выступает некоторый суперкласс, параметры которого уточняются в его классах-потомках. Очевидно, в этом случае между ними существует отношение зависимости с ключевым словом «bind», когда класс-клиент может использовать некоторый шаблон для своей последующей параметризации. В более частном случае между шаблоном и формируемым от него классом имеет место отношение обобщения с наследованием свойств шаблона (рис. 4.4). В данном примере отмечен тот факт, что класс «Адрес» может быть получен из шаблона Связный список на основе актуализации формальных параметров «S, k, l» фактическими атрибутами «улица, дом, квартира».
Концепция шаблонов является достаточно мощным средством в ООП. Поэтому ее использование в языке UML позволяет не только сократить размеры диаграмм, но и наиболее корректно управлять наследованием свойств и поведения отдельных элементов модели.
Рис. 4.4. Пример использования шаблона на диаграмме классов
Рекомендации по построению диаграмм классов. При построении диаграммы вариантов использования применение русскоязычных терминов является не только оправданным с точки зрения описания структуры предметной области, но и эффективным с точки зрения коммуникативного взаимодействия с заказчиком и пользователями. На начальных этапах разработки диаграмм целесообразность использования русскоязычных терминов вполне очевидна и оправдана. Однако, по мере готовности графической модели для реализации в виде программной системы и передачи ее для дальнейшей работы программистам, акцент может смещаться в сторону использования англоязычных терминов, которые в той или иной степени отражают особенности языка программирования, на котором предполагается реализация данной модели.
Большинство примеров в литературе даются в англоязычном представлении. При их переводе на русский язык может быть утрачена не только точность формулировок, но и семантика соответствующих понятий.
Рис.4.5 Окно спецификации класса
Спецификация класса. В окне спецификации класса (рис. 4.5) указывают:
1. Имя класса (Name). В основном используют существительные в единственном числе. Имена классов записываются без пробелов, и должны быть короткими. Например, в системе обработки данных о сотрудниках может быть класс «Сотрудник».
2. Тип класса (Type), который позволяет расширить назначение класса.
3. Стереотип классов (Stereotype) разбивает классы на следующие категории:
· Boundary (граница) – категория пограничных классов, которые располагаются на границе системы со всем остальным миром. Это могут быть формы, отчеты, интерфейсы с аппаратурой и другими системами. Для выявления пограничных классов необходимо исследовать диаграммы Вариантов использования. Для каждого взаимодействия между ними должен существовать хотя бы один пограничный класс.
· Entity (объект, сущность) – содержит информацию, которая хранится постоянно. Их можно отображать и в потоке событий и на диаграммах взаимодействий. Для каждого класса сущности создается таблица в базе данных. Каждый атрибут класса – сущности становится полем в базе данных.
· Control (управление) – управляющие классы отвечают за координацию действий других классов. У каждого варианта использования имеется один управляющий класс, контролирующий последовательность событий этого варианта использования.
· Видимость класса(Visibility) определяет доступность класса.
§ Public (общая) класс доступен другим классам.
§ Private (закрытая) класс виден только во вложенных в него классах.
§ Protected (защищенная) доступ к классу разрешен только для самого класса и его потомков.
§ Package or Implementation (пакетная) доступ к классу разрешен только классам данного пакета.
В Rose классы можно вкладывать друг в друга. Во вложенные классы можно вкладывать другие классы, организуя столько уровней сложения, сколько необходимо. Для создания вложенного класса откройте контекстное меню Þ Open Specification Þ вкладка Nested Þ кнопка Insert Þ ввод имени класса, затем добавьте его на диаграмму: Query => Add Classes.
· Множественность Cardinality. Показывает, сколько у данного класса может быть экземпляров. Контекстное меню Þ Open Specification Þ вкладка Detail Þ Multiplicity
- N – неопределенное количество;
- 0….n – от нуля до конечного числа;
- 0…0 – нулевое количество экземпляров;
Работа с пакетами. Пакеты(packeges) применяются для группирования классов, обладающих некоторой общностью. Существует несколько подходов объединения классов. Во-первых, можно группировать классы по стереотипу. В этом случае получается один пакет с классами сущностями, один с пограничными классами, один с управляющими классами. Второй пакет заключается в объединении классов по их функциональности. Преимущество этого метода заключается в возможности повторного использования пакетов. Также возможен случай комбинации пакетов. Пакеты классов создают в Логическом представлении браузера.
Для добавления на диаграмму классов существующего пакета достаточно перетащить пакет на диаграмму из браузера. Для добавления пакета в браузер:
· Щелкните правой кнопкой мыши на Логическом представлении в браузере.
· Выберите пункт меню модели New => Package.
· Введите имя нового пакета.
Пакет можно удалить только с диаграммы классов или из модели в целом. В первом случае достаточно выделить его на диаграмме и нажать клавишу Delete. Во втором – щёлкнуть правой кнопкой мыши на пакете в браузере и выбрать в открывшемся меню пункт Delete.