- •Информационная модель предметной области
- •Моделирование задач на эвм
- •Преобразование информации при решении задачи на эвм
- •Понятие о данных
- •Абстрактные структуры данных
- •Классификация структур данных
- •14101954
- •Абстракция
- •Лекция 6. Види та методи абстракції в програмуванні. Абстракция через параметризацию
- •Абстракция через спецификацию
- •Виды абстракций
- •Лекция 7. Процедурна абстракція. Специфікація процедурної абстракції. Процедурная абстракция
- •Спецификации
- •Спецификации процедурных абстракций
- •Реализация процедур
- •Более обобщенные процедуры
- •Создание процедурных абстракций
- •Заключение
- •Лекция 8. Абстракція даних Абстракции данных
- •Спецификации для абстракций данных
- •Реализация на языке clu
- •Замечания по поводу операций up и down
- •Использование абстракций данных
- •Лекция 9. Реалізація абстракції даних. Функція абстракції. Функція інваріант подання.
- •Функция абстракции
- •Инвариант представления
- •Сохранение инварианта представления
- •Изменяемые представления
- •Параметризованные абстракции данных
- •Будем искать решение нашей задачи в виде цикла, имеющего следующий вид:
Параметризованные абстракции данных
Типы —выгодные параметры для типов, точно так же, как и для процедур. Например, рассмотрим абстракцию общего набораset, в котором элементы набора могут быть произвольного типа. Конечно, не все типы могут быть имеющими смысл параметрами общего набора. Так как общие наборыsetне хранят дублирующих друг друга элементов, должен быть некий способ определить, дублируют элементы друг друга или нет. Следовательно, спецификацияset, представленная на рис. 4.10,требует, чтобы элементы типа имели операциюequal. Эти требования помещены сразу после заголовка. (Требования на индивидуальные операции также разрешены; об этом мы будем говорить в следующем разделе.)
set = data type [t: type] is create, insert, delete, member, size, choose
Requires t имеет операцию
equal: proctype (t, t) returns (bool), т. e. условие равенства t
Описание
Общие наборы set —неограниченные математические наборы. Эти наборы изменяемые: операцииinsertиdelete , добавляют и уничтожают элементы набора.
Операции
create = proc ( ) returns (set [t ])
effectsВозвращает новый пустой набор
insert = proc (s : set [t], x: t)
modifies s
effectsДобавляетxк элементамs; послеinsertвозвращаетсяSpogi =sU{x},
delete = proc (s: set [t], x: t)
modifies; effects Удаляет x из s (т.е. Spost = s - {x}).
member == proc (s: set [t], x: t) returns (bool)
effectsВозвращаетx єs.
size = proc (s: set [t ]) returns (int)
effectsВозвращает число элементов вs.
choose» proc (s: set [t]) returns (t)
requiresнаборsне пуст
effectsВозвращает произвольный элементs.
endset
Рис. 4,10.Спецификация параметризованной абстракции данных.
Реализация общего набора setпоказана на рис. 4.11.Обратите внимание на предложение where,которое следует за заголовком; это предложение содержит синтаксическую часть предложения requires,которая необходима для контроля типов. Реализация набораsetиспользует тип параметра tкак тип элементов. Таким образом, представление в кластере набораsetесть:
гер =array[tJ
set ^cluster [t: type] is create, insert, delete, member, size, choose
where t has equal: proctype (t, t) returns (bool)
rep = array [t ]
create = proc ( ) returns (cvt) return (rep$new ( )) end create
insert = proc (s: cvt, x: t)
if ~ member (up (s), x) then rep$addh (s, x) end
end insert
delete = proc (s: cvt, x: t)
j: int := getind (s, x)
if j <= rep$high (s) then s [j ] := rep$top (s)
rep$remh (s)
end
end delete
member = proc (s: cvt, x: t) returns (bool)
return (getind (s, x) <= rep$high (s))
end member
size = proc (s: cvt) returns (int)
return (rep$size (s))
end size
choose = proc (s: cvt) returns (t)
return (rep$bottom (s))
end choose
getind = proc (s: rep, x: t) returns (int)
i: int := rep$low (s)
while i <= rep$high (s) do
if x = s [i] then return(i) end
% = короткая форма операции t$equal
i : = i+ I end return (i)
end getind
end set
Рис. 4.11. Реализация общего набораset.
Заголовок же операции insertследующий:
insert = proc (s: cvt, i: t)
Итак, там, где мы раньше использовали целочисленные операции над элементами, теперь мы будем использовать t-операции. Таким образом, в операцииgetindмы используемt$eqiialдля проверки, принадлежит ли данный элемент набору. Заметим, чтоequal —единственная t-операция,используемая в кластере общего набораset.
Для использования процедуры setмы должны задать в качестве параметра тип.
psst =set[poly]
Это законный параметр для процедуры set, так как polyимеет операциюequal. Полученный тип имеет все перечисленные операции, где в каждом случае имя параметра заменено на тип параметра, Например, операции дляpsetвключают в себя:
create = proc ( ) returns (pset)
insert = proc (s: pset, x: poly)
Лекция. Понятие об абстрактных типах данных (А.Т.Д.)
Hовый уровень абстракции в ЯП связан с понятием А.Т.Д. Появился в языках третьего поколения. Hаша цель - помочь программистам в составлении программ высокого
качества, являющихся несложными, легко модифицируемыми и простыми в обращении. Очень небольшая программа может быть представлена одной неделимой единицей. Hо по мере возрастания размеров программы такая монолитная структура становится неудобной.
Лекція Проектирование цикла с помощью инварианта
Розглянемо задачу:
Задача 1. Найти такое i, при котором сумма величин 1 + ½ + 1/3 + … + 1/i впервые станет больше некоторого наперед заданного числа a.
АНАЛИЗ ЗАДАЧИ. Прежде всего выясним, что дано (предусловие P) и, что надо получить (постусловиеQ).
P: Подготовить вещественное числоa.
Q: 1 + ½+ 1/3 + … + 1/i > a & 1 + ½+ 1/3 + … + 1/(i-1) a .
Разработаем стратегию решения задачи: будем последовательно накапливать n-ые частичные суммы, начиная отn=1.
СТРАТЕГИЯ РЕШЕНИЯ ЗАДАЧИ: Последовательное получение величин Sn= 1 + ½ + 1/3 + … + 1/n, начиная отn=1.
Ясно, что решение задачи будет представлять собой цикл с неопределенным количеством повторений. В этом цикле будут последовательно формироваться n-ые частичные суммыSn. Номер частичной суммы будет определяться величинойn. Сформулируем инвариант цикла.
4) ИНВАРИАНТ ЦИКЛА I: <Частичная суммаSn> = 1 + ½ + 1/3 + … + 1/n.