Повелитель Времени против Таймекс

На одном конце спектра британские машины времени могут путешествовать по вселенной и пересекать эпохи.

С другой стороны, американские машины времени могут дать вам знать, что вам нужно перевернуть гамбургер.

Эта статья является еще одной из серии по теме Frame Machine Notation (FMN), и пришло время показать немного работающего кода. Повелители Времени, которым не хватает времени, могут проверить этот код для реализации последнего примера в этой статье (это очень интересно). Вот предварительный просмотр:

Неторопливые люди, однако, могут работать над этим выдающимся произведением, используя для разогрева пример очень простой машины времени, которая просто задержит вас до конца. Однако, если вы британец, вы, по-видимому, можете просто поставить все наоборот и вернуть свой э-м-и-т.

Античи…

В предыдущих статьях я предвещал введение Frame Visual Notation (FVN) для согласования с диаграммами состояний UML. Пришло время для большого открытия.

Контроллер #AlmostThere ниже показывает одну и ту же спецификацию машины как в FMN, так и в FVN:

Чтобы быть точным, приведенная выше визуальная модель моделирует только блок машины и не имеет встроенного блока интерфейса. Для исправления этой ситуации просто необходимо добавить в модель FMN для интерфейсного блока:

Здесь мы можем видеть эту очень простую машину, идущую от $Begin -> $Delay -> $End. В состоянии $Delay событие ввода |>| создает и запускает таймер. Затем машина ожидает отправки события |timeout|. Когда он приходит, переход в состояние $End запускает выполнение обработчика события |<| (выход), который просто очищает ресурс таймера.

Это чрезвычайно мощный шаблон и одно из основных преимуществ использования машин в качестве логики контроллера для сложных программных систем. Например, для таких языков, как C++, обработчики входа/выхода могут предоставить естественные места для методичной заботы о ручном выделении и освобождении памяти. Для других языков существуют всевозможные ресурсы, не управляемые встроенной сборкой мусора, такие как дескрипторы файлов, коммуникационные сокеты и т. д., для которых обычно нет автоматической помощи. Таким образом, обработчики событий входа/выхода очень полезны для любого языка программирования.

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

Тем не менее, для небольших моделей графическое представление может быстро сориентировать зрителя и быть полезным. Поэтому я буду продолжать развивать визуальную нотацию для тех, кто предпочитает ее, и демонстрировать паритет с диаграммами состояний UML в этом отношении.

…паша!

Теперь давайте взглянем на небольшую, но полную демонстрацию чуть более сложного контроллера задержки, который управляется и управляется пользовательским интерфейсом. Модель FVN показана здесь:

Без лишних слов нажмите здесь для рабочей демонстрации на Codepen. Вы должны увидеть что-то вроде этого:

Хотя будет совершенно ясно, что я не дизайнер, надеюсь, важный момент сделан. В консоли вы можете увидеть вывод журнала, когда контроллер переходит из состояния в состояние. Это демонстрирует обещание Frame тесной связи между текстовой спецификацией, визуальной моделью и реализацией.

Вы можете увидеть полный листинг логики контроллера на этом суть, а также на Codepen.

Вывод

В этой статье демонстрируется ряд ключевых аспектов технологии, которая отличает Frame от других подходов к моделированию. Хотя Frame имеет визуальную нотацию, благодаря точной текстовой нотации FMN это не только язык моделирования программного обеспечения, но, что более важно, язык спецификаций программного обеспечения. Это достигается за счет эквивалентности визуальных моделей, спецификаций текстовой машины и шаблонов реализации эталонного кода.

Кроме того, мы рассмотрели первый из многих мощных архитектурных шаблонов с обработчиками событий входа/выхода и показали механизм его реализации.

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

Статьи по Теме











Автоматы против спагетти-кода
«Макаронный код
— идеальное определение программного обеспечения, которое, по сути, представляет собой когнитивную и эстетическую кашу. Эта статья…medium.com»