AlgStr / Библиотека / ЛЕКЦИИ / PZ00 / Олифиренко Михаил
.docАбстракция. Виды и методы абстракции в программировании.
Абстракция – это отвлечение от всего несущественного с целью лучше понять какую-либо одну строну изучаемого предмета или явления, и в тоже время – это путь к созданию абстрактных понятий.
Первым представлением абстракции была процедура.
Описание процедуры:
Процедура имя(входные данные) return (результирующие данные)
Вызов процедуры:
Имя(фактические параметры)
Выделяют 2 метода абстракции:
-
Абстракция через параметризацию
-
Абстракция через спецификацию
1. Абстракция через параметризацию позволяет нам, используя параметры, представить неограниченный набор различных вычислений одной программой. Абстракция через параметризацию является важным средством повышения универсальности программ.
Пример:
λ xy:int , где - это выражение (λ), а 3 и 5 – параметры (x,y)
2. Абстракция через спецификацию позволяет абстрагироваться от процесса вычислений, описанных в теле процедуры, до уровня знания лишь того, что данная процедура в итоге должна реализовать.
Это достигается снабжением процедуры некоторым описанием, которое называется спецификацией.
Спецификация – это достаточно подробное описание, которое позволяет пользоваться процедурой, не вникая в ее устройство.
Спецификация имеет вид:
Заголовок Имя проц.(вх. данные) (рез. данные)
Тело Requires
Modifies
Effects
Requires – предусловие, необходимые требования для правильной работы
процедуры.
Effects – постусловие. В этой части задаются условия, которые должны быть
истины по завершении данной процедуры, в предположении, что
для данной процедуры было удовлетворено начальное
условие(requires).
Modifies – возможные побочные эффекты и изменения объектов из
предметной области.
Пример:
Sqrt(x:real):real;
Requires: x>=0
Effects:
Виды абстракции
-
Процедурная абстракция
-
Абстракция через данные
-
Абстракция через итерацию
1. Процедурная абстракция.
Процедура выполняет преобразование входных аргументов в выходные результаты, с возможностью модификации входных аргументов.
2. Абстракция через данные.
Общий вид спецификации абстракции данных:
Dname = data type is <список операций>
Описание
<Здесь приводится описание абстракции данных>
Операции
<Здесь приводятся спецификации всех операций, как процедурных
абстракций или абстракций через итерации>
End dname
Рассмотрим упрощенный пример: Наборы чисел
Заголовок Inset = data type is create, member, insert, delete, choose, size,
empty, destroy
Операции
Тело Спецификации всех операций, как процедурных абстракций или
абстракций через итерации
End
Иногда выделяют аксиомы операций для выражения их взаимосвязи. Для нашего примера это могут быть такие аксиомы:
-
size(create(s))=0
-
a:=size(s);
size(delete(s, x)) = a-1, if member(s, x) = true
size(delete(s, x)) = a, if member(s, x) = false
и др.
3. Абстракция через итерацию.
Абстракция позволяет перебирать элементы множественного типа данных удобным и эффективным способом и не нарушает абстракцию через спецификацию.
Абстракция через итерацию позволяет не рассматривать информацию, не имеющую прямого отношения к управляющему потоку или циклу.
Итераторы в Паскале: for i:=1 to n do
for i:=n downto 1 do
Классический итератор имеет вид:
for i in elems(s) do
<<обработка значения i, выданного итератором elems >>