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