Лекция №8 Модульное программирование
План
Процедуры и функции
Неявная передача данных в подпрограммы
Явная передача данных в подпрограммы
Открытые массивы и строки
Большие программы обычно разрабатывают и отлаживают по частям. Целесообразно при. этом, чтобы каждая такая часть, называемая подпрограммой, была оформлена так, чтобы ее можно было использовать при решении аналогичной подзадачи в той же программе или даже при решении других задач. В Borland Pascal реализованы два типа подпрограмм: процедуры и функции.
Процедуры и функции
Процедуры и функции представляют собой относительно самостоятельные фрагменты программы, соответствующим образом оформленные и снабженные именем (программные блоки). По правилам Borland Pascal программные блоки – такие же ресурсы, как типы и переменные. Соответственно, они также должны быть описаны перед использованием в разделе описаний программного блока, который их использует (основной программы или вызывающей подпрограммы). Каждый блок имеет такую же структуру, как основная программа, т.е. включает заголовок, раздел описаний и раздел операторов, но заканчивается не точкой, а точкой с запятой (рис. 5.1).
Заголовок блока определяет форму вызова подпрограммы. В разделе описаний блока объявляют внутренние локальные ресурсы блока (переменные, типы, внутренние подпрограммы). Раздел операторов содержит инструкции подпрограммы в операторных скобках begin...end.
Заголовки процедур и функций описываются по-разному. В отличие от процедуры функция всегда возвращает в точку вызова скалярное значение, адрес или строку. Тип возвращаемого результата описывается в заголовке функции (рис. 5.2).
Данные для обработки процедуры и функции получают из вызвавшей их основной программы или подпрограммы. Для размещения рабочих полей подпрограммы могут объявлять новые типы и переменные в собственном разделе описаний. Результаты же они обычно должны возвращать вызвавшей программе или подпрограмме.
Из основной программы данные могут быть получены:
· неявно - с использованием глобальных констант и переменных;
· явно - через параметры.
Неявная передача данных в подпрограммы.
Каждой подпрограмме доступны все ресурсы программного блока, в разделе описаний которого эта подпрограмма объявлена. Ресурсы же основной программы доступны в любой подпрограмме. Они получили название глобальных.
В свою очередь локальные ресурсы, объявленные в разделе описаний подпрограммы, из программного блока, в разделе описания которого она определена, не доступны. В том случае, если в подпрограмме объявляется ресурс, имя которого совпадает с именем глобального ресурса, соответствующий глобальный ресурс в подпрограмме становится недоступным, «перекрывается».
Например, на рис. 5.3 в разделе описаний основной программы объявлена подпрограмма А, в разделе описаний которой объявлена подпрограмма В. Переменная х доступна в обеих подпрограммах, так как она не перекрывается. Переменная z основной программы в подпрограмме А не доступна, так как эта подпрограмма перекрывает глобальную переменную z локальной. В подпрограмме В используется значение z, определенное в подпрограмме А.
Опыт показывает, что неявная передача данных в подпрограммы обычно приводит к большому количеству ошибок, которые достаточно сложно искать, так как неизвестно, какая подпрограмма с какими глобальными ресурсами работает. Кроме того, подпрограммы, использующие глобальные данные, невозможно перенастроить на работу с другими значениями, что сокращает возможности их применения. Поэтому желательно использовать явную передачу значений - через параметры.