- •Пример системы управления лифтами
- •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.3. Диаграмма кооперации для прецедента «Остановка Лифта на Этаже»
Поскольку прецедент Остановка Лифта на Этаже зависит от состояния, он изображается одновременно на диаграмме кооперации (рис.7) и на диаграмме состояний (рис.8). Состояния, в которые переходит объект, перечислены в описании последовательности сообщений ниже; предусловие состоит в том, что лифт находится в состоянии Лифт Движется:
А1: Объект Интерфейс Датчика Прибытия получает информацию от внешнего устройства.
А2: Интерфейс Датчика Прибытия посылает номер этажа в сообщении Подходит к Этажу объекту Управление Лифтом.
A3: Объект Управление Лифтом отправляет сообщение Проверить Этот Этаж объекту Состояние и План Движения Лифта, который проверяет, должен ли лифт остановиться на этаже, к которому он подходит.
А4: При подходе лифта к этажу, где надо сделать остановку, объект Состояние и План Движения Лифта передает сообщение Приближаюсь к Нужному Этажу объекту Управление Лифтом. В сообщении содержится номер этажа и направление дальнейшего движения. Получив такое сообщение, объект Управление Лифтом переходит из состояния Лифт Движется в состояние Лифт Останавливается.
Рис.7. Диаграмма кооперации для прецедента Остановка Лифта на Этаже
Рис.8. Прецедент Остановка Лифта на Этаже: диаграмма состояния объекта Управление Лифтом
А5: В результате перехода в состояние Лифт Останавливается объект Управление Лифтом отдает объекту Интерфейс Мотора команду Стоп.
А5а (параллельная последовательность): Объект Управление Лифтом посылает объекту Интерфейс Лампочки Направления сообщение Включить Лампочку Направления (с параметром «вверх» или «вниз»), которое зажигает лампочку (А5а.1).
А6: Объект Интерфейс Мотора приказывает физическому мотору Остановить Мотор.
А7: Объект Интерфейс Мотора передает команду Лифт Остановлен объекту Управление Лифтом, который переходит в состояние Открывается Дверь Лифта.
А9: При переходе в состояние Открывается Дверь Лифта объект Управление Лифтом посылает объекту Интерфейс Двери команду Открыть Дверь.
А9а (параллельная последовательность, так как с изменением состояния связано четыре команды): Объект Управление Лифтом дает команду Выключить Лампочку Лифта объекту Интерфейс Лампочки Лифта, который посылает физической лампочке сообщение Вывод на Лампочку Лифта (А9а.1). Объект Управление Лифтом отправляет сообщение Прибыл объектам Состояние и План Движения Лифта (А9b, третья параллельная последовательность) и Планировщик (А9с, четвертая параллельная последовательность).
А10: Объект Интерфейс Двери командует физической двери Открыть Дверь.
А11: Объект Интерфейс Двери получает Ответ Двери.
А12: Объект Интерфейс Двери посылает сообщение Дверь Открыта объекту Управление Лифтом, который переходит в состояние Лифт на Этаже.
А13: Объект Управление Лифтом запускает таймер.
А14: По прошествии тайм-аута таймер генерирует сообщение, которое переводит объект Управление Лифтом в состояние Проверить Следующий Этаж Назначения.
А15: В результате перехода объект Управление Лифтом передает сообщение Проверить Следующий Этаж Назначения объекту Состояние и План Движения Лифта. Его цель - выяснить, куда нужно ехать в случае изменения плана движения. Если у лифта нет невыполненных запросов, то он переходит в состояние Лифт Стоит (событие А16), в противном случае выполняется прецедент Отправить Лифт.
Заметим, что А9, А9а, А9b и А9с - параллельные последовательности, выполняемые в результате четырех выходных событий для одного и того же перехода. Порядок их реализации не детерминирован. Так, событие А9а.1 (следующее за А9а) может произойти как до, так и после события А10 (которое следует за А9). Обратите внимание, что главной последовательности суффикс (к примеру, A9d) не присваивается, поскольку это усложнило бы последующую нумерацию событий.
