Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
posob_kom_mod_itog.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
7.42 Mб
Скачать

9.4. Диаграммы классов

Диаграммы классов (class diagrams) показывают статическую структуру системы. Диаграммы классов содержат набор статических элементов, как, например, классы, типы и их связи, объединенные в граф. Среди связей особо выделяют ассоциации и подтипы. На диаграммах классов также изображаются атрибуты классов, операции классов и ограничения, которые накладываются на связи между объектами. Диаграммы классов могут быть логически объединены в пакеты.

Класс (class) - это сущность, описывающая множество объектов со сходной структурой, поведением и связями с другими объектами. На диаграммах класс изображается в виде прямоугольника со сплошной границей, разделенного горизонтальными линиями на З секции, как показано на рис. .9.5.

Рис. 9.5

Верхняя секция (секция имени) содержит имя класса и другие общие свойства (в частности, тип класса). В средней секции содержится список атрибутов, а в нижней - список операций. Атрибуты хранят инкапсулированные данные класса, а операции описывают поведение объектов класса.

Любая из последних двух секций - атрибутов и операций - может не изображаться. Для отсутствующей секции не нужно рисовать разделительную линию и как-либо указывать на наличие или отсутствие элементов в ней.

Классы могут объединяться в более крупные компоненты, называемые пакетами. Область видимости класса ‑ это пакет, в котором он описан. По умолчанию считается, что указываемый класс определен в текущем пакете. Если необходимо сослаться на класс из другого пакета, это указывается явно:

<имя пакета>: :<имя класса>.

Так как иерархия пакетов может иметь глубину вложенности большую, чем единица, то путь к классу может содержать более чем одну ссылку, при этом путь начинается от корня иерархии пакетов:

<имя пакета1>::<имя пакета2>::...::<имя пакетаN>::<имя класса>.

В секции имени класса могут находиться (по порядку сверху вниз):

- тип класса (и/или значок типа в правом верхнем углу) - необязательное поле, опускается, если речь идет о неспецифицированном классе;

- имя класса (если класс абстрактный, то курсивом);

- дополнительные свойства ‑ имя автора и т.п. (необязательное поле).

Средняя и нижняя секции прямоугольника класса содержат списки его атрибутов и операций.

Атрибут (attribute) UML ‑ это элемент данных класса, т.е. элемент данных, который содержится в объекте, принадлежащем описываемому классу.

У атрибута должен быть тип (type exptession), который может представлять собой простой тип или быть сложным:

Array, Real, Vektor, Matrix.

Описание типа зависит от того, какой язык программирования используется разработчиками. Атрибуг изображается в виде текстовой строки, отражающей различные его свойства:

<признак видимости><имя>::<тип>=<значение по умолчанию>{свойства}.

Могут быть следующие свойства:

а) признак видимости имеет С++-семантику видимости членов класса:

- общий атрибут (public) (помечается символом +) означает, что любая сущность, имеющая доступ к объекту определяемого класса, имеет доступ и к этому атрибугу;

- защищенный атрибут (protected) (обозначается символом #) доступен только для методов класса и его потомков;

- приватный атрибут (private) (обозначается символом -) доступен только методам класса;

- признак области видимости может изображаться ключевым словом «public», «protected» или «private» или может быть спущен, что означает, что область видимости не показывается (а не то, что она не определена или «public» по умолчанию);

б) имя ‑ это идентификатор, представляющий имя атрибута;

в) тип ‑ зависящее от языка реализации описание типа атрибута;

г) значение по умолчанию ‑ зависящее от языка реализации выражение, задающее начальное значение для атрибута вновь созданного объекта;

д) свойства ‑ строка дополнительных свойств элемента (необязательная часть). Если свойства не указываются, скобки { } опускаются. Примером свойства может служить имя автора: {Author = Smith}.

По умолчанию атрибут является изменяемым. Указав в его свойствах пометку {frozen}, можно объявить атрибут неизменяемым. Для атрибута можно указывать его множественность. Если она не обозначена, то предполагается, что атрибут может хранить ровно одно значение. Множественность может быть определена в квадратных скобках сразу после имени атрибута:

cords[3]: integer.

В программных классах операции и методы трактуются как программные процедуры, время выполнения которых будет уточняться в диаграммах состояний и деятельностей. С точки зрения моделирования, длительность (непрерывные и дискретные процессы) тех или иных операций чрезвычайно важна на самом раннем этапе. Если длительностью некоторой операции можно пренебречь, то модель может существенно упроститься.

Операция (operation) ‑ это сущность, определяющая некое действие, которое может быть выполнено представителем класса. У операции есть имя и список аргументов. Операция изображается текстовой строкой, имеющей следующую грамматику:

<признак видимости><имя>(список параметров):<тип выражения, возвращающего значения> {свойства},

где: признак видимости, имя и свойства имеют тот же смысл, что и для атрибута; список параметров - список формальных параметров, разделенных запятыми; тип выражения, возвращающего значения - зависящее от языка реализации описание типа значения, возвращаемого функцией. Если оно не указано, то предполагается, что функция не возвращает значения (void для С/С++).

Каждый элемент списка параметров имеет следующий вид:

<имя>: <тип>=<значение по умолчанию>,

где: имя ‑ имя параметра; тип ‑ зависящее от языка реализации описание типа параметра; значение по умолчанию ‑ значение параметра по умолчанию.

Все операции, определенные в классе, можно разделить на две группы: операции класса и операции представителя. Операции класса присущи не объектам класса, а самому классу. Отсюда, в частности, следует, что операции класса не имеют доступа к атрибутам. Типичный пример операции класса   функция создания нового объекта (представителя) класса. Операции класса вьщеляются подчеркиванием:

new {Машина} [масса=100, жесткость=10];

Операция, не изменяющая состояние системы, помечается следующим образом: в список свойств операции помещается свойство {guery}.

Элементы списков атрибутов и операций можно группировать по некоторым признакам. В этом случае перед группой элементов ставится заключенная в кавычки строка, определяющая свойство, причем это свойство распространяется на все нижестоящие элементы до нового свойства. Эта возможность хорошо иллюстрируется следующим примером:

параметры масины”

жесткость подвески

масса машины

У каждой секции прямоугольника класса может быть имя. Так как секция «имя класса» обязательна, то ее имя не указывается, как показано на рис. 9.6.

Рис. 9.6

Одним из самых важных понятий объектно-ориентированного программирования является понятие объекта (objekt). Объекты могут исполнять определенные роли. Роль определяет отношение между классом и его экземплярами, вьделяя определенное их подмножество. На диаграмме объект представляется как прямоугольник с двумя секциями (см. рис. 9.7). Верхняя секция содержит в себе имя объекта и его класса, подчеркнутое сплошной линией и имеющего синтаксис:

<имя объекта>:<имя класса>

Рис. 9.7

Имя класса, при необходимости, может содержать в себе полный путь к данному классу. Имена пакетов должны следовать перед именем класса и разделяться парами двоеточий. Например:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]