Основы объектно-ориентированного проектирования

         

Наследование и отложенные классы


Класс STATE описывает не частное состояние, а общее понятие состояния. Процедура execute - одна и та же для всех состояний, но другие подпрограммы зависят от состояния.

Наследование и отложенные классы идеально позволяют справиться с этими ситуациями. На уровне описания класса STATE мы знаем атрибуты и процедуру execute во всех деталях. Мы знаем также о существовании программ уровня 1 (display и др.) и их спецификации, но не их реализации. Эти программы должны быть отложенными, класс STATE, описывающий множество вариантов, а не полностью уточненную абстракцию, сам является отложенным классом. В результате имеем:

indexing description: "Состояния приложений, управляемых панелями" deferred class STATE feature -- Access choice: INTEGER -- Пользовательский выбор следующего шага input: ANSWER -- Пользовательские ответы на вопросы в данном состоянии feature -- Status report correct: BOOLEAN is -- Является ли input корректным ответом? deferred end feature -- Basic operations display is -- Отображает панель, связанную с текущим состоянием deferred end execute is -- Выполняет действия, связанные с текущим состоянием, -- и устанавливает choice - пользовательский выбор local ok: BOOLEAN do from ok := False until ok loop display; read; ok := correct if not ok then message end end process ensure ok end message is -- Вывод сообщения об ошибке, соответствующей input require not correct deferred end read is -- Получить ответы пользователя input и choice deferred end process is -- Обработка input require correct deferred end end

Для описания специфических состояний следует ввести потомков класса STATE, задающих отложенную реализацию компонент.


Рис. 2.7.  Иерархия классов State

Пример мог бы выглядеть следующим образом:

class ENQUIRY_ON_FLIGHTS inherit STATE feature display is do ...Специфическая процедура вывода на экран... end ...И аналогично для read, correct, message и process ... end

Эта архитектура отделяет зерно от шелухи: элементы, общие для всех состояний, отделяются от элементов, специфичных для конкретного состояния. Общие элементы, такие как процедура execute, сосредоточены в классе STATE и нет необходимости в их повторном объявлении в потомках, таких ENQUIRY_ON_FLIGHTS. Принцип Открыт-Закрыт выполняется: класс STATE закрыт, поскольку он является хорошо определенным, компилируемым модулем, но он также открыт, так как можно добавлять в любое время любых его потомков.

Класс STATE является типичным представителем поведенческих классов (behavior classes, см. лекцию 14 курса "Основы объектно-ориентированного программирования") - отложенных классов, задающих общее поведение большого числа возможных объектов, реализующих то, что полностью известно на общем уровне (execute) в терминах, зависящих от каждого варианта. Наследование и отложенный механизм задают основу представления такого поведения повторно используемых компонентов.



Содержание раздела