LINUX.ORG.RU

История изменений

Исправление AndreyKl, (текущая версия) :

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

что то я совсем от си далёк похоже. если брать с++, то для меня смысл сказанного ясен, кажется: описываем класс на каждое состояние (можно пустой, лишь бы разный), описываем переходы в виде методов вроде OpenDoor ClosedDoor.openDoor(). Кажется статическая проверка должна работать. Правда это всё нечитаемо особо, потому что будет разбросано по классам. В том смысле что перед глазами удобно видеть некую «таблицу переходов», а тут только пара переходов будет. Но лучше чем ничего. К тому же можно набросать набор фукнций вида

OpenDoor openDoor(ClosedDoor door)
ClosedDoor closeDoor(OpenDoor door)
, а сами классы сделать пустыми. Станет наглядно. Но что ты имеешь ввиду я не улавливаю. Единственное что приходит на ум как то использовать енумы, но не соображу даже как. Можешь проиллюстрировать если есть минутка?

Исходная версия AndreyKl, :

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

что то я совсем от си далёк похоже. если брать с++, то для меня смысл сказанного ясен, кажется: описываем класс на каждое состояние (можно пустой, лишь бы разный), описываем переходы в виде методов вроде OpenDoor ClosedDoor.openDoor(). Кажется статическая проверка должна работать. Правда это всё нечитаемо особо, потому что будет разбросано по классам. В том смысле что перед глазами удобно видеть некую «таблицу переходов», а тут только пара переходов будет. Но лучше чем ничего. К тому же набор фукнций вида

OpenDoor openDoor(ClosedDoor door)
ClosedDoor closeDoor(OpenDoor door)
, а сами классы сделать пустыми. Станет наглядно. Но что ты имеешь ввиду я не улавливаю. Единственное что приходит на ум как то использовать енумы, но не соображу даже как. Можешь проиллюстрировать если есть минутка?