Skip to content

ООП6. ООА. Динамическое поведение объектов — жизненные циклы. Понятия состояний, событий и действий.

Winterpuma edited this page Jul 1, 2021 · 2 revisions

Динамическое поведение объектов — жизненные циклы.

Жизненные циклы объектов:

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

Модель состояний Мура:

  1. Множество состояний
  2. Множество событий (инцидентов)
  3. Правила перехода
  4. Действие (для каждого состояний)

Множество состояний задается либо через ДПС и/или ТПС.

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

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

Понятия состояний, событий и действий.

Состояние

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

Виды состояний:

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

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

При составлении модели делают анализ отказов (то есть анализ аномального поведения объекта).

Нужно определить/проверить:

  1. Какой инцидент в реальном мире мог бы вынудить объект к переходу в некорректное состояние.
  2. Гарантируется ли наступление каждого события.
  3. Если событие происходит, то нормально ли это.
  4. Гарантируется ли что событие происходит своевременно (когда объект находится в нужном состоянии).

События

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

Значение события - короткая фраза, которая сообщает нам, что происходит с объектом в реальном мире.

Предназначение - это модель состояний, которое принимает событие, может быть один единственный приёмник, для данного события.

Метка – уникальная метка должна обеспечиваться для каждого события. Внешние события помечаются буквой «Е»

Данные события – данные, сопровождающие событие.

Правила, связывающие события и данные:

  1. Правило тех же данных – все события, которые вызывают переход в определенное состояние, должны нести одни и те же данные.
  2. Правило состояний несоздания – если событие переводит объект из состояния в состояние, то оно должно переносить идентификатор объекта.
  3. Правило состояния создания – событие, переводящее объект в состояние создания, не несёт его идентификатора.

Действия

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

Действие может:

  1. Выполнять любые вычисления
  2. Порождать события для любого объекта любого класса
  3. Порождать события для чего-либо вне области анализа
  4. Выполнять все действия над таймером - создавать\удалять\устанавливать\считывать.
  5. Читать, записывать атрибуты собственного класса и других классов

Еще несколько правил:

  1. Действие не должно оставлять данные противоречивыми.
  2. Действие не должно оставлять противоречивыми связи (если был удалён объект, то нужно позаботиться и об удалении\изменении связанных с ним объектов).
  3. Только одно действие может выполняться в данный момент для конкретного объекта; но для разных – действия могут выполняться одновременно.
Clone this wiki locally