<table style="width: 100%;"><tr><td style="width: 40%;">
<a href="../articles/5_1_1_10_uml_use_case.md">Диаграмма вариантов использования
</a></td><td style="width: 20%;">
<a href="../readme.md">Содержание
</a></td><td style="width: 40%;">
<a href="../articles/5_1_1_1_erd2.md">Основы проектирования баз данных.
</a></td><tr></table>

# UML. Спецификация вариантов использования (прецедентов)

https://glebradchenko.susu.ru/courses/bachelor/engineering/2013/SUSU_SE_08_UML_UseCase.pdf

https://studfile.net/preview/1712530/page:4/

Дальнейшее развитие модели поведения системы предполагает описание прецедентов. Типичное описание содержит следующие разделы:

* Имя прецедента
* Идентификатор прецедента (встречается не всегда)
* Краткое описание;
* Участвующие субъекты (акторы, иногда разделяются на основных и второстепенных);
* Предусловия, необходимые для инициирования прецедента;
* Основной поток событий;
* Альтернативный поток событий;
* Постусловия, определяющие состояние системы, по достижении которого прецедент завершается.

**Основной поток** описывает «идеальный» ход развития событий в прецеденте.

**Альтернативные потоки** могут перехватывать ошибки, ответвления и прерывания основного потока.

Основной поток *всегда начинается с действий главного актера*, направленных на инициацию прецедента.

## Запись основного потока

* Удачным способом начала потока можно считать следующую форму записи:

    `Прецедент начинается, когда <актер> <действие>.`

    Например, `Прецедент начинается, когда покупатель выбирает товар`

* Каждый этап потока прецедента должен быть выражен в следующей форме:

    `<номер> <ктолибо> <совершает некоторое действие>.`

* Альтернативные потоки могут быть заменены с помощью ключевого слова **Если**

    ```
    1. Прецедент начинается, когда Покупатель выбирает товар
    2. Если Покупатель выбирает товар у которого есть дополнительные товары
        2.1 Менеджер предлагает дополнительные товары
    3. Если Покупатель выбирает товар которого нет в наличии
        3.1 Менеджер предлагает оформить заказ
    ```

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

* Для алтернативных потоков оформляется отдельная спецификация. Структура аналогична основной, только идентификатор следующего уровня (например, если у основного потока ID 2., то у альтернативного 2.1)

В итоге должна получиться таблица (правая колонка, слева описание):

&nbsp; | &nbsp;
--|------ 
*Имя прецедента* | Прецедент: Выбор товара
*Идентификатор прецедента* | ID 1
*Краткое описание* | Краткое описание<br/>Покупатель выбирает товар в магазине автосервиса
*Акторы, вовлеченные в прецедент* | Главные акторы:<br/>Покупатель<br/>Второстепенные акторы:<br/>Менеджер
*Состояние системы на начало прецедента* | Предусловия:<br/>нет
*Фактические этапы прецедента* | Основной поток:<br/>1. Прецедент начинается, когда Покупатель выбирает товар<br/>2. Если Покупатель выбирает товар у которого есть дополнительные товары<br/>&nbsp;&nbsp;&nbsp;&nbsp;2.1 Менеджер предлагает дополнительные товары<br/> 3. Если Покупатель выбирает товар которого нет в наличии<br/>&nbsp;&nbsp;&nbsp;&nbsp;3.1 Менеджер предлагает оформить заказ
*Альтернативные потоки* | Альтернативные потоки:<br/>2.1 Менеджер предлагает дополнительные товары<br/>3.1 Менеджер предлагает оформить заказ
*Состояние системы после окончания прецедента* | Постусловия<br/>1. Покупатель выбрал товар<br/>2. Покупатель отказался от покупки 


&nbsp; | &nbsp;
-|------ 
Прецедент | Оформление заказа
Идентификатор | ID 2
Краткое описание | Покупатель оформляет заказ на товар, которого нет в наличии
Главные акторы | Покупатель
Второстепенные акторы | Менеджер
Предусловия | Покупатель выбрал товар
Основной поток | 1. Прецедент начинается, когда Покупатель оформляет заказ<br/>2. Менеджер принимает заказ
Альтернативные потоки | нет
Постусловия | 1. Покупатель оставил заказ


<table style="width: 100%;"><tr><td style="width: 40%;">
<a href="../articles/5_1_1_10_uml_use_case.md">Диаграмма вариантов использования
</a></td><td style="width: 20%;">
<a href="../readme.md">Содержание
</a></td><td style="width: 40%;">
<a href="../articles/5_1_1_1_erd2.md">Основы проектирования баз данных.
</a></td><tr></table>