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

AlgStr / Библиотека / ЛЕКЦИИ / PZ00 / Олифиренко Михаил

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

Абстракция. Виды и методы абстракции в программировании.

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

Первым представлением абстракции была процедура.

Описание процедуры:

Процедура имя(входные данные) return (результирующие данные)

Вызов процедуры:

Имя(фактические параметры)

Выделяют 2 метода абстракции:

  1. Абстракция через параметризацию

  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. Абстракция через данные

  3. Абстракция через итерацию

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

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

2. Абстракция через данные.

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

Dname = data type is <список операций>

Описание

<Здесь приводится описание абстракции данных>

Операции

<Здесь приводятся спецификации всех операций, как процедурных

абстракций или абстракций через итерации>

End dname

Рассмотрим упрощенный пример: Наборы чисел

Заголовок Inset = data type is create, member, insert, delete, choose, size,

empty, destroy

Операции

Тело Спецификации всех операций, как процедурных абстракций или

абстракций через итерации

End

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

  1. size(create(s))=0

  2. 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 >>