\documentclass[a4paper,fontsize=14bp]{article}

\input{../common-preamble}
\input{../fancy-listings-preamble}
\input{../bmstu-preamble}
\usepackage{tikz-uml}
\usepackage{pgfopts}
\usepackage{pgfkeys}

\usetikzlibrary{positioning, math}
\numerationTop

\begin{document}
\thispagestyle{empty}
\makeBMSTUHeader

% ... работе, номер, тема, предмет, ?а, кто
\makeReportTitle{лабораторной}{3}{Анализ поведения систем и их компонентов}{Методы исследования и моделирования информационных процессов и систем}{а}{А.Р. Кадырбаева}
\newpage
\thispagestyle{empty}
\tableofcontents
\newpage
\pagestyle{fancy}
\section{Цель}
Ознакомление студентов с методами и средствами анализа поведения систем и их компонентов, выраженного при помощи диаграмм UML.
\section{Задание}
В данной лабораторной работе необходимо ознакомиться с основами стандарта fUML, расширяющего возможности UML, а также освоить применение основанных на использовании этого стандарта программных средств, позволяющих производить анализ диаграмм UML. В таблице \hrf{table:task} представлено индивидуальное задание.
\begin{table}[H]
  \centering
  \begin{tabular}{|c|p{100mm}|p{30mm}|} 
    \hline
    Вариант & Задание & Количество вопросов для верификации \\ [0.5ex] 
    \hline
    11 & Работа копирайтера. Определяем поведение состояний «Выполнение работы», «Оплата работы», «Поиск работы», «Заключение контракта», «Невозможность оплаты заказа», «Невозможность выполнения заказа» & 5 \\ [1ex] 
    \hline
  \end{tabular}
  \caption{Задание по варианту}
  \label{table:task}
\end{table}
\section{Выполнение работы}
\begin{figure}[h]
  \centering
  \begin{tikzpicture}[yscale=-1]
    \umlstateinitial[x=-4, y=-6, name=initial]
    \umlbasicstate[x=-3, name=search, entry=мораль-, exit=мораль+]{Поиск работы}
    \umlbasicstate[x=6, y=-3, name=failExec, entry=мораль-, exit=опыт+]{\shortstack{Невозможно\\выполнение}}
    \umlbasicstate[x=-3, y=5, name=contract, exit=опыт+, entry=мораль+]{Контракт}
    \umlbasicstate[x=-3, y=10, name=exec, exit=опыт+, entry=мораль+]{\shortstack{Выполнение\\работ}}
    \umlbasicstate[x=6, y=10, name=pay, exit=мораль+, entry=мораль+]{Оплата работы}
    \umlbasicstate[x=-3, y=15, name=failAward, exit=опыт+, entry=мораль-]{\shortstack{Невозможна\\оплата}}

    \umltrans[]{initial}{search}
    \umlVHtrans[pos=1.5, arg=Недостаток компетенций]{search}{failExec}
    \umlVHtrans[arg=Возврат к поиску]{failExec}{search}
    \umltrans[pos=0.5, arg=Найдена работа по силам]{search}{contract}
    \umltrans[pos=0.5, arg=Приступаем к работе]{contract}{exec}
    \umltrans[pos=0.5, arg=Нормальный процесс]{exec}{pay}
    \umlVHtrans[arm1=-30mm, pos=1, arg=Попробовать с тем же работодателем]{pay}{contract}
    \umlVHtrans[arm1=-20mm, arg=Выйти на рынок]{pay}{search}
    \umltrans[pos=0.5, arg=Форс-мажор]{exec}{failAward}
    \umlHVHtrans[arm1=-20mm]{failAward}{search}
    \umlHVHtrans[arm1=-40mm, pos=0.7, arg=Неудача]{contract}{search}
  \end{tikzpicture}
  \caption{Диаграмма конечного автомата по заданию}
  \label{pic:fsm}
\end{figure}

По заданию необходимо описать диаграмму состояний агента - копирайтера, осуществляющего свою трудовую деятельность. У агента, согласно задания, возможно шесть состояний:
\begin{enumerate}
\item Поиск работы - состояние, в котором агент осуществляет непосредственный просмотр вакансий;
\item Невозможно выполнение - состояние, в котором агент осуществляет повышение квалификации. В него можно попасть только в результате неудачного поиска (недостаточно компетенций), из него можно выйти только в состояние поиска работы;
\item Контракт - заключение контракта с работодателем, сюда можно попасть только после поиска работы или после успешной оплаты предыдущей работы. Выход из состояния возможен в состояние выполнения работ или если стороны не смогли договориться;
\item Выполнение работы - единственное состояние, которое возможно после заключения контракта. В общем случае, в результате выполнения работы происходит переход в состояние оплаты, а в случае возникновения форс-мажорных ситуаций в состояние невозможности оплаты;
\item Оплата работы - состояние в котором возможно оказаться только в результате выполнения работ. Из этого состояния возможно попытаться заключить с работодателем новый контракт или начать новый поиск работы;
\item Невозможна оплата - состояние, возникающее только в силу форс-мажорных ситуаций и может вести только к инициированию нового поиска работы.
\end{enumerate}

Диаграмма конечного автомата по заданию представлена на рисунке \hrf{pic:fsm}. 

\section{Выводы}
Диаграммы конечных автоматов UML можно использовать для моделирования поведения класса, подсистемы, пакета или системы целиком. Диаграммы состояний предоставляют наглядный способ моделирования взаимодействия или коммуникации, которые происходят внутри внешних объектов и системы. Эти диаграммы используются для моделирования систем, основанных на событиях. Состояние объекта контролируется и изменяется с помощью события. Диаграммы состояний используются для описания изменения состояний объекта в прикладной системе.

\end{document}



