Подпрограммы

Подпрограммы

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

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

[x]. R1 Каждая задача допускает простую спецификацию. Точнее, возможно охарактеризовать каждую отдельную задачу небольшим набором входных и выходных параметров.

[x]. R2 Задачи четко отличаются одна от другой, поскольку подход, основанный на подпрограммах, не позволяет воспользоваться возможной сколько-нибудь существенной их общностью - за исключением повторного использования некоторых конструкций.

[x]. R3 Отсутствуют сложные структуры данных, которые пришлось бы распределять между использующими их подпрограммами.

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

[x]. Подпрограмма поиска существует в одном варианте. Но тогда, чтобы охватить все возможные ситуации, ей потребуется длинный список аргументов и она окажется очень сложной.

[x]. Подпрограмм поиска много, каждая из которых относится к конкретному случаю и отличается от других лишь немногими деталями. Нарушается требование Факторизации Общего Поведения; возможные пользователи легко могут заблудиться в неразберихе подпрограмм.

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

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

ЛЕКЦИЯ № 4. Подпрограммы

Из книги Информатика и информационные технологии: конспект лекций автора Цветкова А В

ЛЕКЦИЯ № 4. Подпрограммы 1. Параметры подпрограмм В описании процедуры или функции задается список формальных параметров. Каждый параметр, описанный в списке формальных параметров, является локальным по отношению к описываемой процедуре или функции, и в модуле,


Атрибуты и подпрограммы

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Атрибуты и подпрограммы Любой абстрактный тип данных и POINT в частности характеризуется набором функций, описывающих операции применимые к экземплярам АТД. В классе, реализующем АТД, функции становятся компонентами (features) - операциями, применимыми к экземплярам класса.В


3. Процедуры и функции (подпрограммы)

Из книги Конец холивара. Pascal vs C автора Кривцов М. А.

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


Стандартные подпрограммы

Из книги Язык программирования ABC PASCAL автора Цветков Александр Станиславович

Стандартные подпрограммы Общие подпрограммы procedure Swap<T>(var a, b: T); Меняет местами значения двух переменных function Milliseconds: integer; Возвращает количество миллисекунд с момента начала работы программы function MillisecondsDelta: integer; Возвращает количество миллисекунд с


Общие подпрограммы

Из книги автора

Общие подпрограммы procedure Swap<T>(var a, b: T); Меняет местами значения двух переменных function Milliseconds: integer; Возвращает количество миллисекунд с момента начала работы программы function MillisecondsDelta: integer; Возвращает количество миллисекунд с момента начала работы


Подпрограммы ввода-вывода

Из книги автора

Подпрограммы ввода-вывода procedure Read(a,b,...); Вводит значения a,b,... с клавиатуры procedure Readln(a,b,...); Вводит значения a,b,... с клавиатуры и осуществляет переход на следующую строку function ReadInteger: integer; Возвращает значение типа integer, введенное с клавиатуры function ReadReal:


Подпрограммы для работы с пером

Из книги автора

Подпрограммы для работы с пером Рисование линий осуществляется текущим пером. Доступ к свойствам текущего пера можно осуществлять как в процедурном, так и в объектно-ориентированном стиле.Процедуры и функции для доступа к свойствам пера сгруппированы парами: если Prop -


Подпрограммы для работы с кистью

Из книги автора

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


Подпрограммы для работы со шрифтом

Из книги автора

Подпрограммы для работы со шрифтом Вывод текста осуществляется текущим шрифтом. Доступ к свойствам текущего шрифта можно осуществлять как в процедурном, так и в объектно-ориентированном стиле.Процедуры и функции для доступа к свойствам шрифта сгруппированы парами:


Подпрограммы блокировки рисования

Из книги автора

Подпрограммы блокировки рисования procedure Redraw; Перерисовывает содержимое графического окна. Вызывается в паре с LockDrawing procedure LockDrawing; Блокирует рисование на графическом окне. Перерисовка графического окна выполняется с помощью Redraw procedure UnlockDrawing; Снимает


Подпрограммы режимов рисования

Из книги автора

Подпрограммы режимов рисования procedure SetSmoothing(sm: boolean); Устанавливает режим сглаживания procedure SetSmoothingOn; Включает режим сглаживания procedure SetSmoothingOff; Выключает режим сглаживания function SmoothingIsOn: boolean; Возвращает True, если режим сглаживания установлен procedure


Тема №9. Подпрограммы-функции

Из книги автора

Тема №9. Подпрограммы-функции При решении сложных задач разумно разбить алгоритм на несколько более простых составляющих. В языке Pascal существуют специальные средства для этого – подпрограммы. Есть два вида подпрограмм: процедуры и функции. Функция получает информацию


Тема №10. Подпрограммы-процедуры

Из книги автора

Тема №10. Подпрограммы-процедуры Для выполнения каких-либо действий (а не вычислений значений) существуют подпрограммы-процедуры. Они также могут принимать параметры, как и подпрограммыфункции. Давайте сразу проиллюстрируем работу процедуры на примере графической