Главная » Delphi » Delphi 2006 – Диаграмма классов (Class Diagram)

0

Наиболее важными и распространенными среди программистов по праву считаются диаграммы классов (class diagram). С их помощью описываются классы, используемые в программе, представляются схемы наследования,

определяются поля и методы. Принципы описания классов средствами языка UML понятны любому программисту, знакомому с объектно-ориентиро- ванным программированием и схемами наследования классов.

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

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

Добавление класса на диаграмму Delphi

Диаграмму классов создают командой контекстного меню с пространства диаграммы Add > Other Diagram > Class Diagram (Добавить > Другую диаграмму > Диаграмму класса (рис. 8.3).

Рис. 8.3. Создаем диаграмму классов

Указанная команда создает пустое пространство моделирования. Добавить к нему класс можно, выбрав на панели инструментов пункт Class (Класс) и щелкнув мышью в подходящей точке Дизайнера. В появившемся элементе- классе надо ввести новое название класса или оставить то, которое предлагается по умолчанию — Classl.

На диаграмме классов класс представляется прямоугольником (рис. 8.4). Внутри него горизонтальными линиями могут быть выделены разделы. В первом разделе всегда указывается имя класса. Допускаются представления класса, состоящие только из одного его имени. В таких случаях специальные разделы внутри соответствующего прямоугольника не формируются.

Puc. 8.4. Представление класса на диаграмме классов

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

Имя класса записывается полужирным шрифтом, располагается по центру и начинается с прописной буквы. Конечно, на одной диаграмме не должно быть классов с одинаковыми названиями.

Если класс абстрактный (не допускается создавать его экземпляры), то имя его указывается наклонным шрифтом. Абстрактный класс определяется значением True свойства Abstract в Инспекторе объектов.

Классы, предназначенные для определенных специфических нужд, можно настраивать с использованием свойства Stereotype (стереотип восприятия) — важнейшего свойства многих элементов разных диаграмм UML, уточняющих конкретное назначение элемента. Например, значение enumeration стереотипа задает элемент известного в Delphi типа перечисление (список абстрактных значений ограниченного диапазона).

Свойства/атрибуты класса

Свойство класса (в UML оно называется атрибутом) добавляется выделенному на диаграмме классу командой контекстного меню Add > Attribute (Добавить > Атрибут). Если в свойстве static атрибута установлено значение True, то соответствующий атрибут считается статическим, принадлежащим непосредственно классу, а не его экземпляру.

Значение атрибута может быть неизменным на протяжении всего времени существования экземпляра класса1. Для этого надо свойству Readonly атрибута задать значение True.

Атрибуты, располагающиеся во втором разделе класса, записываются по следующему универсальному шаблону (порядок в зависимости от среды реализации может немного меняться):

описатель-видимости имя-свойства :

тип-свойства кратность = значение { константа }.

Обязательным в этом шаблоне является лишь имя свойства.

Описатель видимости (свойство Visibility атрибута в Инспекторе объектов) задает видимость поля. Он принимает следующие значения:

•  «+» — свойство видимо всем (public);

•        «#» — свойство видимо лишь в данном классе и классах-наследниках (private);

•  «-» — свойство видимо лишь в пределах данного класса (private);

•               — свойство видимо в пределах текущего пакета (package).

Если описатель не указан, то видимость поля не определена.

Кратность (свойство Multiplicity атрибута в Инспекторе объектов) определяет допустимое число свойств данного типа в текущем классе. Кратность записывают в квадратных скобках в форме, напоминающей запись множеств Паскаля, например:

[ 0..1 ]

[ 2. .5, 7, 9. .20 ]

Рис. 8.9. Связь через класс ассоциации

Отношение обобщения. Этот распространенный вид отношений применяется, например, для визуального построения иерархии классов. Отношение представляется пунктирной линией со стрелкой на одном из ее концов (элемент Generalization) — рис. 8.10.

Направление связи всегда задается от обобщаемого класса к обобщающему, например от класса-наследника к классу-родителю. У более общего класса может быть несколько обобщаемых классов.

Рис. 8.10. Пример связей обобщения

Множество линий со стрелками, ведущими к наиболее общему классу, допускает- ^^ ся заменять одной линией со стрелкой и общей точкой разветвления.

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

•        {complete} — в отношении указаны все классы-наследники, и других у класса-родителя быть не может;

•        {incomplete} — в отношении указаны не все классы-наследники (например, потому что их очень много);

•        {disjoint} — не допускаются реализации, охватывающие функциональность нескольких классов-потомков, помеченных как disjoint;

•        {overlapping} — явно допускаются реализации, охватывающие функциональность нескольких классов-потомков, помеченных как overlapping.

Часто родительский класс делают абстрактным, чтобы продемонстрировать абстрактные и реально используемые элементы иерархии.

Отношения зависимости. Этот тип отношений (элемент Dependency палитры инструментов) определяет общий случай смысловой зависимости между двумя элементами. Он задается пунктирной линией со стрелкой особой формы (рис. 8.11).

Отношение зависимости направлено от класса-клиента к классу-источ- нику. Его часто применяют, чтобы указать, что некоторые методы класса используют в качестве параметров экземпляры других классов. Например,

Рис. 8.11. Пример отношения зависимости

метод ОхотитсяНа(X: Хомяк) класса Кошка использует параметр с типом Хомяк (другой класс проекта).

Интерфейсы

Интерфейсы (пункт Interface палитры инструментов) соответствуют понятию Interface языка Delphi. Интерфейсы служат лишь описаниями и не требуют явного наличия своей реализации. Эта популярная концепция программирования выполнена в UML в виде графического элемента, который по внешнему виду напоминает элемент класса, только над его названием указывается слово interface (в угловых скобках), а из разделов доступны лишь раздел свойств и раздел методов (рис. 8.12).

Рис. 8.12. Графический элемент Interface

Объекты

В ряде диаграмм UML используются не только классы, но и объекты — реально существующие в программе экземпляры, конкретные представители классов. Изображение объекта отличается от изображения класса:

•  название объекта всегда подчеркивается;

•        название объекта составлено из названия экземпляра объекта, двоеточия и названия класса объекта. Если название экземпляра отсутствует, то указывается лишь название класса с префиксом-двоеточием. Если название класса отсутствует, то указывается лишь название объекта, а двоеточие опускается (рис. 8.13).

Объекты добавляются на диаграмму инструментом Object палитры инструментов.

Рис. 8.13. Объект библиотеки XYZ является экземпляром класса API шифрования Linux

В прикладной программе объект практически всегда существует как экземпляр какого-либо класса или интерфейса. Для визуальной связи объекта с реализуемым им классом (интерфейсом) выбирается свойство Instantiates (Представляет) и в диалоговом окне выбирается класс или интерфейс, который будет реализован. После нажатия кнопки ОК на диаграмме автоматически сформируется соответствующая связь.

Бобровский С. И. Технологии Delphi 2006. Новые возможности. — СПб.: Питер, 2006. — 288 е.: ил.

По теме:

  • Комментарии