Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

AlgStr / Библиотека / ЛЕКЦИИ / PZ01 / Процедурная абстракция

.doc
Скачиваний:
35
Добавлен:
23.03.2015
Размер:
27.14 Кб
Скачать

Процедурная абстракция

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

В абстракции через параметризацию мы абстрагируемся от конкретных используемых данных. Эта абстракция определяется в терминах формальных параметров.

Фактические данные связываются с этими параметрами в момент использования такой абстракции.

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

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

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

Абстракция через спецификацию наделяет программиста двумя свойствами:

  1. локальностью: реализация одной абстракции может быть создана или рассмотрена без необходимости анализа реализации какой-либо другой абстракции, следовательно, имеется возможность составлять программы, созданные разными людьми независимо друг от друга.

  2. модифицируемость: упрощает модификацию программы.

Отличие процедуры от математической функции:

  1. процедура может иметь побочный эффект;

  2. процедура может иметь исключительные ситуации;

  3. процедура может обладать собственными значениями;

  4. процедура может зациклиться (следовательно, область определения может определяться PostFactum);

  5. процедура может выдавать неопределенные значения (значения, которые не принадлежат данному классу);

  6. процедура может менять некоторые глобальные данные.

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

Общий вид спецификации процедурной абстракции:

pname = proc (<спис. вх. арг.>) returns (<спис. вых. арг.>) signals (<спис. искл. сит.>)

requires: <необходимые требования, при которых программист, реализующий данную процедуру, может гарантировать ее правильное выполнение>

modifies: <список входных аргументов, которые могут изменяться>

effects: <общий эффект вызова процедуры, то, что получится>

end pname