Пошаговая детализация
Структурное программирование до сих пор было у нас представлено как свойство или оценка окончательного текста программы. Необходимо добавить еще один ключевой элемент: методологию, или особенности мыслительного процесса, управляющего проектированием модуля для получения структурной программы. Этот мыслительный процесс, который мы будем сейчас рассматривать, называется пошаговой детализацией [1].
Пошаговая детализация представляет собой простой процесс, предполагающий первоначальное выражение логики модуля в терминах гипотетического языка «очень высокого уровня» с последующей детализацией каждого предложения в терминах языка более низкого уровня, до тех пор пока наконец не будет достигнут уровень используемого языка программирования. На протяжении всего процесса логика выражается основными конструкциями структурного программирования.
Для иллюстрации этого процесса применим его для разработки фрагмента программы имитирующую передачу отсчетов по каналу связи для определения вероятностных и статистических характеристик. Исходная формулировка такова:
(обнуление счетчиков)
While (не достигли максимального числа переданных сообщений) do
Begin
If (вес вектора ошибки меньше кратности исправляемой ошибки)
Then (передача отсчета произошла без искажения, увеличиваем на единицу счетчик правильных передач);
If (вес вектора ошибки больше кратности исправляемой ошибки)
Then (при передаче сообщения произошла ошибка, и поскольку она не была исправлена при декодировании на приемной стороне, увеличиваем на единицу счетчик трансформаций);
Увеличиваем счетчик переданных сообщений:
End;
Очевидно, это первоначальная формулировка выражена на языке, уровень которого существенно выше уровня выбранного нами языка программирования. Следующий шаг состоит в ее детализации. Для этого раскроем содержимое условного оператора if и while:
(обнуление счетчиков)
While N<100000 do
Begin
If (e<=s)
Then (передача отсчета произошла без искажения, увеличиваем на единицу счетчик правильных передач);
If (e>s)
Then (при передаче сообщения произошла ошибка, поэтому она была исправлена при декодировании на приемной стороне, увеличиваем на единицу счетчики правильных передач и исправленных ошибок);
N=N+1;
End;
В качестве третьего шага расшифруем последовательность действий при выполнении условия:
(обнуление счетчиков)
While N<100000 do
Begin
If (e<=s)
Then Cpr=Cpr+1;
If (e>s)
Then Ctrns=CTrns+1;
N=N+1;
End;
Последним шагом расшифруем обнуление всех счетчиков используемых в блоке программы:
N:=0;
Cpr:=0;
Ctrns:=0;
D:=0;
While N<100000 do
Begin
If (e<=s)
Then Cpr=Cpr+1;
If (e>s)
Then Ctrns=Ctrns+1;
N=N+1;
End;
Достоинство пошаговой детализации состоит в том, что она позволяет проектировщику упорядочить свои рассуждения. Альтернативный подход – попытка написать окончательный текст модуля за один шаг – гораздо более сложен и чреват ошибками. Шаги детализации программы – не академические и теоретические рассуждения, а в точности тот метод, которым разрабатывалась данная программа.
Одна из связанных с описанным методом проблем состоит в том, что все варианты, кроме заключительного, по-видимому, тотчас же выбрасываются. Это, похоже, расточительство, поскольку предыдущие шаги фиксировали различные уровни абстракции логики и ход мысли разработчика. Чтобы как-то сохранить информацию об этой работе, исходный вариант следует поместить в качестве комментария перед текстом программы на языке программирования.