Структурирование программы

Символьные эквиваленты адресов данных

Любые данные для обработки должны быть размещены в ОЗУ. Самые первые системы программирования требовали указания численных адресов данных – т.е. номеров ячеек памяти, в которых размещались данные. В сложных программах таких адресов оказывались сотни и тысячи. Для работы с ними составлялись специальные таблицы и, тем не менее, ошибок было достаточно много. Дело в том, что для человека легко понимаемый смысл имеют надписи, а не числа.

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

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

Первым средством структурирования программы были подпрограммы – фрагменты программ, начинающиеся меткой и заканчивающиеся обычно словом Return (возврат). Сославшись на метку можно было вызвать нужную подпрограмму, а затем вернуться к продолжению текста программы (рис. 1.1). На рис. 1.1 показаны строки программы, содержащие некоторые команды и подпрограмма, начинающаяся словом МЕТКА и заканчивающаяся словом Return. Стрелками показаны вызов подпрограммы i-й строкой (передача управления на метку) и возврат на продолжение выполнения программы в естественном порядке после выполнения подпрограммы (передача управления на i+1-ю строку). В качестве метки может выступать любой набор букв и цифр, обычно начинающийся с буквы.

Значительным шагом вперед было появление блочных структур – фрагментов программы, имеющих заголовок и точку выхода из блоч­ной структуры. Войти внутрь блочной структуры можно только "че­рез заголовок", а выйти только через стандартную точку выхода. Дальнейшим развитием блочных структур явились процедуры и функ­ции, выполняющие функционально закончен­ные действия. Внутрь этих блоков можно передавать данные через так называемые списки формальных параметров и аргументов. Появление процедур и функций позволило повысить обозри­мость программ и облегчить их понимание. Примеры описания и применения процедур и функций показаны на рис. 1.2, 1.3.

       
   
 
 
Строка программы №1 Строка программы №2 . . . Строка программы № i Строка программы № i+1 . . . МЕТКА: Строка подпрограммы № 1 . . . Строка подпрограммы № n Return Рис. 1.1. Схема работы подпрограммы

 


Процедуры обычно определяют значения нескольких данных в ОЗУ или совсем не определяют данных. Например, нам необходимо нарисовать множество окон – прямоугольных областей. Можно создать процедуру рисования окна с именем RisOkno и передать в нее параметры:

· X,Y – координаты левого верхнего угла

· L,H – ширина и высота

· С – номер цвета фона окна по таблице кодировки цветов.

Последовательность имен параметров X,Y,L,H,C и будет списком параметров, передаваемых внутрь процедуры. Для рисования конкретного окна, в частности, с координатами левого верхнего угла 10,5, шириной 50, высотой 20 и номером цвета фона 15 (белый) достаточно вызвать процедуру call RisOkno(10,5,50,20,15).

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

описание процедуры:

sub Имя_Процедуры (список параметров)

< Команды процедуры (тело процедуры)>