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


Класс приложения - часть 2


Другие компоненты ... invariant transition.upper1 = associated_state.upper end -- class APPLICATION

Обратите внимание на простоту и элегантность вызова st.execute. Компонент execute класса STATE является эффективным (полностью реализованным) поскольку описывает известное общее поведение состояний, но его реализация основана на вызове компонентов: read, message, correct, display, process, отложенных на уровне STATE, эффективизация которых выполняется потомками класса, такими как RESERVATION. Когда мы помещаем вызов st.execute в процедуру execute класса APPLICATION, у нас нет информации о том, какой вид состояния обозначает st, но благодаря статической типизации мы точно знаем, что это состояние. Далее включается механизм динамического связывания и в период исполнения st становится связанной с объектом конкретного вида, например RESERVATION, - тогда вызовы read, message и других царственных особ автоматически будут переключаться на нужную версию.

Значение st, полученное из associated_state, представляет полиморфную структуру данных (polymorphic data structure), содержащую объекты разных типов, все из которых согласованы (являются потомками) со STATE. Текущий индекс st_number определяет операции состояния.

Полиморфный массив состояний

Рис. 2.9.  Полиморфный массив состояний

Вот как строится интерактивное приложение. Приложение должно быть представлено сущностью, скажем air_reservation, класса APPLICATION. Необходимо создать соответствующий объект:

create air_reservation.make (number_of_states, number_of_possible_choices)

Далее независимо следует определить и создать состояния приложения, как сущности классов-потомков STATE, либо новые, либо уже готовые и взятые из библиотеки повторного использования. Каждое состояние s связывается с номером i в приложении:

air_reservation.put_state (s, i).

Затем одно из состояний выбирается в качестве начального:

air_reservation.choose_initial (i0)

Для установления перехода от состояния sn к состоянию с номером tn, с меткой l используйте вызов:

air_reservation.enter_transition (sn, tn, l)

Это включает и заключительные состояния, для которых по умолчанию tn равно 0. Затем можно запустить приложение:

air_reservation.execute_session.

При эволюциях системы можно в любой момент использовать те же подпрограммы для добавления состояний и переходов.

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




- Начало -  - Назад -  - Вперед -