AlgStr / Библиотека / ЛЕКЦИИ / PZ01 / Процедурная абстракция
.docПроцедурная абстракция
Процедура выполняет преобразование входных аргументов в выходные результаты с возможной модификацией входных аргументов. Процедуры используют абстракцию через параметризацию и спецификацию и позволяют абстрагировать какие-то действия. Преимуществом этого является то, что абстракция представляет собой некоторый способ отображения того, что находится в самой процедуре, делая ее проще для понимания и использования.
В абстракции через параметризацию мы абстрагируемся от конкретных используемых данных. Эта абстракция определяется в терминах формальных параметров.
Фактические данные связываются с этими параметрами в момент использования такой абстракции.
При этом несущественным являются конкретные значения параметров, а существенными – их количество, типы, последовательность. Все это задается в заголовке любой процедуры.
Параметризация позволяет обобщить модули, делая их полезными в большем количестве случаев, следовательно, уменьшается текст программы, а значит и объем последующих модификация.
В абстракции через спецификацию мы фокусируем внимание на особенностях, от которых зависит использование абстракции, и абстрагируемся от подробностей реализации этих особенностей.
Абстракция через спецификацию наделяет программиста двумя свойствами:
-
локальностью: реализация одной абстракции может быть создана или рассмотрена без необходимости анализа реализации какой-либо другой абстракции, следовательно, имеется возможность составлять программы, созданные разными людьми независимо друг от друга.
-
модифицируемость: упрощает модификацию программы.
Отличие процедуры от математической функции:
-
процедура может иметь побочный эффект;
-
процедура может иметь исключительные ситуации;
-
процедура может обладать собственными значениями;
-
процедура может зациклиться (следовательно, область определения может определяться PostFactum);
-
процедура может выдавать неопределенные значения (значения, которые не принадлежат данному классу);
-
процедура может менять некоторые глобальные данные.
Итак, процедура – это та же математическая функция, у которой область определения часто скрыта и отображает из множества входных аргументов во множество выходных аргументов.
Общий вид спецификации процедурной абстракции:
pname = proc (<спис. вх. арг.>) returns (<спис. вых. арг.>) signals (<спис. искл. сит.>)
requires: <необходимые требования, при которых программист, реализующий данную процедуру, может гарантировать ее правильное выполнение>
modifies: <список входных аргументов, которые могут изменяться>
effects: <общий эффект вызова процедуры, то, что получится>
end pname