- •Информационная модель предметной области
- •Моделирование задач на эвм
- •Преобразование информации при решении задачи на эвм
- •Понятие о данных
- •Абстрактные структуры данных
- •Классификация структур данных
- •14101954
- •Абстракция
- •Лекция 6. Види та методи абстракції в програмуванні. Абстракция через параметризацию
- •Абстракция через спецификацию
- •Виды абстракций
- •Лекция 7. Процедурна абстракція. Специфікація процедурної абстракції. Процедурная абстракция
- •Спецификации
- •Спецификации процедурных абстракций
- •Реализация процедур
- •Более обобщенные процедуры
- •Создание процедурных абстракций
- •Заключение
- •Лекция 8. Абстракція даних Абстракции данных
- •Спецификации для абстракций данных
- •Реализация на языке clu
- •Замечания по поводу операций up и down
- •Использование абстракций данных
- •Лекция 9. Реалізація абстракції даних. Функція абстракції. Функція інваріант подання.
- •Функция абстракции
- •Инвариант представления
- •Сохранение инварианта представления
- •Изменяемые представления
- •Параметризованные абстракции данных
- •Будем искать решение нашей задачи в виде цикла, имеющего следующий вид:
Абстракция
Процесс абстракции может быть рассмотрен как некоторое обобщение. Он озволяет нам забыть об информации и, следовательно, рассматривать различные предметы так, как если бы они были эквивалентны. Мы выполняем это в надежде упростить наш анализ, отделяя существенные атрибуты от несущественных. Однако при этом важно знать, что критерий такого отделения во многом зависит от контекста. В контексте школьного курса мы учимся абстрагировать от (8/3)*3 и 5+3к понятию, представленному числом 8.В дальнейшем мы узнаем, что при работе на большинстве вычислительных машин такая абстракция приводит к неприятностям.
Например, рассмотрим структуру, приведенную на рис. 1.1. Понятием здесь является «млекопитающие». Все млекопитающие обладают определенными общими характеристиками. Например, все женские особи этого класса вырабатывают молоко. На таком уровне абстракции мы фокусируемся именно на этих общих характеристиках и игнорируем различия между существующими видами млекопитающих.
На нижнем уровне абстракции мы сосредоточиваем свое внимание на конкретных представителях семейства млекопитающих. В этом случае мы можем абстрагироваться, рассматривая не отдельных представителей или даже особей, а группы родственных особей, например, приматов или грызунов. Здесь опять мы рассматриваем общие характеристики, например тот факт, что все приматы носят своих детенышей, а не отличия между, скажем, человеком и шимпанзе. Эти отличия остаются существенными и на более низких уровнях абстракции.
Млекопитающие
... Приматы Грызуны ...
Обезьяна Человек
Рис. 1.1.Иерархия абстракций.
Иерархия абстракций, показанная на рис. 1.1,относится к вполне определенной области зоологии, однако она приложима также и к другим областям этой науки. Более машинно-ориентированным примером, весьма полезным при составлении большей части программ, является концепция «файла». Файлы абстрагированы от конкретного носителя, реализуя долговременное и постоянно доступное хранилище поименованных единиц. Операционные системы отличаются по способам работы с файлами. Например, структура имен файлов может меняться от системы к системе. Изменяется также и способ их размещения на устройствах внешней памяти.
В дальнейшем мы рассмотрим различные виды абстракций и общие принципы применения их в программах. Наиболее существенным достижением в этой области является на сегодняшний день развитие языков высокого уровня. Имея дело непосредственно с конструкциями языка высокого уровня, а не с различными наборами машинных инструкций, в которые данные конструкции могут быть транслированы, программист существенно упрощает свой труд.
В последние годы программистов перестал удовлетворять уровень абстракции, достигаемый в программах, написанных даже на языке высокого уровня. Рассмотрим, например, фрагмент программы на рис. 1.2.
found := false found := false
i :== lowbound (a) i := highbound (a)
while i<highbound (a) + 1 do while i>lo-wbound (a) - 1 do
if a [i] = e then z := i if a [i]=e then z := i
found := true found := true
end end
i:= i+ 1 i:= I - 1
end end
Рис. 1.2.Два фрагмента программы.
На уровне абстракции, определенном использованным языком высокого уровня, очевидно, что приведенные фрагменты отличаются друг от друга: если е присутствует в а, то первый фрагмент отыскивает индекс его первого вхождения, а второй —индекс последнего вхождения. Первая программа устанавливаетiвhigh-bound(а) + 1,а вторая —вlowbound (1) — 1.Обе программы, однако, были написаны для выполнения одной и той же функции: установить вfoundзначениеfalse, если е отсутствует в а, а в противном случае установить вfoundtrueи в z—индекс вхождения е в а. Если нам необходимо выполнение именно этого требования, то становится очевидным, что приведенные фрагменты программ не находятся на требуемом уровне абстракции.
Одним из подходов к решению такой проблемы является создание языков «очень высокого уровня», реализованных на базе некоторого фиксированного набора относительно обобщенных универсальных структур данных и мощном наборе примитивов, используемых для манипуляции с ними. Например, рассмотрим язык, в котором имеются примитивыis_inиindex_of, позволяющие осуществлять соответствующие операции над массивами. Тогда рассматриваемая задача легко реализуется следующим образом:
found := is_in (a, e)
if found then z := index_of (a, e) end
Недостатком такого подхода является предположение о том, что разработчик языка включит в него большинство абстракций, которые могут понадобиться пользователю. Предвидеть все возможные ситуации довольно затруднительно. Однако, даже если это и удалось бы сделать, получившийся язык содержал бы столь много встроенных абстракций, что работа с ним стала бы невозможной.
Альтернативой может быть создание таких языковых механизмов, которые позволяют программисту создавать свои собственные абстракции по мере необходимости. Наиболее распространенным механизмом такого рода является использованиепроцедур.Разделяя в программе тело процедуры и обращения к ней, язык высокого уровня реализует тем самым два важных метода абстракции:абстракция через параметризациюиабстракция через спецификацию.
Абстракция - это не только отвлеченное понятие, отвлеченное от чего-то несущественного и поэтому позволяющее лучше отразить суть дела, но и инструмент познавательной деятельности, приводящий к абстрактным понятиям. Поэтому имеет смысл говорить о средствах абстракции в ЯП, которые сами являются средствами понимания и построения алгоритмов и обмена мыслями и результатами между программистами. Именно развитие средств абстракции в ЯП и привело к созданию аппарата А.Т.Д. в ЯП.