- •Пример системы управления лифтами
- •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. Динамическая модель
Далее следует определить взаимодействия между объектами, соответствующие каждому прецеденту. В этом примере мы будем пользоваться диаграммами кооперации. Для каждого прецедента разрабатывается своя диаграмма кооперации, на которой изображены участвующие в нем объекты и последовательность их взаимодействий. Кроме того, если в кооперацию вовлечен зависящий от состояния объект Управление Лифтом, то последовательность событий также изображается на диаграмме состояний. Ниже приводятся описания сообщений для каждого прецедента.
5.1. Диаграмма кооперации для прецедента «Выбор Этажа Назначения»
Диаграмма кооперации для прецедента Выбор Этажа Назначения изображена на рис.5. Поскольку Запрос Кнопки Лифта может поступить в момент, когда лифт (точнее, объект Управление Лифтом) занят обслуживанием предыдущего запроса, то ответственность за его обработку возлагается на объект Диспетчер Лифта. Последовательность сообщений описывается следующим образом:
Е1: Поступил Запрос Кнопки Лифта объекту Интерфейс Кнопки Лифта.
Е2: Интерфейс Кнопки Лифта посылает Запрос Лифта объекту Диспетчер Лифта.
Е3: Диспетчер Лифта просит объект Состояние и План Движения Лифта добавить запрос в список этажей, которые нужно посетить.
Е4: Обновляется план движения лифта. Объекту Диспетчер Лифта возвращается подтверждение.
Е5: Объект Диспетчер Лифта отправляет Планировщику сообщение Обязательство Лифта, информирующее о том, что лифт собирается заехать на данный этаж.
Е5а: Если лифт стоит, то Диспетчер Лифта посылает сообщение Вверх (или Вниз) объекту Управление Лифтом, извещающее, в каком направлении ехать. Этот случай обрабатывается в абстрактном прецеденте Отправить Лифт.
Рис.5. Диаграмма кооперации для прецедента Выбор Этажа Назначения
5.2. Диаграмма кооперации для прецедента «Вызов Лифта»
Диаграмма кооперации для прецедента Вызов Лифта изображена на рис.6. Поскольку вызов поступает от кнопки этажа, нужно решить, какой лифт обслужит запрос. Решение принимается Планировщиком, у которого есть информация о состоянии (месте нахождения и направлении движения каждого лифта) и план (список этажей, которые каждый лифт обязан посетить). Вот описание последовательности сообщений:
F1: Поступил Запрос Кнопки Этажа объекту Интерфейс Кнопки Этажа.
F2: Объект Интерфейс Кнопки Этажа посылает Запрос на Обслуживание объекту Планировщик.
F3: Планировщик выбирает лифт и передает Запрос Планировщика объекту Диспетчер Лифта, входящему в состав выбранного Лифта.
F4: Объект Диспетчер Лифта отправляет сообщение Обновить объекту Состояние и План Движения Лифта, чтобы тот добавил новый запрос в список этажей, которые должен посетить лифт.
F5: Объекту Диспетчер Лифта возвращается подтверждение, где, в частности, содержится информация о том, стоит лифт или движется.
F6: Объект Диспетчер Лифта посылает Планировщику сообщение Обязательство Лифта.
F6a: Если лифт стоит, то Диспетчер Лифта посылает сообщение Вверх (или Вниз) объекту Управление Лифтом, извещающее, в каком направлении ехать. Этот случай обрабатывается в абстрактном прецеденте Отправить Лифт.
Рис.6. Диаграмма кооперации для прецедента Вызов Лифта
