- •Пример системы управления лифтами
- •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. Последовательность событий «Вызов Лифта»
10.4. Интерфейсы подсистем
После определения интерфейсов задач во всех трех подсистемах можно обновить архитектуру распределенной программы с целью показа интерфейсов подсистем (см. рис.29). На самом деле все интерфейсы принадлежат той или иной из ранее рассмотренных задач.
11. Проектирование скрывающих информацию классов
Сами классы были определены на этапе разбиения на объекты, теперь речь пойдет о проектировании их операций. Классы абстрагирования данных описаны выше; в этом разделе мы разработаем остальные классы, скрывающие информацию.
Рис.27. Архитектура задач для Подсистемы Планировщика
11.1. Проектирование классов интерфейса устройств
Класс интерфейса устройства скрывает истинный интерфейс с физическим устройством, предлагая вместо него виртуальный интерфейс. Для каждого типа устройств ввода/вывода имеется отдельный интерфейсный класс. Состав операций, поддерживаемых таким классом, зависит от функций, которые должен поддерживать объект интерфейса. Классы интерфейса устройств изображены на рис.30 и описаны ниже:
– Интерфейс Кнопки Лифта. Предоставляет две операции: читать (считывает значение датчика кнопки лифта) и инициализировать;
– Интерфейс Кнопки Этажа. Предоставляет две операции: читать (считывает значение датчика кнопки этажа) и инициализировать;
– Интерфейс Датчика Прибытия. Предоставляет две операции: читать (считывает значение датчика прибытия) и инициализировать;
– Интерфейс Мотора. Предоставляет операции вверх, вниз и стоп, соответствующие сообщениям Вверх, Вниз и Стоп, которые получает объект Интерфейс Мотора (см. рис.14);
– Интерфейс Двери. Предоставляет операции открыть и закрыть, соответствующие сообщениям Открыть Дверь и Закрыть Дверь, которые получает объект Интерфейс Двери (см. рис.14);
– Интерфейс Лампочки Лифта. Предоставляет операцию выключить для выключения лампочки лифта. Предполагается, что лампочка включается аппаратно, так что программная реализация операции включить не нужна. Операция выключить соответствует сообщению Выключить Лампочку Лифта, которое получает объект Интерфейс Лампочки Лифта (см. рис.14);
Рис.28. Архитектура задач для Подсистемы Планировщика: интерфейсы задач
– Интерфейс Лампочки Этажа. Предоставляет операцию выключить для выключения лампочки этажа. Предполагается, что лампочка включается аппаратно, так что программная реализация операции включить не требуется. Операция выключить соответствует сообщению Выключить Лампочку Этажа, которое получает объект Интерфейс Лампочки Этажа (см. рис.14);
– Интерфейс Лампочки Направления. Предоставляет операции включить и выключить, соответствующие сообщениям Включить Лампочку Направления и Выключить Лампочку Направления, которые получает объект Интерфейс Лампочки Направления (см. рис.14).
Рис.29. Архитектура распределенной программы: интерфейсы подсистем
11.2. Проектирование класса, зависящего от состояния
В системе есть только один зависящий от состояния класс Управление Лифтом, который инкапсулирует диаграмму состояний, реализованную в виде таблицы переходов, – см. рис.13. Он поддерживает две операции: обработатьСобытие и текущееСостояние. Этот объект вложен в задачу Контроллер Лифта. Поскольку задача существует в нескольких экземплярах, то и экземпляров класса будет несколько – по одному для каждого лифта. Спецификация класса Управление Лифтом представлена на рис.31.
