6. Объектно-ориентированное проектирование
Здесь рассматривается подход к объектно-ориентированному проектированию (ОПП) , предложенный в книге [2]. Между объектно-ориентированным анализом и объектно-ориентированным проектированием ( так же как между языками Pascal и С++ ) наблюдается терминологическая путаница. То, что в ООА называется объектом в ООП называется классом. То, что в ООА называется экземпляром объекта в ООП называется объектом. Ниже в таблице приведены соответствия терминов.
Таблица 6.1. Соответствие терминологии
Объектно-ориентированный анализ Объектно-ориентированное проектирование Объект Класс Экземпляр объекта Объект Метод Операция Атрибут Поле данных В процессе объектно-ориентированного проектирования решаются следующие задачи:
╥ выбор классов и определение взаимосвязей между ними,
╥ определение механизмов взаимодействия объектов,
╥ выбор места объявления классов и объектов,
╥ распределение вычислительных процессов между исполнителями (процессорами) и методы управления процессами.
Объектно-ориентированный проект состоит из следующих диаграмм:
╥ диаграмма классов,
╥ диаграмма объектов,
╥ диаграмма модулей,
╥ диаграмма процессов,
╥ диаграмма переходов,
╥ временная диаграмма.
Диаграмма классов включает следующие виды компонентов:
╥ классы,
╥ иерархия наследования классов,
╥ утилиты классов.
Классы понимаются так, как указано выше. Графическое обозначения класса содержит его имя и имеет вид, представленный на рис. 6.1.
 Рис 6.1. Графическое обозначения класса.
Иерархии классов понимаются более широко. В частности рассматривается не только отношение наследования, но и целый ряд других отношений, а именно:
Таблица 6.2. Отношения между классами в ООП
Отношение наследования в ООП - это отношение вида "является", в то время как отношение вида "состоит-из" описывается отношениями
а) использование в интерфейсной части класса.
б) использование в реализации класса.
Отношение б) позволяет отразить дополнительные оттенки взаимодействия классов. Отношение включение описывает такое взаимодействие классов, при котором экземпляры одного класса включают в себя (хранят в себе ) экземпляры другого класса. Типичными представителями классов, предназначенных для хранения других классов являются списки, деревья, коллекции.
Для каждого вида отношений может быть построена собственная диаграмма.
Рассмотрим пример проектирования классов для описания геометрических фигур.
Диаграмма наследования этого примера расположена на Рис. 6.2.
Рис. 6.2. Диаграмма классов для геометрических фигур.
Различные геометрические фигуры могут образовывать изображение. Для описания класса изображений не подходит отношение наследование, т.к. картинка не является подклассом геометрической фигуры, она скорее является накопителем геометрических фигур. На рис. Х.3.3. представлена соответствующая диаграмма.
Рис. 6.3. Диаграмма классов для геометрических фигур и рисунков.
На диаграмме классов могут изображаться так называемые утилиты классов - общедоступные интерфейсные подпрограммы. Отношение между утилитами и классами - те же, что и между классами. Графическое изображение утилиты демонстрируется на рис. 6.4
Рис. 6.4.Графическое обозначение утилиты класса.
Проектирование больших систем требует создания больших диаграмм классов, которые могут оказаться трудными для восприятия. Методом дополнительной декомпозиции может являться создание категорий классов, являющихся наборами классов и категорий классов.
Процесс проектирования и осмысления классов становится более обозримым при использовании категорий. Обозначение категорий классов приведено на рис. 6.5
Рис. 6.5. Графическое обозначение категории классов.
Между категориями классов возможно отношение вида "импортирует -из", обозначенное стрелкой (X > Y обозначает "Y импортирует из X). Для примера с геометрическими фигурами категории классов имеют вид:
Рис. 6.6. Категории классов для геометрических фигур.
6.3 Шаблоны для диаграммы классов
Графическое изображение диаграммы классов несет информацию о составе классов и отношениях между ними, но в отличие от диаграмм в ООА диаграммы в ООП не содержат сведений об атрибутах и методах. Для указания этих сведений используются шаблоны:
╥ шаблон классы,
╥ шаблон утилиты,
╥ шаблон операции.
Шаблоны задаются в текстовом или в табличном виде.
07.07.01 12:37:37Шаблон класса имеет вид:
имя: имя
документация: текст документации
видимость: экспортируемый /
обособленный /
импортируемый
множественность: 0/1/n
иерархия:
суперкласс: список имен суперклассов
метакласс: имя класса
обобщенные параметры: список параметров
интерфейс:
использование: список имен классов
поля: список используемых полей данных
операции: список используемых операций
реализация:
общедоступная:
поля: список полей данных
операции: список операций
защищенная:
поля: список полей данных
операции: список операций
обособленная:
поля: список полей данных
операции: список операций
Шаблон улиты класса имеет вид:
имя: имя улиты
документация: текст документации
видимость: экспортируемый /
обособленный /
импортируемый
обобщенные параметры: список параметров
интерфейс:
использование: список имен классов
поля: список используемых полей данных
операции: список используемых операций
Шаблон операции имеет вид:
имя: имя операции
документация: текст документации
категория: категория операции (предполагается, что все операции
делятся на категории, например: доступ к данным, изменения
данных, вывод - ввод, функциональное поведение)
параметры: список параметров
действие: краткое описание алгоритма.
Классы описывают статическую структуру объектно-ориентированного проекта. Одной из составляющих динамической структуры являются объекты (экземпляры классов). Объекты могут создаваться и уничтожаться, использовать методы других объектов.
Графическое обозначение объекта представлено на рис. 6.7, оно совпадает с обозначением класса, но используется не пунктирная, а сплошная линия.
Рис. 6.7. Графическое обозначение объекта.
Имя объекта может отсутствовать, т.к. программа может создавать неименованные объекты, например, для записи его в некоторый контейнер типа список или коллекция.
Связь между объектами обозначается линией без направления, показывающей, что один объект может передавать сообщение ( вызвать операции из ) другому объекту. Рядом с линией можно указать стрелку с именем вызываемой операции.
Информационные потоки на диаграммах объектов не отражаются.
На линии, связывающей два объекта, может быть указана метка конкретизирующая вид связи, перечень возможных меток приведен на рис 6.8.
Использование параметра
Общее использование параметра
Использование поля
Общее использование поля
Рис. 6.8. Обозначения для меток на линиях взаимодействия объектов.
Если объект А использует поле объекта В, то метка F располагается ближе к объекту А.
На диаграмме объектов можно отразить тот факт, что один объект включает в себя набор других. Для этого включаемые объекты располагаются внутри изображения внешнего объекта. Пример показан на рис. 6.9. Здесь объект "план работ" состоит из набора объектов "месячный план".
Рис. 6.9. Пример вложения объектов.
Может быть указана связь других объектов не только с объемлющим объектом, но и с внутренними. На рис. 6.10 представлена диаграмма объектов, для примера с геометрическими фигурами к которым добавлен графический редактор, позволяющий создавать рисунки.
Рис. 6.10. Диаграмма объектов для геометрических фигур.
Диаграмма переходов описывает состояние объектов и переходы между состояниями. Среди состояний выделяется одно начальное и одно или несколько заключительных, переходы между состояниями обозначаются стрелкой с пометкой события, вызывающего соответствующий переход. Набор графических обозначений приведен в таблице.
Таблица 6.3. Обозначения для диаграммы переходов
Обозначение
Смысл
Состояние Начальное состояние Конечное состояние Переход между состояниями Можно построить диаграмму состояний для схемы в целом, отдельной ее части, или для одного объекта.
На рис. 6.11 представлена диаграмма в качестве примера.
Рис. 6.11. Диаграмма переходов для геометрической фигуры.