Структурирование программы
Символьные эквиваленты адресов данных
Любые данные для обработки должны быть размещены в ОЗУ. Самые первые системы программирования требовали указания численных адресов данных – т.е. номеров ячеек памяти, в которых размещались данные. В сложных программах таких адресов оказывались сотни и тысячи. Для работы с ними составлялись специальные таблицы и, тем не менее, ошибок было достаточно много. Дело в том, что для человека легко понимаемый смысл имеют надписи, а не числа.
Поэтому очень скоро от численных адресов перешли к их символьным эквивалентам. Каждое данное получало символьное имя – набор букв и цифр, начинающийся с буквы. Это имя называлось идентификатором. Компилятор или транслятор сам отводил для данных нужные места в памяти и устанавливал соответствие численных адресов их символьным эквивалентам. Разумеется, в начале текста программы потребовалось ввести раздел описания данных.
На начальном этапе развития искусства создания программного продукта текст программы представлял собой набор строк никак не разделяемых на функционально законченные части. Текст таких программ трудно понимался, был плохо обозрим и еще хуже модифицируем в случае необходимости. Процесс отладки таких программ был достаточно труден из-за поиска мест возникновения ошибок и фрагментов, подлежащих коррекции в процессе отладки программы.
Первым средством структурирования программы были подпрограммы – фрагменты программ, начинающиеся меткой и заканчивающиеся обычно словом Return (возврат). Сославшись на метку можно было вызвать нужную подпрограмму, а затем вернуться к продолжению текста программы (рис. 1.1). На рис. 1.1 показаны строки программы, содержащие некоторые команды и подпрограмма, начинающаяся словом МЕТКА и заканчивающаяся словом Return. Стрелками показаны вызов подпрограммы i-й строкой (передача управления на метку) и возврат на продолжение выполнения программы в естественном порядке после выполнения подпрограммы (передача управления на i+1-ю строку). В качестве метки может выступать любой набор букв и цифр, обычно начинающийся с буквы.
Значительным шагом вперед было появление блочных структур – фрагментов программы, имеющих заголовок и точку выхода из блочной структуры. Войти внутрь блочной структуры можно только "через заголовок", а выйти только через стандартную точку выхода. Дальнейшим развитием блочных структур явились процедуры и функции, выполняющие функционально законченные действия. Внутрь этих блоков можно передавать данные через так называемые списки формальных параметров и аргументов. Появление процедур и функций позволило повысить обозримость программ и облегчить их понимание. Примеры описания и применения процедур и функций показаны на рис. 1.2, 1.3.
![]() | |||
![]() | |||
|
Процедуры обычно определяют значения нескольких данных в ОЗУ или совсем не определяют данных. Например, нам необходимо нарисовать множество окон – прямоугольных областей. Можно создать процедуру рисования окна с именем 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 Имя_Процедуры (список параметров)
< Команды процедуры (тело процедуры)>