ооп 6. Модель поведения объектов. Жизненный цикл и диаграмма перехода в состояния (ДПС). Виды состояний. События, данные событий. Действия состояний. Таблица перехода в состояния (ТПС). Правила переходов. - keykranz/oop_ex GitHub Wiki
Модель поведения объектов.
Можно выделить сущности, которые появляются, проходят через определенные стадии и прекращают свое существование. Таким образом можно представить мир через изменение состояния объектов. То, как эволюционирует объект между стадиями, характеризует черту поведения этого объекта.
- Объекты в течении времени жизни проходят некоторые стадии.
- То, как эволюционирует объект между стадиями, характеризует черту поведения объекта. (Любой объект в данный момент времени находится в какой то стадии)
- Реальный объект может находится только в одной стадии в любой момент времени
- Эволюция от стадии к стадии происходит скачкообразно
- В схеме поведения не все эволюции между стадиями разрешены (Человек Лежать -> Встать -> Идти)
- В реальном мире существуют инциденты, которые побуждают объекты переходить из одной стадии в другую (т.е. эволюционировать), и которые являются следствием перехода объекта из одной стадии в другую
Модель Мура
Для описания поведения объектов используется модель Мура. Можно оформить или диаграммой, или таблицей. (ДПереходовСостояний/ТПереходовСостояний) Включает в себя:
- множество состояний объекта (стадий)
- множество инцидентов (переводят объект из одной стадии в другую) (событий)
- множества действий (связываем с состоянием)
- правила перехода
Жизненный цикл и диаграмма перехода в состояния (ДПС).
Жизненный цикл
Каждый объект имеет четко определенный жизненный цикл. Можно выделить два четких важных этапа: Построение, Уничтожение
Формы жизненных циклов:
- Циркуляционный
- Рождение-смерть
Когда формируются жизненные циклы:
- создание и уничтожение объекта во время выполнения
- миграция между подклассами
- накопление атрибутов. С изменением значения атрибута меняется поведение объекта (человек в зависимости от возраста изменяет поведение)
- операционный цикл оборудования (лифт, станок)
- объект производится поэтапно (сборка машины на конвейере)
- если возникают объекты с жизненным циклом, и мы хотим реализовать асинхронную схему взаимодействия, то задача или запрос – тоже имеют жизненный цикл.
- динамические связи. Формализуется ассоциативным объектом, и для него выделяется свой жизненный цикл. Объект, являющийся таким «результатом» связи, стоит на более высоком уровне, лучше осведомлен о состоянии системы. Для пассивных объектов мы не выделяем жизненные циклы. Но иногда мы это делаем в интересах активных объектов.
- если для какого-то объекта мы выделили цикл, но он имеет безусловную связь с другим объектом (пассивным), то жизненный цикл нужно выделить и для этого пассивного объекта.
Диаграмма перехода в состояния
ДПС - диаграмма переходов состояний. Состояние на этой диаграмме рисуется прямоугольником.
Каждому состоянию мы присваиваем:
- уникальный номер
- имя состояния
К выделению МоделиСостояний мы подходим как к формализации асинхронного взаимодействия – происходит инцидент, в результате него объекты меняют состояния. Смена состояния может происходить не мгновенно, а через какое-то время после.
Виды состояний. События, данные событий. Действия состояний.
Cостояние – положение объекта, в котором применяется определенный набор правил, линий поведения, физических законов и т.д..
Можно выделить три вида состояний:
- создание - объект появляется в первый раз (может быть несколько). Возникает событие, но не происходит перехода.
- заключительное – 1) объект переходит через стадии и приходит в состояние, из которого других переходов нет; 2) объект уничтожается при переходе в это состояние (рисуется пунктирной линией).
- текущее
Событие – абстракция инцидента или сигнала в реальном мире, которая сообщает о том, что что-либо переходит в новое состояние.
Выделяют четыре аспекта событий:
- значение – короткая фраза, которая сообщает что происходит с объектом.
- предназначение – модель состояний, которую принимает событие. Приёмник должен быть один.
- уникальная метка – как правило буква (ключевой литерал сущности/МС) и номер. Если событие внешнее, то помечается буквой Е
- данные события – данные, сопровождающие событие. Каждому состоянию ставится в соответствие действие, которое должно произойти по событию. Событие должно перевести данные для выполнения этого действия.
- идентифицирующие данные
- дополнительные данные
Существует ряд правил, связывающих события и данные:
- Правило тех же данных – все события, которые вызывают переход в определенное состояние, должны нести одни и те же данные.
- Правило состояний несоздания – если событие переводит объект из состояния в состояние, то оно должно переносить идентификатор объекта.
- Правило состояния создания – событие, переводящее объект в состояние создания, не несёт его идентификатора. Модель скачкообразная. Плавный переход из состояния в состояние можно формализовать несколькими промежуточными состояниями в модели.
Действие – операция, которая должна быть выполнена объектом когда он достигает некоего состояния.
С каждым состоянием связано только одно действие. Для описания действий обычно используют псевдокод. Действие может иметь доступ к любым атрибутам любого объекта, как своего так и всех других – читать, записывать.
Что может выполнять:
- любые вычисления
- порождать событие для любого объекта любого класса
- порождать событие для чего-либо вне области анализа
- выполнять все работы с таймером – создавать\удалять\устанавливать\считывать
Ограничения:
- действие не должно оставить данные противоречивыми.
- действие не должно оставлять противоречивыми связи (если был удалён объект, то нужно позаботиться и об удалении\изменении объектов с ним связанных).
- только одно действие может выполняться в данный момент для конкретного объекта; но для разных – действия могут выполняться одновременно.
События могут откладываться до тех пор, пока не будет выполнено действие. Каждое событие прекращается, когда оно «перестаёт быть» событием.
Таблица перехода в состояния (ТПС). Правила переходов.
С помощью ТПС мы контролируем, какие возможны переходы из одного состояния в другое. В ТПС каждая строка - это состояние, в котором может находиться объект, столбец - это событие. Состояния нужно не забыть пронумеровать, у каждого состояния есть свой уникальный номер.
Варианты заполнения ячеек:
- В какое состояние объект перейдет в результате возникновения события в этом состоянии? В ячейке пишем номер состояния, в которое переходит объект.
- У нас может быть ситуация, когда событие игнорируется, то есть в этом состоянии объект игнорирует событие. Событие происходит - никакого перехода не происходит. В этом случае мы ставим прочерк.
- Еще одно возможное заполнение ячейки (лучше чтобы их не было) - данное событие не может произойти, если объект находится в этом состоянии. Ставим крестик (не плюсик).