5. UML. Концептуальный уровень. Диаграмма классов и правила ее построения.
Пример.
Диаграммой классов (Class diagram) называют диаграмму, на которой показано множество классов, интерфейсов, коопераций и отношений между ними. Ее изображают в виде множества вершин и дуг.
Диаграммы классов обычно содержат
следующие сущности:
Подобно всем остальным диаграммам,
они могут включать в себя примечания и ограничения.
Также в диаграммах классов могут
присутствовать пакеты или подсистемы, применяемые для группирования элементов
модели в более крупные блоки. Иногда в эти диаграммы помещают экземпляры,
особенно если требуется визуализировать их тип (возможно, динамический).
Классы по своей роли
в системе делятся на группы. Сам по себе язык UML жестко не оговаривает эти группы, оставляя
группировку на усмотрение разработчиков. На основе опыта, накопленного при
создании автоматизированных систем, целесообразно выделить следующие группы
(категории, стереотипы) классов:
1) граничные (boundary) классы: объекты этих классов
реализуют интерфейсы системы с внешней средой и различными пользователями (не
следует их путать с внутренними интерфейсами взаимодействия классов,
упоминавшихся ранее);
2) сущностные (entity)
классы: объекты этих классов представляют собой блоки длительно хранимой
информации, используемые для организации
баз данных и знаний, файловых систем хранения данных различной логической
структуры; в основном в этих классах развит атрибутный раздел, однако имеется
небольшое число операций контроля ограничений целостности, как стандартных, так
и специфичных для данной предметной области;
3) классы управления
(control): объекты этих
классов являются активными, берущими
на себя управление и организацию вычислительных процессов; чаще всего это
стандартные компоненты операционных
систем и систем управления базами данных
(СУБД), таймеры, координаторы и т.п.;
4) классы прикладной
логики (logic): объекты этих
классов реализуют основную логику решения задач приложения; обычно это
отдельные программные или аппаратные модули, осуществляющие сложные расчеты,
решение оптимизационных задач и т.п.
Диаграммы классов применяют для
моделирования статического вида системы с точки зрения проектирования. В этом
представлении удобнее всего описывать функциональные требования к системе -
услуги, которые она предоставляет конечному пользователю.
Обычно диаграммы классов
используются в следующих целях:
Пример диаграммы сущностных классов
В языке UML принята определенная стандартизация записи атрибутов класса, которая подчиняется некоторым синтаксическим правилам. Каждому атрибуту класса соответствует отдельная строка текста, которая состоит из квантора видимости атрибута, имени атрибута, его кратности, типа значений атрибута и, возможно, его исходного значения. Общий формат записи отдельного атрибута класса следующий:
<квантор
видимости> <имя атрибута> [кратность] :
<тип атрибута> =
<исходное значение> {строка-свойство}.
Видимость (visibility) — качественная характеристика описания элементов класса, характеризующая потенциальную возможность других объектов модели оказывать влияние на отдельные аспекты поведения данного класса.
Видимость в языке UML специфицируется с помощью квантора видимости (visibility), который может принимать одно из 4-х возможных значений и отображаться при помощи специальных символов.
Кратность (multiplicity) — спецификация области значений допустимой мощности, которой могут обладать соответствующие множества.
Кратность атрибута характеризует общее количество конкретных атрибутов данного типа, входящих в состав отдельного класса. В общем случае кратность записывается в форме строки текста из цифр в квадратных скобках после имени соответствующего атрибута, при этом цифры разделяются двумя точками: [нижняя граница .. верхняя граница], где нижняя и верхняя границы положительные целые числа. Каждая такая пара служит для обозначения отдельного замкнутого интервала целых чисел, у которого нижняя (верхняя) граница равна значению нижняя граница (верхняя). В качестве верхней границы может использоваться специальный символ "*" (звездочка), который означает произвольное положительное целое число, т.е. неограниченное сверху значение кратности соответствующего атрибута.
Операция (operation) - это сервис, предоставляемый каждым экземпляром или объектом класса по требованию своих клиентов, в качестве которых могут выступать другие объекты, в том числе и экземпляры данного класса.
Операции класса записываются в третьей сверху секции прямоугольника класса, которую часто называют секцией операций. Совокупность операций характеризует функциональный аспект поведения всех объектов данного класса. Запись операций класса в языке UML также стандартизована и подчиняется определенным синтаксическим правилам. При этом каждой операции класса соответствует отдельная строка, которая состоит из квантора видимости операции, имени операции, выражения типа возвращаемого операцией значения и, возможно, строка-свойство данной операции. Общий формат записи отдельной операции класса следующий:
<квантор
видимости> <имя операции>(
список параметров):
<выражение типа
возвращаемого значения>
{строка-свойство}
Квантор видимости, как и в случае атрибутов класса, может принимать одно из четырех возможных значений и, соответственно, отображается при помощи специального символа либо ключевого слова. Символ "+" обозначает операцию с областью видимости типа общедоступный (public). Символ "#" обозначает операцию с областью видимости типа защищенный (protected). Символ "-" используется для обозначения операции с областью видимости типа закрытый (private). И, наконец, символ "~" используется для обозначения операции с областью видимости типа пакетный (package).
Квантор видимости для операции может быть опущен. В этом случае его отсутствие просто означает, что видимость операции не указывается. Вместо условных графических обозначений также можно записывать соответствующее ключевое слово: public, protected, private, package.
Имя операции представляет собой строку текста, которая используется в качестве идентификатора соответствующей операции и поэтому должна быть уникальной в пределах данного класса. Имя операции - единственный обязательный элемент синтаксического обозначения операции, должно начинаться со строчной (малой) буквы, и, как правило, записываться без пробелов.
Список параметров является перечнем разделенных запятой формальных параметров, каждый из которых, в свою очередь, может быть представлен в следующем виде:
<направление
параметра> <имя параметра>:
<выражение типа> =
<значение параметра по умолчанию>.
Параметр (parameter) — спецификация переменной операции, которая может быть изменена, передана или возвращена.
Параметр может включать имя, тип, направление и значение по умолчанию. Направление параметра — есть одно из ключевых слов in, out или inout со значением in по умолчанию, в случае если вид параметра не указывается. Имя параметра есть идентификатор соответствующего формального параметра, при записи которого следуют правилам задания имен атрибутов. Выражение типа является спецификацией типа данных для допустимых значений соответствующего формального параметра. Наконец, значение по умолчанию в общем случае представляет собой некоторое конкретное значение для этого формального параметра.