В статической модели отражаются статические отношения, существующие в системе управления лифтами. Для начала рассмотрим физические классы предметной области (рис.3). Лифт – это составной класс, содержащий один Мотор, одну Дверь, n Кнопок Лифта и n Лампочек Лифта. Этаж – это тоже составной класс, включающий Кнопку Этажа и Лампочку Этажа. Обычно имеется по два экземпляра каждого объекта (для двух направлений), но на нижнем и верхнем этажах есть лишь по одной лампочке и кнопке.
Рис.3. Концептуальная статическая модель системы управления лифтами
Класс Лифт ассоциирован также с классом Датчик Прибытия, который извещает о приближении лифта к этажу, и с классом Лампочка Направления, которую лифт включает и выключает. Класс Лампочка Направления ассоциирован с классом Этаж. На каждом этаже установлены одна или две лампочки направления для каждого лифта.
Из диаграммы контекста системы видно, что, за исключением перечисленных составных классов, остальные классы на рис.3, представляющие объекты реального мира, – это внешние устройства, то есть датчики или приводы. Поэтому они изображены в виде классов внешних устройств ввода или вывода, которые осуществляют интерфейс с системой управления лифтами (рис. 4).
Рис.4. Диаграмма контекста классов для системы управления лифтами
Разбиение на объекты
Чтобы подготовиться к динамическому моделированию, рассмотрим программные объекты в системе управления лифтами. Объект Лифт составлен из нескольких объектов. Поскольку он получает информацию от внешних объектов и управляет внешними объектами, то некоторые его компоненты – это объекты интерфейса устройств ввода/вывода, а именно датчиков и приводов лифта.
Для каждого объекта внешнего устройства существует соответствующий объект программного интерфейса. Так, лифт получает вызовы от объектов Интерфейс Кнопки Лифта, расположенных на каждом этаже. В лифте есть также объекты Интерфейс Двери и Интерфейс Мотора, взаимодействующие соответственно с физической дверью и мотором. Помимо этого, лифт посылает команды объектам Интерфейс Лампочки Лифта, которых имеется столько же, сколько этажей. Класс Этаж составлен из классов Интерфейс Кнопки Этажа и Интерфейс Лампочки Этажа. На каждом этаже находится по два экземпляра этих классов, а на первом и последнем – по одному. Существует также объект Интерфейс Датчика Прибытия, который посылает сообщения объекту Управление Лифтом, когда лифт приближается к этажу, и объект Интерфейс Лампочки Направления для взаимодействия с физической лампочкой.
Помимо объектов интерфейса устройств, выявленных с помощью диаграммы контекста классов, нужны еще сущностные и управляющие объекты. Для каждого лифта необходим сущностный объект Состояние и План Движения Лифта. Под состоянием понимается информация о том, движется ли лифт вообще, в каком направлении, на каком этаже он стоит или какой этаж только что проехал. Сюда же относят план движения лифта, включающий список этажей, которые лифт должен посетить.
С каждым лифтом связан зависящий от состояния управляющий объект Управление Лифтом, в ведении которого находятся дверь и мотор лифта. Он управляет закрыванием и открыванием двери, а также запуском и остановом мотора. Состояния этого объекта изображены на диаграмме состояний лифта. Поскольку запросы на вызов лифта могут поступать в любое время, то необходимо создать отдельный объект-координатор Диспетчер Лифта, который будет принимать запросы и обновлять план движения лифта. Еще одна проблема – выбор лифта, который обслужит поступивший с этажа вызов. Избежать сложностей можно, включив еще один координирующий объект Планировщик, который будет заниматься поиском подходящего лифта.
Динамическая модель
Далее следует определить взаимодействия между объектами, соответствующие каждому прецеденту. В этом примере мы будем пользоваться диаграммами кооперации. Для каждого прецедента разрабатывается своя диаграмма кооперации, на которой изображены участвующие в нем объекты и последовательность их взаимодействий. Кроме того, если в кооперацию вовлечен зависящий от состояния объект Управление Лифтом, то последовательность событий также изображается на диаграмме состояний. Ниже приводятся описания сообщений для каждого прецедента.