
- •Архитектуры и модели программ и знаний
- •.NET Framework
- •Common Language Runtime. Цели:
- •Common Language Runtime
- •Common Language Runtime Сборки (assemblies)
- •Common Language Runtime
- •Common Language Runtime
- •Common Language Runtime
- •Common Language Runtime
- •Common Language Runtime
- •Common Language Runtime
- •Windows Forms
- •Пример (J. Prosise):
- •GUI, создаваемый при исполнении примера Windows Forms
- •Web Forms
- •Web Forms
- •Web Forms
- •ADO.NET – обработка данных
- •Языки:
- •Общая система типов
- •Цели
- •Содержание
- •Часть 1. Обзор
- •История типов
- •типа
- •Контракты
- •Приведения (Coercions)
- •Преобразование типа (Casting)
- •Common Language
- •Часть 2: Типы и типология
- •Типы-значения и типы- ссылки
- •Примитивные типы-значения
- •Примитивные ссылочные типы
- •Boxing и Unboxing
- •Перечисления: (red, yellow, green)
- •Исключения
- •Исключения (CTS)
- •Делегаты и события
- •Атрибуты
- •Способы применения атрибутов
- •Часть 3. Внутренняя структура
- •Элементы типов 1/2
- •Элементы типов 2/2
- •Имена в CTS
- •Видимость и доступ
- •Наследование типов
- •Наследование элементов типа
- •Часть4: Пример многоязыкового наследования (Microsoft)
- •Класс “Father” на Visual Basic.NET
- •Резюме
- •Сборки
- •Цели
- •Содержание
- •Часть 1. Обзор
- •Что такое сборка
- •Статические и динамические сборки
- •Сборки
- •Зависимости
- •Зависимости типов
- •Сборки и пространства имен
- •Сборки, часть 2: Концепции и элементы
- •Манифест – стандартные элементы
- •Манифест – пользовательские элементы
- •Многофайловые сборки
- •Версии
- •Многоверсионное
- •безопасность сборки
- •Полные имена сборок
- •Утилита поддержки полных имен
- •Присваивание полного имени
- •Отложенное присваивание
- •Использование сборок с полными именами
- •Инструменты для развертывания сборок и управления ими
- •Ассемблер: ilasm
- •Дизассемблер: ildasm
- •Инсталляция
- •Преимущества GAC
- •Управление сборками во время
- •Загрузка сборки
- •Области приложений (Application Domains)
- •Оптимизации сборок во время
- •Just-In-Time (JIT) -
- •Предкомпиляция (PreJITting) с помощью утилиты ngen
- •Резюме
- •Вопросы и домашнее задание к лекции 18

Общая система типов
Основа многоязыкового
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