ооп 6. Модель поведения объектов. Жизненный цикл и диаграмма перехода в состояния (ДПС). Виды состояний. События, данные событий. Действия состояний. Таблица перехода в состояния (ТПС). Правила переходов. - keykranz/oop_ex GitHub Wiki

Модель поведения объектов.

Можно выделить сущности, которые появляются, проходят через определенные стадии и прекращают свое существование. Таким образом можно представить мир через изменение состояния объектов. То, как эволюционирует объект между стадиями, характеризует черту поведения этого объекта.

  • Объекты в течении времени жизни проходят некоторые стадии.
  • То, как эволюционирует объект между стадиями, характеризует черту поведения объекта. (Любой объект в данный момент времени находится в какой то стадии)
  • Реальный объект может находится только в одной стадии в любой момент времени
  • Эволюция от стадии к стадии происходит скачкообразно
  • В схеме поведения не все эволюции между стадиями разрешены (Человек Лежать -> Встать -> Идти)
  • В реальном мире существуют инциденты, которые побуждают объекты переходить из одной стадии в другую (т.е. эволюционировать), и которые являются следствием перехода объекта из одной стадии в другую

Модель Мура

Для описания поведения объектов используется модель Мура. Можно оформить или диаграммой, или таблицей. (ДПереходовСостояний/ТПереходовСостояний) Включает в себя:

  • множество состояний объекта (стадий)
  • множество инцидентов (переводят объект из одной стадии в другую) (событий)
  • множества действий (связываем с состоянием)
  • правила перехода

Жизненный цикл и диаграмма перехода в состояния (ДПС).

Жизненный цикл

Каждый объект имеет четко определенный жизненный цикл. Можно выделить два четких важных этапа: Построение, Уничтожение

Формы жизненных циклов:

  • Циркуляционный
  • Рождение-смерть

Когда формируются жизненные циклы:

  • создание и уничтожение объекта во время выполнения
  • миграция между подклассами
  • накопление атрибутов. С изменением значения атрибута меняется поведение объекта (человек в зависимости от возраста изменяет поведение)
  • операционный цикл оборудования (лифт, станок)
  • объект производится поэтапно (сборка машины на конвейере)
  • если возникают объекты с жизненным циклом, и мы хотим реализовать асинхронную схему взаимодействия, то задача или запрос – тоже имеют жизненный цикл.
  • динамические связи. Формализуется ассоциативным объектом, и для него выделяется свой жизненный цикл. Объект, являющийся таким «результатом» связи, стоит на более высоком уровне, лучше осведомлен о состоянии системы. Для пассивных объектов мы не выделяем жизненные циклы. Но иногда мы это делаем в интересах активных объектов.
  • если для какого-то объекта мы выделили цикл, но он имеет безусловную связь с другим объектом (пассивным), то жизненный цикл нужно выделить и для этого пассивного объекта.

Диаграмма перехода в состояния

ДПС - диаграмма переходов состояний. Состояние на этой диаграмме рисуется прямоугольником.

Каждому состоянию мы присваиваем:

  • уникальный номер
  • имя состояния

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


Виды состояний. События, данные событий. Действия состояний.

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

Можно выделить три вида состояний:

  • создание - объект появляется в первый раз (может быть несколько). Возникает событие, но не происходит перехода.
  • заключительное – 1) объект переходит через стадии и приходит в состояние, из которого других переходов нет; 2) объект уничтожается при переходе в это состояние (рисуется пунктирной линией).
  • текущее

Событие – абстракция инцидента или сигнала в реальном мире, которая сообщает о том, что что-либо переходит в новое состояние.

Выделяют четыре аспекта событий:

  • значение – короткая фраза, которая сообщает что происходит с объектом.
  • предназначение – модель состояний, которую принимает событие. Приёмник должен быть один.
  • уникальная метка – как правило буква (ключевой литерал сущности/МС) и номер. Если событие внешнее, то помечается буквой Е
  • данные события – данные, сопровождающие событие. Каждому состоянию ставится в соответствие действие, которое должно произойти по событию. Событие должно перевести данные для выполнения этого действия.
    • идентифицирующие данные
    • дополнительные данные

Существует ряд правил, связывающих события и данные:

  • Правило тех же данных – все события, которые вызывают переход в определенное состояние, должны нести одни и те же данные.
  • Правило состояний несоздания – если событие переводит объект из состояния в состояние, то оно должно переносить идентификатор объекта.
  • Правило состояния создания – событие, переводящее объект в состояние создания, не несёт его идентификатора. Модель скачкообразная. Плавный переход из состояния в состояние можно формализовать несколькими промежуточными состояниями в модели.

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

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

Что может выполнять:

  • любые вычисления
  • порождать событие для любого объекта любого класса
  • порождать событие для чего-либо вне области анализа
  • выполнять все работы с таймером – создавать\удалять\устанавливать\считывать

Ограничения:

  • действие не должно оставить данные противоречивыми.
  • действие не должно оставлять противоречивыми связи (если был удалён объект, то нужно позаботиться и об удалении\изменении объектов с ним связанных).
  • только одно действие может выполняться в данный момент для конкретного объекта; но для разных – действия могут выполняться одновременно.

События могут откладываться до тех пор, пока не будет выполнено действие. Каждое событие прекращается, когда оно «перестаёт быть» событием.


Таблица перехода в состояния (ТПС). Правила переходов.

С помощью ТПС мы контролируем, какие возможны переходы из одного состояния в другое. В ТПС каждая строка - это состояние, в котором может находиться объект, столбец - это событие. Состояния нужно не забыть пронумеровать, у каждого состояния есть свой уникальный номер.

Варианты заполнения ячеек:

  • В какое состояние объект перейдет в результате возникновения события в этом состоянии? В ячейке пишем номер состояния, в которое переходит объект.
  • У нас может быть ситуация, когда событие игнорируется, то есть в этом состоянии объект игнорирует событие. Событие происходит - никакого перехода не происходит. В этом случае мы ставим прочерк.
  • Еще одно возможное заполнение ячейки (лучше чтобы их не было) - данное событие не может произойти, если объект находится в этом состоянии. Ставим крестик (не плюсик).