- •Понятие данных
- •Информация и данные. Понятие о структурах данных. Информационная модель объекта
- •Понятие о данных
- •Понятие о структурах данных
- •Структуры данных и их классификация (списки, таблицы, деревья, сети).
- •Таблицы
- •Деревья
- •Понятие о типе данных в языках программирования
- •14101954
- •6. Понятие о типе данных в языках программирования (яп).
- •Декомпозиция и абстракция, их применение в программировании.
- •Абстракция и декомпозиция. Их взаимодействие при проектировании программ.
- •Абстракция – это отвлечение от всего несущественного с целью лучше понять какую-либо одну строну изучаемого предмета или явления, и в тоже время – это путь к созданию абстрактных понятий.
- •15. Реализация абстракций данных . Функция абстракции. Операции Up и Down.
- •Функция абстракции
- •Функция инвариант представления
- •Сохранение инварианта представления
- •Анализ программ, не содержащих ветвлений
- •Если p{ а }q иQ{ b }r, то выполняется p{ a;b }r.
- •P{ a;b }r.
- •Проектирование цикла с помощью инварианта Задача 1. Найти сумму величин 1/I от 1 до тех пор, пока она не станет больше некоторого наперед заданного числа a.
- •Будем искать решение нашей задачи в виде цикла, имеющего следующий вид:
Сохранение инварианта представления
Для того чтобы продемонстрировать корректность реализации типа, мы должны, в частности, показать, что инвариант представления сохраняется для всех законных объектов представления. Мы можем сделать это следующим образом. Прежде всего мы покажем, что инвариант сохраняется для объектов, возвращаемых операциями, которые возвращают объект типа, но не имеют аргументов типа. Для всех других операций мы можем предположить, что при их вызове инвариант сохраняется для всех аргументов, являющихся объектами типа; тогда мы должны показать, что он сохраняется при возврате как для аргументов типа, так и для возвращаемых объектов типа.
Например, реализация набора intset имеет инвариант
для всех целых i, j, таких, что low (r) < i < j <high (r) : r [i] <> r [j]
Операция intset$create отвечает этому инварианту потому, что заново созданный массив пуст. Операция member также сохраняет этот инвариант, так как мы знаем, что инвариант сохраняется для аргумента s и что эта операция не модифицирует s. Операция insert также сохраняет инвариант, так как
1) инвариант сохраняется для ее аргумента s при обращении;
2) при вызове операции member из операции insert инвариант сохраняется потому, что он сохраняется в операции member;
3) операция insert добавляет х к s, только если выражение member (s, х) имеет значение true; следовательно, так как набор s удовлетворяет инварианту при вызове, он также удовлетворяет инварианту после добавления к нему х.
=============================== Дзыгин =======================================
21. Абстракция через итерацию и ее спецификация.
Итератор - абстракция, скрывающая подробности перебора элементов какой-то структуры данных.
Итератор осуществляет перебор компонентов множественного набора данных, удобным и эффективным способом и при этом не нарушает абстракцию через спецификацию, то есть позволяет не вдаваться в представление типа. Он позволяет решить проблемы экономии памяти и времени.
Смысл абстракции через итерацию – итератор позволяет отделить проблему перебора элементов от реализации этого перебора.
Тип данных может иметь несколько итераторов.
В некоторых языках программирования итератор является встроенной языковой конструкцией. В языке CLU итератор взаимодействует с циклом for и используется в следующих конструкциях:
for each <для элемента i, возвращаемого итератором А>
do <<выполнить над i некоторое действие D>>
Спецификация итератора имеет вид:
Iname = iter (<список входных параметров>)
gields (<список результатов, выдаваемых итератором>)
signals (<результаты, возвращаемые по исключительной ситуации>)
requires (<задаются требования входным параметрам>)
modifiers (<список входных параметров, которые могут быть изменены при работе
итератора >)
effects (<описывается общий эффект применения итератора>)
end Iname
Очень важным является понятие генератора.
Генератор – это способ моделирования итератора.
Генератор реализуется как объект, который содержит четыре основных метода (Create, Done, Iter, Destroy)
Они реализуют элементы цикла, позволяющего производить итерирование (в скобках указано имя метода, которых выполняет данную операцию).
1) Подготовка цикла ( Create )
2) Условие продолжения цикла ( Done )
3) Тело цикла ( Iter )
4) Модификатор цикла ( Iter )
5) Завершение работы генератора (Destroy )
К примеру, на языке Паскаль генератор типа данных ATD может описываться так
Generator_ATD = Object
Private
<Поля, необходимые для реализации генератора>
Public
Procedure Create(A : ATD);
Procedure Iter(Var Rezult : ATD_Elem);
Function Done : Boolean;
Procedure Destroy;
End;
============================================================================
Логические спецификации
(или введение в верификацию программ)
Верификация программы предполагает анализ ее текста. Это отличает верификацию от тестирования, при котором всегда производятся наблюдения за вычислениями. В процессе верификации мы анализируем текст программы и делаем выводы по поводу описываемого набора вычислений (но никогда не создаем этот набор или его часть, хотя часто ссылаемся на этот набор для подтверждения правильности наших рассуждений).