Пошаговая детализация

 

Структурное программирование до сих пор было у нас представлено как свойство или оценка окончательного текста программы. Необходимо добавить еще один ключевой элемент: методологию, или особенности мыслительного процесса, управляющего проектированием модуля для по­лучения структурной программы. Этот мыслительный процесс, который мы будем сейчас рассматривать, называется пошаговой детализацией [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;

 

Достоинство пошаговой детализации состоит в том, что она позво­ляет проектировщику упорядочить свои рассуждения. Альтернативный подход – попытка написать окончательный текст модуля за один шаг – го­раздо более сложен и чреват ошибками. Шаги детализации программы – не академические и теоретические рассуждения, а в точности тот метод, ко­торым разрабатывалась данная программа.

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