Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Safonov / AMPN_course_18.pptx
Скачиваний:
101
Добавлен:
16.04.2015
Размер:
418.81 Кб
Скачать

Общая система типов

Основа многоязыкового

Module Subtitle

программирования

Цели

Мотивация CTS

Обзор типов CTS

Реализация наследования

Безопасность использования типов

Пример многоязыкового взаимодействия

(C) Сафонов В.О. 2012

Содержание

Часть 1: Обзор

Часть 2: Типы и типология

Часть 3: Внутренняя архитектура

Часть 4: Общая картина

(C) Сафонов В.О. 2012

Часть 1. Обзор

Концепция типаКакие сущности имеют типы

Почему необходимо определение и использование типов

(C) Сафонов В.О. 2012

История типов

Важность концепции типаТиповые и бестиповые языки

“Тип – это множество значений, которые может принимсать переменная” (Pascal, 1970)

“Типы – не множества”: абстрактные типы данных (АТД). АТД = представление + набор операций

Языки CLU и ALPHARD (середина 1970-х гг.)

Тип и объект (экземпляр)

Каждый язык имеет свою собственную систему типовРазличные типы на разных платформах

Для многоязыкового взаимодействия необходима общая система типов

(C) Сафонов В.О. 2012

типа

Типы в ООП

Множество значений

Операции, определенные для данного типа (в виде методов)

Основные концепции Common Type System:

Типы различны,

если они имеют различные представления

Типы имеют один и тот же интерфейс, если они отвечают на один и тот же набор сообщений

Типы идентичны

если они имеют одинаковое представление

и отвечают на один и тот же набор сообщений

(C)Сафонов В.О. 2012

 

История: Архитектура компьютера, разработанная Дж. фон

Нейманом (1940-е гг.).

 

Ячейка -> переменная; - до сих пор основной принцип

 

Адреса (Locations)

многих языков программирования

Переменные -> Адреса

Локальные переменныеПараметры

Именованная область памяти

По данному адресу в каждый момент может храниться

только одно значениеАдреса

Тип определяет множество значений, которые могут храниться по данному адресуЗначение должно быть совместимо по присваиванию с

типомТип определяет способы использования переменных

(сигнатуру операций)

(C) Сафонов В.О. 2012

Контракты

Широко используемый термин; в CTS контракт связан с

сигнатурой (в терминах C – с прототипом)

Другая трактовка: Design by Contract (Б. Мейер);

контракты – предположения, условия (require -

предусловие; ensure – постусловие)

Контракт в CTS – спецификация требований к реализации типа

Тип определяет поддерживаемый им набор

контрактов

Контракты – глобально доступные требования к сигнатурам

Сигнатуры определяют ограничения на:

Типа, адреса, параметры, методы и т.д.

Определяют, какие значения могут выдаваться в качестве результата

Задают набор доступных операций

Сигнатуры – части контрактов, подлежащие проверке

Реализация типа может быть верифицирована

(C) Сафонов В.О. 2012

Приведения (Coercions)

История: приведения были введены во все языки

программирования, начиная с языка FORTRAN, -

главным образом, для преобразования простых числовых значений

История: ALGOL 68 – очень сложный набор приведений

и связанных с ними позиций конструкций, над

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

История: C/C++ - упрощенный подход: L_value =

R_value;

Значения, не совместимые по присваиванию, должны

быть приведены к типу переменной (адреса)

CTS: Приведения с расширением (например, float -> double)

Нет потери информации

Обычно реализуются как неявные преобразованияCTS: Приведения с отбрасыванием (например,

double -> float)

Возможна потеря информации

Обычно реализуются как явные преобразования

CTS: Приведение изменяет значение

(C) Сафонов В.О. 2012

Преобразование типа (Casting)

Значение имеет тот же тип, что и адрес (не считая ref или “*”)

Преобразование типа позволяет использовать значения как

имеющие другой тип

История: C/C++ - практически произвольные, бесконтрольные преобразования типов – это небезопасно

Обычно преобразование типов – это операция времени

компиляцииЕсли тип точно извесен во время компиляции

Динамический контроль типов может привести к исключению

Преобразование типов не изменяет значение

Типичный пример из ООП: (AncestorClass) descendant

(C) Сафонов В.О. 2012

Соседние файлы в папке Safonov