Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 400107.doc
Скачиваний:
5
Добавлен:
30.04.2022
Размер:
568.32 Кб
Скачать

2.5. Нотация для объектно-ориентированного проектирования

В настоящее время еще не сложилась единая нотация для объектно-ориентированного проектирования (ООD). Рассмотрим в данном пособии элементы нотации ООDLE [7].

В результате ООD должны быть разработаны:

Диаграмма классов описывают внешнее представление этого класса, другими словами, она показывает внешнюю спецификацию класса.

Схемы структуры классов показывают внутреннюю структуру классов.

Диаграмма зависимостей описывает связи между классами.

Диаграмма наследования показывает отношения наследования между классами.

Схема связей между этими диаграммами приведена на рис. 2. 11. Цель ООD – составить представленные диаграммы.

Диаграмма класса описывает внешнее представление одного класса (сколько классов – столько и диаграмм). На диаграмме класса задают:

Данные, отвечающие за хранение информации об объектах данного класса (атрибуты);

Общедоступные операции, т. е. Операции, к которым можно обращаться извне класса. Для каждой операции необходимо определить данные.

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

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

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

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

В классе можно вызвать модули класса – предшественника;

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

В классе можно вызвать общедоступные операции других классов;

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

Эти случаи необходимо отражать на схеме комментариями. Правда, в ООDLE имеются рекомендации по их обозначению, но одного полного овладения методикой нецелесообразно ими пользоваться.

Диаграмма наследования

Диаграмма зависимостей

Диаграмма класса

Входные Выходные

данные данные

Схема структуры класса

Представляется укрупненная схема класса

Элементы данных (входные, выходные) обозначается через

Название

- -----------

тип

Рис. 2.11. Связь между диаграммами

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

Описание исключительной

ситуации

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

Целесообразно для каждого модуля составить внешнюю спецификацию (например, в виде IPO-диаграммы рис. 1.1.), чтобы не загромождать схему деталями.

Диаграмма зависимостей задает связи между классами, которые возникают в ходе работы программного комплекса. Строго говоря, связи возникают между объектами, а не классами, но так все объекты данного класса ведут себя одинаково, то составим диаграмму для классов. Когда модуль одного класса вызывает общедоступную операцию другого класса, то говорят, что между этими классами существует связь “пользователь - исполнитель” или что один класс передает другому сообщение. Такая связь приводит к низкой степени зависимости между классами, потому что взаимодействие сводится к общедоступной операции. Такая связь обозначается одинарной линией со стрелкой. Когда модуль одного класса обращается к внутреннему модулю или прямо к данным другого класса, то возникает “дружественная связь”, она обозначается двойной линией со стрелкой (напомним, что такая связь нежелательна). Возможна и связь “использование”; это означает, что в разделе данных одного класса объявлен объект другого класса (Естественно, не класса – предшественника!); такая связь обозначается двойной линией. Пример диаграммы приведен на рис. 2.12.

Класс 2

Класс 1

Класс 4

Класс 3

Рис. 2.12. Диаграмма зависимостей

Диаграмма наследования предназначена для представления связи супертип – подтип. Напомним, что подтип наследует все данные и модули своего супертипа. Поэтому нет необходимости повторения на схеме класса – подтипа введенных выше данных и модулей. На диаграмме наследования задают имена классов, их данные и общедоступные операции. Классы связывают отношениями наследования. Пример приведен рис. 2.13.

Особые случаи:

Абстрактный класс должен иметь классов – наследников, в которых определены отложенные операции.

Полиморфизм. Допустимо, что в суперклассе и классе имеются одинаковые операции (по назначению), но с разной реализацией.

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

Рис. 2.13. Диаграмма наследования

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