Программирование сверху-вниз

Программирование сверху –вниз –это некоторая многоуровневая дисциплина написания программ. На верхнем уровне, исходный алгоритм представляется в виде иерархической системы, элементы которой описываются на естественном для данной проблемы языке. Каждое такое описание, рассматривается, как последовательность комментариев, заготовок или команд некоторой гипотетической проблемно –ориентированной машины. Каждая команда такой машины моделируется или расписывается командами другой гипотетической машины, более низкого уровня, до команд реальной машины или операторов языка программирования. На рис.18 представлена унифицированная форма организации ПС проектирования ТП. Уровни детализации можно развивать и далее. Проектирование ПС ведется так, что описание системы на верхнем уровне, не зависит от описания блоков на низком уровне. Вся система проектируется и отлаживается по уровням – сверху–вниз. Каждый верхний уровень отлаживается на тестах, полученных и проверенных на предыдущем верхнем уровне. В целом, технология программирования сверху –вниз, позволяет:

1) Начать программирование почти одновременно и параллельно с разработкой алгоритмов;

2) Формально, в виде программы некоторой гипотетической машины, фиксировать каждый этап разработки соответствующего алгоритма;

3) Легко модифицировать программу по уровням, путем замены одной гипотетической машины на другую;


 

       
 
   
 

 

4) Упрощать отладку программ путем рассредоточения ее по уровням и проведения независимо от нижерасположенных уровней детализации.

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

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

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

procedure обработка пакетов

Затем определяются основные шаги обработки пакетов информации:

procedure обработка пакетов;

сортировать записи по управляющим полям;

отделить правильные записи от неправильных и обрабатывать.

endprocedure

С помощью расширения шагов процедуры, выполняется дальнейшее уточнение программы. Причем, если какая-то операция реализуется стандартной программой (уже имеющейся), то она не разбивается на шаги. Например, в нашем случае это операция сортировки. Если же такой стандартной программы нет, то операция уточняется дальше, с целью написания стандартной программы. В процессе уточнения, может появиться необходимость в использовании управляющих структур. Например:

procedure обработка пакетов;

сортировать записи по управляющим полям;

взять первую запись

while не конец (входной файл) do

взять правильную управляющую группу

обработать группу записей

endwhile;

обработать неправильную управляющую группу

endprocedure

В третьих, следует помнить, что на все расширения можно откладывать на более поздний срок. Допустим, что отсортированная информация помещается в файл с последовательным доступом. Если метод доступа к данным на этой стадии проектирования не известен, можно использовать какое-либо нейтральное выражение, такое, как “while еще есть данные do”.

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

procedure обработка пакетов;

сортировать записи по управляющим полям;

взять первую запись

while не конец (входной файл) do

repeat

взять управляющую группу

until найдена правильная группа или конец

файла (входной файл)

обработать заголовок группы;

обработать записи группы;

обработать окончание группы;

endwhile;

обработать неправильную управляющую группу

endprocedure

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

В-пятых, следует на каждом уровне детализации записать в явном виде реализацию некоторого модуля, для которого определены входы, функции и выходы.

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