-
Notifications
You must be signed in to change notification settings - Fork 0
ООП 06. Модель поведения объектов. Жизненный цикл и диаграмма перехода в состояния (ДПС). Виды состояний. События, данные событий. Действия состояний. Таблица перехода в состояния (ТПС). Правила переходов.
Выделяем поведение объектов, отталкиваясь от реального физического мира. Объекты в течении времени жизни проходят некоторые стадии.
То, как эволюционирует объект между стадиям, характеризует черту поведения объекта.
Любой объект в данный момент времени находится в какой-то стадии.
Объект переходит из одной стадии в другую скачкообразно.
Не все переходы из одной стадии в другую возможны, т.е. есть некие правила переходов.
В физическом мире происходят инциденты, которые заставляют объекты переходить из одной стадии в другую. Или инциденты являются следствием перехода объекта из одной стадии в другую.
Для описания поведения объектов используем модель Мура:
- Множество состояний (стадий) объекта
- Множество событий (инцидентов), приводящих к переходу состояний
- Множество действий состояний
- Правила переходов состояний
Модель состояний можно формализовать таблицей и диаграммой.
Формы жизненных циклов:
- Циркуляционный
- Рождение-смерть
Когда формируются жизненные циклы:
- Создание или уничтожение во время выполнения
- Миграция между подклассами
- Объект производится или возникает поэтапно.
- Объект – задача или запрос
- Динамическая связь. Для пассивных объектов мы не выделяем жизненные циклы. Но иногда мы это делаем в интересах активных объектов.
ДПС - диаграмма переходов состояний.
Строим для каждой сущности.
Каждое состояние рисуем прямоугольником. В пунктирном прямоугольнике находится состояние уничтожения.
Каждому состоянию присваиваем номер и имя состояния.
Состояние – это положение объектов, в котором определяются определённый набор правил, линий поведения, предписаний, определённых законов.
Виды состояний:
-
Состояние создания - в них объект появляется первый раз. В эти состояния происходит переход не из состояния.
-
Текущее состояние (не создания и не заключительное). Их может и не быть в физическом мире.
-
Заключительные состояния:
3.1. Объект уничтожается - состояние рисуем пунктирной линией
3.2. Состояние, из которого объект больше не переходит в другие состояния, но не уничтожается - рисуется как обычное состояние, из которого нет переходов
Чтобы определять текущее состояние, в класс добавляется вспомогательный атрибут - статус, который хранит текущее состояние.
Состояния контекста - промежуточные состояния, которые определяются предыдущим и следующим состояниями. Их цель - организовать этот переход.
Событие – это абстракция инцидента или сигнала в реальном мире. События могут переносить данные.
Переход из одного состояние в другое происходит в результате события.
С каждым состоянием надо связывать действие (обработчик состояния), задача которого - перевести объект в это состояние.
Описание события:
- Значение события - короткая фраза, которая сообщает нам, что происходит с объектом в реальном мире.
- Предназначение - это модель состояний, которое принимает событие, может быть один единственный приёмник, для данного события.
- Метка – уникальная метка должна обеспечиваться для каждого события. Внешние события помечаются буквой «Е».
- Данные события – события переносят данные. Все события, которые переносят объект из одного состояния в другое должны нести его идентификатор.
Действие – это деятельность или операция, которая выполняется при достижении объектом состояния. Каждому состоянию ставится в соответствие одно действие.
Задачи действия:
- Переводить в состояние
- Менять идентификатор статуса
- Выполнять любые вычисления
- Порождать события других объектов своего или другого класса (в том числе для чего-либо вне области анализа нашей подсистемы)
- Работать с таймером - создавать, удалять, считывать, запускать, очищать
- Получать доступ к любым атрибутам любых классов (только на этом этапе формализации!)
Что обязано выполнять действие:
- Гарантировать непротиворечивость объекта - после выполнения действия атрибуты объекта не должны противоречить друг другу.
- При создании и удалении объектов (собственного класса) действие должно позаботиться о связях - чтобы они тоже не были противоречивыми (убиваешь мужа - переведи жену во вдовы).
- Действие должно менять атрибут статуса на то состояние, которому оно соответствует.
Алгоритм действия можно разместить на ДПС непосредственно под действием (если оно в 1-2 строки).
Описание действия - псевдокод.
Если алгоритм большой - выносим его с ДПС.
(!) - Для данного объекта в момент времени может выполняться только одно действие.
(!) - События никогда не теряются.
(!) - Если событие порождено для объекта, который в данный момент выполняет действие, то оно будет принято объектом только после того, как действие будет выполнено. Но терять события нельзя!
(!) - Действия разных объектов могут выполняться одновременно.
(!) - Событие исчезает после того, как оно было принято.
Правила, связывающие состояния и события:
- Все события, которые переводят объект в одно и тоже состояние, должны нести одни и те же данные, т.к. состоянию ставится в соответствие действие, принимающее одни и те же данные. Идентификатор сущности, к которой применяется событие, должен переноситься как данные.
- События, приводящие к созданию объекта, не несут его идентификатор.
- События, переводящие объект из одного состояния в другое, должны нести его идентификатор.
Таблица переходов состояний - таблица, в которой мы устанавливаем правила переходов состояний.
В таблице строка - это состояние, состояния нумеруются. Столбец - это событие.
События могут игнорироваться (но пропускать их нельзя!) - событие не переводит объект в новое состояние. В этом случае ставится '-'.
Если данное событие не может произойти, когда объект находится в данном состоянии, то в ячейке ставится 'x' - желательно, чтобы таких ячеек было минимум или не было, потому что это означает исключительную ситуацию (плохо). Можно выделить ошибочное состояние.
Все атипичные ситуации должны обрабатываться так же, как и типичные.
В таблице все ячейки должны быть заполнены.