Skip to content

ООП 06. Модель поведения объектов. Жизненный цикл и диаграмма перехода в состояния (ДПС). Виды состояний. События, данные событий. Действия состояний. Таблица перехода в состояния (ТПС). Правила переходов.

Dmitriy Pisarenko edited this page Jun 15, 2023 · 2 revisions

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

Выделяем поведение объектов, отталкиваясь от реального физического мира. Объекты в течении времени жизни проходят некоторые стадии.

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

Любой объект в данный момент времени находится в какой-то стадии.

Объект переходит из одной стадии в другую скачкообразно.

Не все переходы из одной стадии в другую возможны, т.е. есть некие правила переходов.

В физическом мире происходят инциденты, которые заставляют объекты переходить из одной стадии в другую. Или инциденты являются следствием перехода объекта из одной стадии в другую.

Для описания поведения объектов используем модель Мура:

  • Множество состояний (стадий) объекта
  • Множество событий (инцидентов), приводящих к переходу состояний
  • Множество действий состояний
  • Правила переходов состояний

Модель состояний можно формализовать таблицей и диаграммой.

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

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

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

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

  1. Создание или уничтожение во время выполнения
  2. Миграция между подклассами
  3. Объект производится или возникает поэтапно.
  4. Объект – задача или запрос
  5. Динамическая связь. Для пассивных объектов мы не выделяем жизненные циклы. Но иногда мы это делаем в интересах активных объектов.

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

Строим для каждой сущности.

Каждое состояние рисуем прямоугольником. В пунктирном прямоугольнике находится состояние уничтожения.

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

image-5

Состояние. Виды состояний

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

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

  1. Состояние создания - в них объект появляется первый раз. В эти состояния происходит переход не из состояния.

  2. Текущее состояние (не создания и не заключительное). Их может и не быть в физическом мире.

  3. Заключительные состояния:

    3.1. Объект уничтожается - состояние рисуем пунктирной линией

    3.2. Состояние, из которого объект больше не переходит в другие состояния, но не уничтожается - рисуется как обычное состояние, из которого нет переходов

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

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

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

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

Переход из одного состояние в другое происходит в результате события.

С каждым состоянием надо связывать действие (обработчик состояния), задача которого - перевести объект в это состояние.

Описание события:

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

Действия состояний

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

Задачи действия:

  1. Переводить в состояние
  2. Менять идентификатор статуса
  3. Выполнять любые вычисления
  4. Порождать события других объектов своего или другого класса (в том числе для чего-либо вне области анализа нашей подсистемы)
  5. Работать с таймером - создавать, удалять, считывать, запускать, очищать
  6. Получать доступ к любым атрибутам любых классов (только на этом этапе формализации!)

Что обязано выполнять действие:

  1. Гарантировать непротиворечивость объекта - после выполнения действия атрибуты объекта не должны противоречить друг другу.
  2. При создании и удалении объектов (собственного класса) действие должно позаботиться о связях - чтобы они тоже не были противоречивыми (убиваешь мужа - переведи жену во вдовы).
  3. Действие должно менять атрибут статуса на то состояние, которому оно соответствует.

Алгоритм действия можно разместить на ДПС непосредственно под действием (если оно в 1-2 строки).

Описание действия - псевдокод.

Если алгоритм большой - выносим его с ДПС.

(!) - Для данного объекта в момент времени может выполняться только одно действие.

(!) - События никогда не теряются.

(!) - Если событие порождено для объекта, который в данный момент выполняет действие, то оно будет принято объектом только после того, как действие будет выполнено. Но терять события нельзя!

(!) - Действия разных объектов могут выполняться одновременно.

(!) - Событие исчезает после того, как оно было принято.

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

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

  1. Все события, которые переводят объект в одно и тоже состояние, должны нести одни и те же данные, т.к. состоянию ставится в соответствие действие, принимающее одни и те же данные. Идентификатор сущности, к которой применяется событие, должен переноситься как данные.
  2. События, приводящие к созданию объекта, не несут его идентификатор.
  3. События, переводящие объект из одного состояния в другое, должны нести его идентификатор.

Таблица переходов состояний - таблица, в которой мы устанавливаем правила переходов состояний.

В таблице строка - это состояние, состояния нумеруются. Столбец - это событие.

События могут игнорироваться (но пропускать их нельзя!) - событие не переводит объект в новое состояние. В этом случае ставится '-'.

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

Все атипичные ситуации должны обрабатываться так же, как и типичные.

В таблице все ячейки должны быть заполнены.

Clone this wiki locally