Персональная страничка
Диканева Тараса
Викторовича

Главная \ Преподавательское \ Программирование для начинающих

11. Процедуры и функции

Предыдущий раздел:

Следующий раздел:

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

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

Представьте себе программу, содержащую, например, 1000 строк кода (это еще очень маленькая программа). Обозреть такое количество строк и понять, что делает программа, было бы практически невозможно без процедур.

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

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

Пример: Каркас программы сортировки массивов.

  program ArraySort;
  const
    n = 10;
  type
    TArray = array [0..n-1] of real;
  var
    a: TArray;

  procedure InputArray(var x: TArray); {Процедура для ввода массива}
  procedure PrintArray(x: TArray); {Процедура для вывода массива}
  procedure SortArray(var x: TArray); {Процедура сортировки}

  begin
    InputArray(a);	{Вызов процедуры ввода массива}
    SortArray(a);	{Вызов процедуры сортировки}
    PrintArray(a);	{Вызов процедуры вывода}
  end.

Какие именно инструкции будут выполняться процедурами InputArray, PrintArray и SortArray пока не сказано. Это следующий этап написания программы. Задачу сортировки в свою очередь можно разбить на более простые подзадачи, а именно многократное повторение поиска минимального элемента и постановка его на нужное место (см. раздел 10.5). Эти задачи также можно оформить в виде процедур, создав каркас процедуры SortArray.

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

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

Следующий раздел:

Предыдущий раздел:

Добавить комментарий