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

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

Диаграммы классов (classdiagramm) описывают структуру информационной модели. Элементами структуры являются классы и объекты, связи сопоставляются отношениям наследования, агрегирования, композиции и ассоциации. Описание диаграммой классов является одним из аспектов представления системы в статическом состоянии. Диаграмма даёт представление о том, каково назначение отдельных элементов, характер их взаимосвязи друг с другом, представление о сложности реализации описанной объектной модели. Современные системы проектирования программ позволяют автоматически генерировать программный код по диаграмме классов. Таким образом, диаграмма классов – это инструмент синтеза информационной модели.

Система нотации диаграмм классов поясняется рис. 3. Классы обозначаются прямоугольниками, разделёнными на секции свойств и методов. Отношения обозначаются линиями со специальными стрелками, пояснения даны на рисунке.

В отношении наследования класс А является базовым, классы D,E,F– производными.

Ассоциация связывает объект-клиент классаВ с объектом-сервером класса С.

З

Рис. 3. Нотация для диаграммы классов

аметим, что для агрегирования и композиции на линиях указывают допустимое число включаемых экземпляров объектов. Например, класс А допускает включение не более 3 экземпляров класса С. При этом число агрегируемых объектов класса В не ограничивается.

На рис. 4 приведён пример диаграммы классов, описывающей модель электронной карты.

Класс «Фигура» является абстрактным классом, поскольку включает методы, не имеющие реализации. Под реализацией понимается алгоритм или программа выполнения действий, составляющих содержание метода. Если их нет, то поведение объекта не определено. Действительно, начертить абстрактную фигуру – задача неопределённая. Но любая конкретная фигура должна обязательно реализовать такой метод, т.е. «уметь нарисовать самую себя». Метод Начертить() наследуется всеми производными классами и должен иметь в них вполне определённую специализированную реализацию. Если это не сделано, класс остаётся абстрактным. Таким образом, применением наследования от абстрактных классов достигается разнообразие специализации.

Обратим внимание, что абстракция фигуры включает набор свойств и методов, которые характерны для любых геометрических примитивов – точек, линий, дуг, и т.д. Значения свойств в конкретных классах устанавливаются в соответствии с определёнными соглашениями. Например, свойство Площадь и Периметр для точки устанавливаются равными 0, хотя с формальных позиций точка есть одномерный объект, для которого понятия площади и периметра смысла не имеют. Аналогично, требуется ввести соглашение о том, что считать площадью разомкнутой полилинии (ломаной линии из произвольного числа последовательно соединённых отрезков). Примером подобного соглашения может быть следующее: площадью полилинии считается площадь многоугольника, полученного замыканием начальной и конечной точки исходной полилинии. Рис. 5 иллюстрирует соглашение: исходная полилиния (рис.5 а) имеет площадь, равную площади вогнутого многоугольника (рис. 5.б).

В

Рис. 4. Пример диаграммы классов

качестве примера методов, которые должен реализовать любой геометрический примитив, на рис. 4 указаны ОписывающийМ() и НайтиЦентр(). Метод ОписывающийМ() предназначен для построения описывающего многоугольника, что, в свою очередь, может использоваться для создания буферной зоны на карте. Универсальный алгоритм построения описывающего многоугольника достаточно громоздок, в то же время как частный случай для каждого класса примитивов реализация метода может быть несложной.

М

а)

б)

етод НайтиЦентр() предназначается для нахождения центра фигуры, причём центр может не являться геометрическим понятием, а носить специальный характер в каждом классе.

В

Рис. 5 Интерпретация свойства Площадь полилинии

торым базовым классом на диаграмме является «Ссылка». Объект данного класса позволяет связывать любой объект системы с записью внешней базы данных. Связывание объектов различных баз данных широко используется при построении информационных моделей в геоинформатике.

Механизм ссылки работает следующим образом: фиксируется источник внешних данных (свойство «Источник») и набор полей, однозначно определяющих связываемую запись (свойство «Ключ»). Для получения данных должны быть выполнены следующие действия: установлено соединение с источником данных и ему отправлен запрос на поиск данных по ключу. Полученные данные обрабатываются соответственно своему назначению, на что указывает свойство «Тип». Например, спутниковый снимок будет наложен на изображение соответствующего слоя карты, текстовые строки помещены на карту или в специальную форму вывода.

Класс «Ссылка» может быть абстрактным, если не определён метод Перейти(). Это может быть сделано тогда, когда предполагается использовать разные алгоритмы обращения к внешним источникам данных в зависимости от класса геометрического примитива. В том случае, когда это не так, т.е. будет использоваться единый алгоритм, он может быть реализован как метод Перейти()в базовом классе и наследоваться в производных. Таким образом, диаграмма неявно отражает два варианта объектной модели.

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

От базовых классов «Фигура» и «Ссылка» порождаются, как видно из диаграммы, производные классы геометрических примитивов. Каждый из классов, обладая общим поведением, имеет специфические черты:

  • объект «Точка» имеет свойство ВидТочки, определяющее визуальное представление точечного объекта – круг, ромб, растровое изображение. Методы ВСредину() или ВЦентр() позволяют точке размещаться в центре либо в средине выбранного объекта;

  • всякий объект класса «Полилиния» содержит список всех своих сегментов в качестве свойства. Это отличает его от объектов классов «Точка» и «Дуга». Вызов метода Сгладить() позволит представить полилинию особым образом (см. рис. 6). На при ведённом рисунке исходнаяполилиния сглажена сплайнами;

  • класс «Дуга» особым образом задаёт положение и вид своих экземпляров через свойства Центр и Радиус, что принципиально отличает его от других классов примитивов. Соответственно, специфику имеет метод определения длины дуги (метод ВычДлину()).

К

Рис. 6 Пример сглаживания полилинии

ласс «Картографический объект» описывает графические объекты сложной структуры, включающие в себя ссылки на внешние данные. Особенность этого класса в том, что он агрегирует произвольное число геометрических примитивов, каждый из которых может содержать независимую ссылку на данные. Список примитивов представляет собой самостоятельный объект, который можно получить через свойство «СписокПрим». Следует обратить внимание, что связи агрегирования с каждым примитивом помечены знаками 0..*, т.е. отсутствие геометрических примитивов является вполне естественным. Соответственно такой объектной модели, допускается существование картографических объектов, не имеющих графического изображения. Допустимо ли это? Вполне. Карта в таком случае представляет собой не связанное с описание объектов графическое изображение карты, схемы или плана. Этого можно избежать, если установить связь в виде композиции классов. В таком случае ни один геометрический примитив не может быть создан вне картографического объекта. Соответственно, при создании картографического объекта обязательным станет включение в него хотя бы одного графического объекта.

Рассмотрим примеры свойств картографического объекта. Свойство «ИдКод» используется для уникальной идентификации экземпляра картографического объекта. Обычно это уникальная цифро-буквенная комбинация, которая генерируется программным путём во время создания объекта. Свойство «Тип»используется для указания класса картографического объекта: всякая географическая карта предполагает использование классификации. Значение свойства – это строка символов, которая является наименованием класса картографического объекта.

Всякий картографический объект размещается на одном из слоёв карты. Класс объектов «Слой» агрегирует в себе картографические объекты. Как видно из диаграммы, объект «Слой» имеет наименование (свойство «Наименование»), которое позволяет обращаться к нему как на программном уровне, так и в диалоге с пользователем. Слои аккумулируют в себе разнообразную информацию, необходимую для визуального отображения картографических объектов. Именно через свойства слоя становится возможным один и тот же примитив отображать различным образом. Например, заданное значение свойства «Цвет» определяет цвет отображения всех объектов слоя. Способ отображения всех линий слоя задаёт свойство «ТипЛинии». Благодаря модели слоя, существенно облегчается задача манипулирования большим числом объектов карты.

Примером метода класса «Слой» является метод Скрыть(), вызов которого делает все картографические объекты слоя невидимыми, т.е. исключает их прорисовку на экране. Этим поддерживается практически важный механизм наложения произвольного числа слоёв друг на друга.

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

Класс «Слой», как можно видеть на диаграмме, может не содержать ни одного картографического объекта. В то же время, картографические объекты не могут создаваться вне слоёв.

Класс «Слои»предназначен для предоставления сервисных функций управления отдельными слоями карты: создания, модификации, удаления и поиска слоёв. Свойство «СписокСлоёв»представляет собой объект, позволяющий манипулировать набором слоёв как списком – добавлять, удалять, перемещать, сортировать объекты класса «Слой». Подчеркнём, что объект списка является внутренним (инкапсулирован в объекте) и непосредственно не доступен для использования внешними объектами. Методы ДобавитьСлой() и УдалитьСлой() позволяют выполнять соответствующие операции извне, не нарушая инкапсуляции.

Чтобы гарантировать определённость при выполнении операций редактирования графики, свойство «ТекущийСлой» указывает наименование слоя который по умолчанию включает в себя вновь создаваемый картографический объект.

Свойство «ФильтрСлоёв» содержит логическое выражение для отбора подмножества слоёв, отображаемых пользователю во время манипулирования свойствами слоёв. Подобная возможность важна при использовании сложных карт с числом слоёв более нескольких десятков. Фильтр помогает снизить избыточность и, как следствие, уменьшить вероятность ошибки редактирования.

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

Заметим, что рассматриваемый вариант модели является одним из возможных. Нельзя исключать варианта, предполагающего, что объект «Слои» может не содержать в обязательном порядке хотя бы один слой. В этом есть определённое достоинство – не требуется хранить описание слоя, на котором нет картографических объектов. Тем не менее, модель, показанная на диаграмме, имеет собственное преимущество: при использовании «пустой» карты потребуется меньше операций для начальной настройки, т.е. создания слоя перед вводом графических данных.

Объект класса «Карта» агрегирует в себя слои. Как видно из диаграммы, в карту включается строго один объект множества слоёв. Элементами поведения объекта класса «Карта» являются методы Создать() и Завершить(). Подобные методы называют конструктором и деструктором класса. Их назначение, соответственно, – зарезервировать ресурсы для создания объекта и организовать соответствующие информационные структуры, и освободить ресурсы после завершения работы объектом.

Свойства класса («Наименование», «Проекция» и «Источник») характеризуют качественные и количественные характеристики информационной модели географической карты.

Примером ассоциативной связи объектов на диаграмме является связь между классами «Карта»и «СерверПечати». Объект карты может вызывать метод Печать() сервера печати для вывода картографических изображений на внешние устройства. Заметим, что внешние устройства могут быть виртуальными, т.е. реализовать некую функцию вывода на абстрактное устройство. Такой приём часто используют для преобразования данных из одного формата в другой. Например, виртуальный плоттер для публикации картографических изображений в Интернет формирует растровый файл установленного размера и разрешения.

Сервер печати выполняет все необходимые системные операции для обслуживания запросов на печать: помещает задание на печать в очередь, фиксирует состояние очереди, состояние устройств. Соответствующие свойства и методы сервера дают возможность взаимодействовать ему с окружающими объектами и устройствами.