122
ГЛАВА 3. ПРОГРАММИРОВАНИЕ С ПТИЧЬЕГО ПОЛЕТА
планиравания разработки программ и их документирования. Традиционные
блок-схемы являются,в частности, предметом изучения в теоретическом про-
граммировании (см. книги Котова [44, 45]).
Таблицы переходов концептуально противоречат такому фундаменталь-
ному понятию программирования, как присваивание. В блок-схеме произ-
вольной формы исключительно трудно проследить,как будет изменяться зна-
чение переменной,какие существуют зависимости между данными перемен-
ными, и так далее. Попробуйте, например, разобраться в такой уродине, как
схема на рис. 3.3.
Заметим, что, операции в программировании от состояний глобальны, а
условия локальны. Проверка условия не изменяет состояния всей системы
(ни одного из ее параметров или характеристик), она лишь ведет нас в то или
иное состояние самой программы.
Это подтверждает и анализ практических систем, для моделирования ко-
торых удобно применять программирование от состояний. Например, откры-
вание или закрывание одного вентиля в трубопроводной системе изменяет
все потоки в системе, а проверка, открыт ли вентиль, является чисто локаль-
ной операцией. Изменение температуры рабочего вещества в системе опять-
таки влияет на все ее характеристики, а измерить эту температуру можно,
сняв показания всего одного датчика.
Здесь мы сталкиваемся с необходимостью четко различать внешние поня-
тия, описывающие систему, которая связана с решаемой программой зада-
чей, и внутренние понятия самой программы. Для системы в целом безраз-
личны состояния автомата, который ее моделирует либо взаимодействует с
ней.Для нее важно, какие изменения в ней самой происходят. Таким образом,
состояние памяти вычислительной системы вполне может рассматриваться
как внешняя характеристика по отношению к программе, которая в ней ра-
ботает.
Необходимость одновременного и согласованного рассмотрения внеш-
них и внутренних характеристик приводит к тому, что, когда внутренние ха-
рактеристики раздробляются и детализируются (например, при соединении
стиля программирования от состояний с присваиваниями), программист на-
чинает путаться, согласованность понятий исчезает и возникают ошибки.
Внимание!
Если пользоваться произвольными таблицами переходов,то надо позаботить-
ся о том, чтобы присваивания встречались как можно реже, в идеале обой-
тись без них совсем, либо присваивать лишь значения переменным, которые
немедленно после этого используются в качестве основания для выбора в