- •Пример системы управления лифтами
- •1. Описание задачи
- •2. Модель прецедентов
- •2.1. Прецедент «Выбор Этажа Назначения»
- •2.2. Прецедент «Вызов Лифта»
- •2.3. Абстрактные прецеденты
- •2.4. Абстрактный прецедент «Остановка Лифта на Этаже»
- •2.5. Абстрактный прецедент «Планирование Лифта»
- •2.7. Конкретный прецедент «Вызов Лифта»
- •18.3. Статическая модель предметной области
- •2.6. Конкретный прецедент «Выбор Этажа Назначения»
- •5. Динамическая модель
- •5.1. Диаграмма кооперации для прецедента «Выбор Этажа Назначения»
- •5.2. Диаграмма кооперации для прецедента «Вызов Лифта»
- •5.3. Диаграмма кооперации для прецедента «Остановка Лифта на Этаже»
- •5.4. Абстрактный прецедент «Отправить Лифт»
- •6. Модель состояний
- •7. Консолидация диаграмм кооперации
- •8. Разбиение на подсистемы
- •9. Разбиение системы на задачи
- •9.1. Выделение задач в подсистеме лифта
- •9.2. Выделение задач в подсистеме этажа
- •9.3. Выделение задач в подсистеме планировщика
- •9.4. Определение интерфейсов задач
- •9.5. Проектирование класса абстрагирования данных
- •9.6. Обсуждение альтернативных архитектур
- •10. Проект распределенной системы управления лифтами
- •10.1. Структура подсистемы лифта
- •10.2. Структура подсистемы этажа
- •10.3. Структура подсистемы планировщика
- •10.4. Интерфейсы подсистем
- •11. Проектирование скрывающих информацию классов
- •11.1. Проектирование классов интерфейса устройств
- •11.2. Проектирование класса, зависящего от состояния
- •12. Разработка детального проекта программы
- •12.1. Проектирование объектов-разъемов для лифта
- •12.2. Проектирование составных задач
- •13. Конфигурирование целевой системы
- •14. Анализ производительности нераспределенной системы управления лифтами
- •14.1. Сценарий для анализа производительности
- •14.2. Последовательности событий
- •14.3. Назначение приоритетов
- •14.4. Планирование в реальном времени для нераспределенной архитектуры
- •14.5. Последовательность событий «Остановка Лифта на Этаже»
- •14.6. Последовательность событий «Выбор Этажа Назначения»
- •14.7. Последовательность событий «Вызов Лифта»
- •15. Анализ производительности распределенной системы управления лифтами
- •15.1. Сценарий для анализа производительности
- •15.2. Планирование в реальном времени для распределенной архитектуры
- •15.3. Последовательность событий «Остановка Лифта на Этаже»
- •15.4. Последовательность событий «Выбор Этажа Назначения»
- •15.5. Последовательность событий «Вызов Лифта»
5.4. Абстрактный прецедент «Отправить Лифт»
На диаграмме кооперации для абстрактного прецедента Отправить Лифт начальные предусловия различаются в зависимости от того, в какой конкретный прецедент он включен. Сначала рассмотрим, как данный прецедент исполняется в составе прецедента Остановка Лифта на Этаже. При входе в состояние Проверка Следующего Этажа Назначения объект Управление Лифтом посылает сообщение Проверить Следующий Этаж Назначения объекту Состояние и План Движения Лифта (событие А16 на рис.8), который, в свою очередь, передает сообщение Запрос Вверх (или Запрос Вниз) объекту Управление Лифтом, информируя его о направлении, в котором собирается двигаться лифт. Это и есть первое событие в абстрактном прецеденте Отправить Лифт.
Во втором случае объект Управление Лифтом находится в состоянии Лифт Стоит. Диспетчер Лифта получает сообщение либо от планировщика (рис.6), либо от Интерфейса Кнопки Лифта (рис.5) с запросом посетить определенный этаж. Диспетчер Лифта посылает сообщение объекту Состояние и План Движения Лифта с просьбой обновить план. Если лифт занят обслуживанием запроса, то объект Состояние и План Движения Лифта возвращает сообщение Подтвердить с нулевым параметром. Если же лифт стоит, то объект Состояние и План Движения Лифта возвращает то же сообщение Подтвердить, но с параметром «вверх» (или «вниз»). В таком случае Диспетчер Лифта отправляет сообщение Запрос Вверх (или Запрос Вниз) объекту Управление Лифтом.
Поскольку сообщения Вверх и Вниз приходят объекту Управление Лифтом из разных источников, то в нижеследующем описании последовательности сообщений мы называем отправителя объектом-источником. Этот объект можно считать входным параметром для модели кооперации. В сценарии, изображенном на диаграмме кооперации, Запрос Вверх приходит от объекта Состояние и План Движения Лифта (рис.9).
Поскольку данный прецедент зависит от состояния, он изображается также на диаграмме состояний (рис.10). Описание последовательности сообщений выглядит следующим образом.
Предусловие. Лифт находится в состоянии Лифт Стоит либо в состоянии Проверка Следующего Этажа Назначения.
D1: {Объект-источник} отправляет сообщение Запрос Вверх объекту Управление Лифтом, который переходит в состояние Дверь Закрывается перед Движением Вверх.
D2: В результате такого перехода возникают два параллельных выходных события. Объект Управление Лифтом посылает команду Закрыть Дверь объекту Интерфейс Двери. На диаграмме состояний событие Закрыть Дверь (как и другое выходное событие) показано в виде действия при выходе, поскольку событие Запрос Вверх может поступить либо из состояния Лифт Стоит, либо из состояния Проверка Следующего Этажа Назначения. Диаграмма состояний получится короче, если изобразить одно, а не два действия при входе (по одному на каждый переход).
Рис.9. Диаграмма кооперации для прецедента Отправить Лифт
Рис.10. Прецедент Отправить Лифт: диаграмма состояния объекта Управление Лифтом
D2a (параллельная последовательность): Объект Управление Лифтом дает команду Выключить Лампочку Этажа «Вверх» объекту Интерфейс Лампочки Этажа, который выключает физическую лампочку (D2a.l).
D3: Объект Интерфейс Двери командует физической двери Закрыть Дверь.
D4: Когда дверь закроется, она передаст Ответ Двери.
D5: Интерфейс Двери отправляет сообщение Дверь Закрыта объекту Управление Лифтом, который переходит в состояние Лифт Начинает Движение.
D6: Объект Управление Лифтом посылает команду Вверх объекту Интерфейс Мотора.
D6a: Объект Управление Лифтом направляет запрос Выключить Лампочку Направления «Вверх» объекту Интерфейс Лампочки Направления, который выключает физическую лампочку (D6a.l).
D7: Объект Интерфейс Мотора приказывает реальному мотору Запустить Мотор.
D8: Как только лифт начинает движение вверх, мотор выдает сообщение Ответ Мотора.
D9: Объект Интерфейс Мотора посылает сообщение Лифт Поехал объекту Управление Лифтом, который переходит в состояние Лифт Едет.
D10: Объект Управление Лифтом отправляет сообщение Отбыл объектам Состояние и План Движения Лифта (D10) и Планировщик (Dl0a).
Последовательность шагов будет такой же и при получении сообщения Запрос Вниз, только слово Вверх надо всюду заменить словом Вниз.
