Лекция 10 (Лекции (2009) (Саша Федорова)), страница 2

2019-09-19СтудИзба

Описание файла

Файл "Лекция 10" внутри архива находится в папке "Лекции (2009) (Саша Федорова)". Документ из архива "Лекции (2009) (Саша Федорова)", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Онлайн просмотр документа "Лекция 10"

Текст 2 страницы из документа "Лекция 10"

Modula-2. Абстрактный тип данных соответствует скрытому типу данных в Modula-2. Что это?

Показывать структуру очень плохо. А ели плохо – то мы ее и не будем показывать

DEFINITION MODULA Stacks;

TYPE Stack; //вот так определяется скрытый тип данных

Далее повторяем все заголовки, к примеру:

PROCEDURE PUSH(VAR S: STACK, X: T);

И на Modula-2, и на Оберон пример не совсем полон. Для полноты в начале определения надо импортировать тип Т. Вот так:

DEFINITION MODULA Stacks;

FROM MyTypes IMPORT T; //возможность получить доступ к типу, который описан в другом модуле

TYPE Stack; //вот так определяется скрытый тип данных

Далее повторяем все заголовки, к примеру:

PROCEDURE PUSH(VAR S: STACK, X: T);

……………..

Добавим еще и процедуру разрушения стека:

PROCEDURE Destroy(VAR S: Stack);

END STACKS

В Аде все гибче, а, следовательно, сложнее. В качестве типа Т мы там будем писать родовой модуль стеков (настраиваемый модуль).

Продемонстрировали возможность инкапсуляции. Однако все не так хорошо, как кажется:

  • недоступно определение соответствующего типа. Никому

Пусть у нас есть главный модуль:

MODULE Main;

IMPROT stacks;

………..

VAR S: stacks. Stack;

C точки зрения языка Оберон все будет очень просто:

DEFINITION Stacks;

TYPE Stack

RECORD

……….

END;

PROCEDURE PUSH(………..)

END stacks;

В Turbo Pascal:

unit

interface

implementation

//сначала описываем все заголовки, а потом – реализацию.

Замечание (о минимизации затрат на трансляцию – не знаю, надо ли было записывать это)

stdafx.h – модуль проекта, в который рекомендуется помещать все include-ы, которые мы менять не будем.

Если в Турбо Паскаль поменять комментарии к интерфейсу, перекомпиляции не произойдет: компилятор генерирует таблицы и посимвольно сравнивает их (реально оттранслированный файл состоит из двух частей: таблицы символов и объектного кода). Такой же принцип использует и язык Оберон. Данная тактика позволяет лишний раз не транслировать весь код проекта.

А минимизация затрат на трансляцию очень важна (тут многое, конечно, зависит от скорости трансляции – но в проектах с миллионами строк кода она может занимать несколько суток).

50-100 тысяч строк кода транслируется несколько часов.

Можно как угодно менять реализацию, и перетранслировать проект не надо – нужно только все пересобрать (перекомпоновать).

Как сделать язык программирования так, чтобы такие конструкции были возможны? Для этого надо выбрать стандартный размер и стандартный набор операций. Ограничение: предполагается, что он реализован либо типом INTEGER, либо типом POINTER(и если мы хотим, например, завести стек, то можно использовать для реализации только INTEGER и POINTER:

TYPE STACK = POINTER

To Srack_Rec;

Stack_Rec= RECORD

………………

END

Является ли это нарушением? Нас заставляют работать в пределах АТД (абстрактного типа данных), а он заставляет работать с объектами из динамической памяти (а все объекты у нас и без того в динамической памяти  наверное, несильное ограничение.)

В современных языках программирования разделять таблицу символов и объектный код не стали.

А вот в Аде это разделение присутствует.

В Аде присутствуют:

  • приватный тип данных (тип, у которого структура данных скрыта от пользователя)

  • ограниченный приватный тип данных

Идея Ады: за счет увеличения расходов на перетрансляцию компилятор знает все.

Общая схема:

package M

………………….

private

………….//компилятор сразу видит всю информацию необходимую для реализации – важно для компилятора и для разработчика

end M;

package stacks is

type Stack is private;

//……повторяем все заголовки

private: //приватная часть

описание всех приватных структур данных

type Stack is record top: integer:=0;

………

end record;

end stacks

Использование:

Use stacks;

: Stack;

push(S, a);

pop(S, b);

Как только мы меняем интерфейс, все надо перекомпилировать заново (ведь в любом модуле могла быть функция из этого интерфейса, которая поменялась) полный rebuild проектаснижается эффективность.

Для приватного типа данных, если он допустим соответствующим определением, допустимы операции:

  • присваивания

  • сравнения на равенство и неравенство

Язык Ада, таким образом, заставляет пользователя инкапсулировать все типы данных.

Приватный тип данных в Аде – не совсем абстрактный тип данных, т. к. Есть спецификации:

Modula-2:

type T is limited private;

…………………………………

private:

type T;

70-80-е годы – Барбара Лисков разработала теорию абстрактных типов данных.

По виду структуры нельзя сказать, как с ней работать. Для Абстрактного Типа Данных набор операций

  • не должен зависеть от реализации

  • должен полностью описывать семантику

Абстрактный тип данных – это тип данных, который вводился как набор операций, связанных некоторыми отношениями.

Аксиоматическая теория абстрактного типа данных – теория абстрактного типа данных в смысле математической логики.

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

Доказательное программирование

Началось в 60-е годы Эдсгером Дейкстрой, активно развивалось в 70-80-е годы. В 90-х годах, в связи с появлением объектно-ориентированных языков программирования, было забыто. Однако программирование сверхсложных систем без элементов доказательного программирования, как показала практика, невозможно.

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5301
Авторов
на СтудИзбе
417
Средний доход
с одного платного файла
Обучение Подробнее