ООА. Динамическое поведение объектов, понятия состояний, событий, действий состояний, жизненный цикл. - Painted-Black/BMSTU-OOP GitHub Wiki

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

Многие предметы на протяжение своего существования проходят через отчетливые стадии.

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

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

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

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

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

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

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

Выделяют следующие аспекты события:

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

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

  • Правило тех же данных - все события, которые переводят объект в определенное состояние, должны нести одни и те же данные.
  • Правило состояний несоздания - событие, которое переводит объект из одного состояния в другое, должно нести идентификатор этого объекта.
  • Правило состояния создания - правило, которое приводит к созданию объекта, не несет идентификатора объекта.

Действие - операция, которая должна быть выполнена, чтобы объект перешел в состояние, с которым она связана. Каждому состоянию ставится в соответствие действие. Задача действия - изменить атрибут состояния.

С каждым состоянием связано только одно действие. При формировании ДПС мы стараемся описать действия. Для этого как правило используется псевдокод. Если действие небольшое, то его можно располагать непосредственно под состоянием на диаграмме, если большое – то выносим. Что может выполнять действие: любые вычисления; порождать событие для любого объекта любого класса; порождать событие для чего-либо вне области анализа; выполнять все работы с таймером – создавать/удалять/устанавливать/считывать. Действие может иметь доступ к любым атрибутам любого объекта, как своего так и всех других – читать, записывать.

На выполнение действия накладываются ограничения:

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

Что может делать действие:

  • Читать и записывать атрибуты самого объекта, других объектов своего класса, других объектов любого класса.
  • Порождать события для самого себя.
  • Порождать события ддля чего-либо все данной системы.
  • Любая работа с таймером.

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

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

В каких случаях надо выделять жизненные циклы (совокупности состояний)?

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