Система управления лифтами.

Раздел 1. Унифицированный язык моделирования UML. Введение

Структура языка. Словарь UML содержит три типа конструкций: предметы, отношения, диаграммы.

Предметы могут быть следующих типов:

- структурные;

- поведенческие;

- группировки;

- комментарии.

Структурные предметы представляют собой статические части моделей. Ниже рассмотрены разновидности структурных предметов.

Класс – описание множеств объектов с одинаковыми свойствами и поведением. Изображается прямоугольником , который имеет две или три секции в зависимости от контекста, в котором он будет использоваться.

Действующее лицо – Актёр – роль, которую пользователь (другая система) играет относительно системы. Изображается человечек схематически.

 
 

 


Прецедент – последовательность действий, выполняемых системой в ответ на событие, инициированное внешним объектом (актёром). Изображается: «название прецедента в овале».

Кооперация - совокупность ролей и других елементов, которые работают вместе. Один класс может брать участие в нескольких кооперациях.

Поведенческие предметы описывают поведение элементов системы во времени и пространстве. Они разделяются на два вида: взаимодействие и конечный автомат.

Взаимодействие - набор сообщений, которыми обмениваются элементы системы в процессе выполнения своих функций.

Конечный автомат отображает поведение, представленное последовательностью состояний объекта, связанных с событиями.

Отношения. В UML используются такие отношения:

- зависимость;

- ассоциация;

- обобщение;

- реализация.

Зависимость – это семантическое отношение между двумя предметами, которые показывают, что изменения в одном предмете (независимом) влияют на другой предмет (зависимый). Зависимость должна иметь метку.

Ассоциация – это структурное отношение, которое показывает набор связей, которые существуют между объектами. Отдельным случаем является агрегация – отношение между целым и его частями.

 

Обобщение – отношение специализации, которая показывает, что подтип должен включать все элементы супертипа. Обычно обобщение связано с наследованием. Стрелка направлена от подтипа к супертипу.

 

Реализация – семантическое отношение между классификаторами, когда один классификатор определяет задание, а другой должен его выполнить. Это отношение используется между интерфейсами и классами, которые реализуют этот интерфейс, а также между прецедентами и кооперациями, которые их реализуют.

 

Диаграммы в UML.

Диаграмма представляет собой множество элементов, которые обычно являются связанным графом, где вершинами являются предметы (классы, состояния, пакеты и т. д.), а дугами – отношения. В UML используются такие виды диаграмм:

- диаграммы классов;

- диаграммы объектов;

- диаграммы прецедентов;

- диаграммы взаимодействий;

- диаграммы состояний;

- диаграммы деятельности;

- диаграммы развертывания.

Составление диаграмм – наиболее ответственный и трудоёмкий этап проектирования системы.

 


Раздел 2. Требования и прецеденты.

 

2.1 Требования. Требования – возможности или условия, которым должна соответствовать система или проект.

Типы требований. Требования делят на основные и дополнительные. К основным принадлежат:

- функциональные

- требования, связанные с удобством применения

- требования надёжности

- требования производительности

- возможность поддержки.

К дополнительным требованиям принадлежат:

- требования к реализации

- требования к интерфейсу

- требования к операциям

- требования к пакетированию

- требования к юридическому оформлению разработки.

 

2.2 Заинтересованные лица и исполнители.

Исполнитель (актёр)

- основной

- дополнительный

- закулисный

 

2.3 Прецеденты

Прецеденты – это механизм упрощения этапа формирования требований для всех заинтересованных лиц.

2.3.1 Способы описания прецедентов.

Типы и форматы прецедентов:

Существует несколько ступеней формализации прецедентов:

- сжатый в виде одного абзаца. Обычно описывается только главный успешный сценарий.

- свободный – неформальный стиль. Описание занимает несколько абзацев и охватывает разные сценарии.

- развёрнутый – наиболее подробный стиль. Описываются все шаги и варианты развития сценария, а также предусловия и результаты.

Предусловия – перечисление предусловий, которые всегда должны выполнятся до начала сценария прецедента. Обычно в роли предусловий выступает успешный результат выполнения другого сценария.

Результаты или постусловия описывают, какие условия обязательно должны выполняться в случае успешного завершения сценария.

Основной успешный сценарий. В разделе описываются 3 вида действий.

1. Взаимодействия между исполнителями (система сама является исполнителем).

2. Верификация (Обычно со стороны системы).

3. Замена состояния системы (например, запись или модификация некоторых сущностей)

Рекомендуется все условия или возможности вариантов развития действий выносить в раздел расширений.

Расширения (альтернативный сценарий). В этом разделе указываются все другие сценарии (неосновные) или ветки. При описании прецедента основной сценарий и его расширения должны охватывать почти все интересы заинтересованных лиц. Некоторые интересы лучше отобразить в виде нефункциональных требований в дополнительной спецификации.

В расширении сначала указываются условия, а потом реакция на них. Расширения для каждого пункта основного сценария обозначаются последовательностью, которая состоит из номера этого пункта и буквы алфавита. Например, для расширения для пункта 3 будут именоваться 3а, 3б и т.д.

После окончания обработки расширения по умолчанию выполняется возврат к основному сценарию, если не указывается в расширении другой ход действий.

Если расширение оказывается очень сложным, то его можно вынести в отдельный прецедент.

2.3.2. Пример развернутого описания прецедента.

Система управления лифтами.

Система управления одним или несколькими лифтами. Система должна планировать работу лифтов, чтобы отвечать на запросы пользователей с разных этажей, а также управлять движением лифтов между этажами.

Описание задачи. В каждом лифте есть:

- несколько кнопок лифта. Пользователь нажимает кнопку для выбора этажа назначения;

- столько же лампочек лифта. Они показывают, на каких этажах лифт остановится.

- мотор лифта. Управляется командами подъёма, спуска и остановок.

- дверь лифта. Управляется командами открывания и закрывания.

На каждом этаже есть:

- кнопки этажа «вверх» и «вниз».

- соответствие лампочки этажа.

В каждой лифтовой шахте находится датчик прибытия, определяющий факт прихода лифта на этаже.

Диаграмма прецедентов.

Определены 2 прецедента: вызов лифта и выбор этажа.

Вызов лифта: пользователь находящийся на этаже, вызывает лифт кнопкой «вверх» и «вниз».

Выбор этажа: Пользователь находящийся в лифте, выбирает этаж кнопкой «вверх» и «вниз», на который ему нужно попасть.

 

Рис. Диаграмма прецедентов

 

Прецедент «Выбор этажа назначения»

Актёр: Пользователь лифта (главный), датчик прибытия (дополнительный).

Предусловия: Пользователь находится в лифте.

Описание:

1. Пользователь нажимает «вверх». Датчик кнопки лифта посылает системе запрос в котором указан выбранный пользователем этаж.

2. Новый запрос добавляется в список этажей, которые должен посетить лифт. Если лифт стоит, то система определяет, куда он должен поехать, чтобы обслужить очередной запрос. Система отдаёт лифту команду закрыть дверь. Как только дверь закроется, система приказывает мотору привести лифт в движение вверх или вниз.

3. По мере движения лифта, датчики прибытия распознают приближение лифта к этажу и извещают об этом систему. Система проверяет, должен ли лифт остановится на данном этаже. Если да, то система отдаёт мотору команду остановиться. После остановки система приказывает открыть дверь.

4. Если есть другие ожидающие вызовы, лифт посещает этажи по пути к тому на который направляется пользователь. В конце концов лифт приезжает на указанный этаж.

Альтернатива: Пользователь нажимает кнопку «вниз». Реакция системы такая же, как в главной последовательности. Если лифт находится на некотором этаже и новых вызовов нет, то он остается в покое.

Постусловие: Лифт прибыл на этаж назначения, выбранный пользователем.

 

Прецедент «Вызов лифта»

Актёр: Пользователь лифта (главный), датчик прибытия (дополнительный).

Предусловие: пользователь находится на этаже и ждёт лифта.

Описание:

1. Пользователь нажимает кнопку этажа «вверх». Датчик кнопки этажа посылает системе запрос, содержащий указание на этаж, где находится пользователь.

2. Система выбирает, какой лифт направить на этаж. Новый запрос добавляется в список этажей, которые должен посетить лифт. Если лифт стоит, система определяет, куда его направить для удовлетворения запроса. Система отдает лифту команду закрыть дверь. Как только дверь закроется, система предписывает мотору привести лифт в движение вверх или вниз.

3. По мере движения лифта датчики прибытия распознают приближение лифта к этажу и извещают об этом систему. Система проверяет, должен ли лифт остановиться на данном этаже. Если да, то система отдает мотору команду остановиться. После остановки система приказывает открывать дверь.

4. Если есть другие ожидающие вызовы, лифт посещает этажи по пути к тому, куда был вызван. В конечном итоге лифт приезжает на этаж, где его ждёт пользователь.

Альтернатива: Пользователь нажимает на кнопку этажа «вниз». Реакция системы такая же, как в главной последовательности. Если лифт находится на некотором этаже и новых вызовов нет, то он остается в покое.

Постусловие: Лифт прибыл на этаж, на который был вызван пользователем.

 

Абстрактные прецеденты

Проанализировав данные прецедентов, определив общие последовательности, которые нужно вынести в абстрактные прецеденты, а затем включить в новые, более простые варианты исходных прецедентов.

1. Абстрактный прецедент – это планирование действий лифта в ответ на запрос пользователя. Назовём его «Отправка лифта».

2. Абстрактный прецедент – «Остановка лифта на этаже».

Отношение между прецедентами – включение.

 

Рис. Модель прецедентов с абстрактными классами

 

Абстрактный прецедент «Остановка лифта на этаже»

Актёр: датчик прибытия.

Предусловия: Лифт движется.

Описание: По мере движения лифта датчик прибытия распознает приближение к этому этажу и извещает об этом систему. Система проверяет, должен ли лифт остановиться на данном этаже. Если да, то система отдает мотору команду остановиться. После остановки система приказывает открыть дверь.

Альтернатива: Лифту не нужно останавливаться на данном этаже и он проходит мимо.

Постусловие: Лифт остановился на этаже, дверь открыта.

 

Абстрактный прецедент «Отправка лифта»

Предусловие: Лифт должен посетить хотя б один этаж.

Описание: Система выбирает в каком направлении послать лифт, чтобы удовлетворить очередной запрос. Система отдает лифту команду закрыть дверь. Как только дверь закроется, система командует мотору привести лифт в движении – вверх или вниз.

Альтернатива: Если лифт находится на некотором этаже и новых вызовов нет, то он остается в покое.

 

Конкретный прецедент «Выбор этажа назначения»

Перепишем прецедент с использованием абстрактных прецедентов

Актёр: Пользователь лифта.

Предусловия: Пользователь находится в лифте.

Описание:

1. Пользователь нажимает кнопку лифта «вверх». Датчик кнопки лифта посылает системе запрос, в котором указан выбранный пользователем этаж назначения.

2. Новый запрос добавляется в список этажей, которые должен посетить лифт. Если лифт стоит, включается абстрактный прецедент «Отправка лифта».

3. Запускается абстрактный прецедент «Остановка лифта на этаже».

4. Если есть другие ожидающие вызовы, лифт посещает этажи по пути к тому, на который направляется пользователь, следуя заранее запланированной последовательности. В конце концов лифт приезжает на указанный этаж назначения.

Альтернатива: Пользователь нажимает кнопку «вниз». Реакция системы такая же как в главной последовательности.

Постусловие: Лифт прибыл на этаж назначения.

 

Конкретный прецедент «Вызов лифта»

Перепишем прецедент «Вызов лифта» с использованием абстрактных.

Актёр: Пользователь лифта.

Предусловия: Пользователь находится на этаже и ждёт лифта.

Описание:

1. Пользователь нажимает кнопку «вверх» . Датчик кнопки этажа посылает системе запрос, в котором указан этаж, где находится пользователь.

2. Система выбирает, какой лифт направить на этаж. Новый запрос добавляется в список этажей, которые должен посетить. Если лифт стоит, включается абстрактный прецедент «Отправка лифта».

3. Запускается абстрактный прецедент «Остановка лифта на этаже».

4. Если есть другие ожидающие вызовы, лифт посещает этажи по пути к тому, куда был вызван, следую заранее запланированной последовательности. В конечном итоге лифт приезжает на этаж, где его ждёт пользователь.

Альтернатива: Пользователь нажимает кнопку этажа «вниз». Реакция системы такая же, как и в главной последовательности.

Постусловия: Лифт прибыл на этаж, на который был вызван пользователем.