- •Пример системы управления лифтами
- •1. Описание задачи
- •2. Модель прецедентов
- •2.1. Прецедент «Выбор Этажа Назначения»
- •2.2. Прецедент «Вызов Лифта»
- •2.3. Абстрактные прецеденты
- •2.4. Абстрактный прецедент «Остановка Лифта на Этаже»
- •2.5. Абстрактный прецедент «Планирование Лифта»
- •2.6. Конкретный прецедент «Выбор Этажа Назначения»
- •2.7. Конкретный прецедент «Вызов Лифта»
- •18.3. Статическая модель предметной области
- •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. Последовательность событий «Вызов Лифта»
6. Модель состояний
Поскольку мы получили два зависящих от состояния прецедента, то для создания полной диаграммы состояний необходимо консолидировать две частичные диаграммы и рассмотреть альтернативные ветви. Полная диаграмма, содержащая последовательности событий Остановка Лифта на Этаже и Отправить Лифт, изображена на рис.11. В нее добавлены состояния, информирующие, что происходит при закрытии двери перед движением вниз.
Это плоская диаграмма состояний, но ее можно превратить в иерархическую, определив надсостояния, соответствующие основным группам состояний лифта. Надсостояния и подсостояния представлены на иерархической диаграмме и описаны ниже. Диаграмма верхнего уровня (включающая события, но не действия), показана на рис.12, а полная диаграмма состояний - на рис.13.
Лифт Стоит. Лифт находится на этаже, необслуженных вызовов нет. Дверь лифта открыта.
Подготовка к Движению Вверх. Это надсостояние включает следующие подсостояния:
– Дверь Закрывается перед Движением Вверх. Лифт переходит в данное состояние, когда начинает закрываться дверь перед отправлением на этаж выше;
– Лифт Начинает Движение. В такое состояние лифт переходит, когда дверь уже закрыта, и он ждет запуска мотора, чтобы поехать наверх.
Подготовка к Движению Вниз. Это надсостояние содержит следующие подсостояния:
Рис.11. Диаграмма состояния объекта Управление Лифтом
– Дверь Закрывается перед Движением Вниз. Лифт переходит в данное состояние, когда начинает закрываться дверь перед отправлением на этаж ниже;
– Лифт Начинает Движение. В такое состояние лифт переходит, когда дверь уже закрыта, и он ждет запуска мотора, чтобы поехать вниз.
Рис.12. Диаграмма состояний верхнего уровня объекта Управления Лифтом
Состояния Дверь Закрывается перед Движением Вверх и Дверь Закрывается перед Движением Вниз различны, потому что различны входные события Запрос Вверх и Запрос Вниз, вызывающие переходы в данные состояния (см. рис.13). Но еще важнее, что неодинаковы также и действия при выходе из этих состояний: Вверх и Вниз.
4. Движение на Этаж. Надсостояние включает следующие подсостояния:
Лифт Едет. Лифт переходит в такое состояние, когда начинает движение вверх или вниз;
Лифт Останавливается. Переход в указанное состояние осуществляется, когда лифт приближается к этажу, на котором должен остановиться;
Дверь Лифта Открывается. Переход в это состояние совершается, когда лифт остановился на этаже и открывает дверь;
Лифт на Этаже. Переход в данное состояние производится, когда лифт полностью открыл дверь.
5. Проверка Следующего Этажа Назначения. В таком состоянии лифт проверяет, следует ему направиться на другой этаж (на какой именно и в каком направлении) или нужно перейти в состояние Нет Запросов. В последнее состояние лифт переходит, когда срабатывает таймер, запущенный в состоянии Лифт на Этаже.
7. Консолидация диаграмм кооперации
Результат консолидации диаграмм кооперации, описывающих все четыре прецедента, показан на рис.14. Некоторые объекты принимают участие в нескольких прецедентах. Так, объекты Интерфейс Двери, Интерфейс Мотора и Управление Лифтом участвуют в прецедентах Остановка Лифта на Этаже и Отправить Лифт. Другие объекты – к примеру, Интерфейс Кнопки Этажа и Интерфейс Датчика Прибытия – задействованы только в одном прецеденте.
Для объектов, которые принимают участие лишь в одном прецеденте, все взаимодействия изображены на диаграмме кооперации, описывающей этот прецедент. Если же объект занят в нескольких прецедентах, его взаимодействия представлены на разных диаграммах и объединены на консолидированной диаграмме кооперации. Так, сообщения Открыть Дверь и Дверь Открыта, посылаемые объекту Интерфейс Двери и принимаемые от него, появляются в прецеденте Остановка Лифта на Этаже (рис.7). Что же касается сообщений Закрыть Дверь и Дверь Закрыта, то они происходят из прецедента Отправить Лифт (рис.9).
На консолидированный диаграмме кооперации должны присутствовать все взаимодействия объектов, в том числе и альтернативы, которые обычно на отдельных диаграммах кооперации не изображаются. Поэтому на рис.14 показаны все сообщения «вниз» и все сообщения «вверх». Кроме того, имена сообщений можно агрегировать. Так, Команда Лампочке Направления - это результат агрегирования четырех сообщений: Включить Лампочку Направления «Вверх», Выключить Лампочку Направления «Вверх», Включить Лампочку Направления «Вниз», Выключить Лампочку Направления «Вниз». В словаре сообщений следует описать, из чего состоят агрегированные имена сообщений.
Рис.13. Иерархическая диаграмма состояний объекта Управление Лифтом
Рис.14. Система управления лифтами: консолидированная диаграмма кооперации
