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

Common Language

Specification (CLS)

Набор правил (ограничений) для поддержки

совместимости языков – всего определено 47 правил CLS в ECMA-стандарте 2006 г.

Подмножество требований общей сисатемы типов

Достаточно широкое и выразительное

Достаточно узкое для применимости к любому языку

В CLS включены только верифицируемые конструкции

Применимо только к типам, доступным извне сборки

Сборки – субъекты многоязыковой совместимости

Примеры правил CLS:

Чувствительность к регистру для идентификаторам

Идентификатор не должен совпадать с ключевым словом ни одного языка программирования

CTS допускает, чтобы метод в классе имел то же самое имя, что и поле, CLS - нет

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

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

Обзор типов

Типы, определенные в CTS

Части (элементы) типа

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

Типы-значения и типы- ссылки

Типы-значения

Представлены последовательностью битов,

хранящейся по некоторому адресу

Набор примитивных типов; однако структуры

также являются типами-значениями

Типы-ссылки

Представлены адресом и последовательностью битов, хранящейся по данному адресу

Объекты, интерфейсы, указатели, делегаты и др.

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

Примитивные типы-значения

Целочисленные значенияint8, int16, int32, int64

Их беззнаковые аналоги (их нет в Java!)

Десятичное число (decimal) расширенной точности (вспомним PL/1 – 1965!)

decimal (28 десятичных цифр)

Вещественные (плавающие) значенияfloat32, float64

Символы в кодировке Unicode (2 байта)char - аналогично Java

Булевские значения

bool – в противоположность C/C++, в которых булевские значения представлены целыми числами (что ненадежно)

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

Примитивные ссылочные типы

Object

Общий предок всех типов

Допускает полиморфизм для любого типа

String

Может содержать до 231 символов

Является неизменяемым (константным) объектом

Конкатенация строк создает новую строку

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

Boxing и Unboxing

Типы-значения могут быть преобразованы к объекту (boxed) и обратно (unboxed)

Boxing – преобразование значения в объектОсновано на объектном представлении любого типа

Boxing обычно выполняется неявно, в отличие от Java (“классов- оберток”)

Boxing / unboxing не является CLS-совместимой операцией

Java 1.5: Sun решил ввести boxing и unboxing в Java (наряду с классами- обертками)

1 1

1

int Value;

// Boxing

object BoxedValue = Value; // Unboxing

Value = (int)BoxedValue;

Boxed: Unboxed:

Reference Value

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

Перечисления: (red, yellow, green)

Определяет подмножество значений базового типаБазовый тип должен быть одним из целых типов

История: Pascal – каждое перечисление определяет новый тип; яблоки нельзя присваивать апельсинамПоля – статические литералы (константы)

Значения присваиваются компиляторомРазным полям не может быть присвоено одно и

то же значение

Одно из полей помечено как первичное поле

Совместимы по присваиванию с базовым типовОсобая разновидность перечисления: флажки (наборы битов, объединяемые в одном слове)

Паскалевский подход к перечислениям более безопасен

Сравните: перечисления в Java 1.5 - классы (!)

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

Исключения

Обработка исключений – один из наиболее

важных механизмов надежных и безопасных вычислений (наряду с контролем типов)История. CLU (Б. Лисков, MIT, 1974) :

концепция сигнала (signal) – сходна с концепцией исключения. Сигналы обозначаются глобальными идентификаторами:

stack = cluster [t: type] is …

empty

pop = proc (s: cvt) returns (t) signals

… if … then signal empty; …

Сигналы в CLU не были объектамиИстория. C++ (Б. Страуструп, 1989) :

исключения были введены в очередную версию C++ ~ через 10 лет после того, как был разработан язык “C with classes”. В C++ исключения являются объектами

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

Исключения (CTS)

При генерации исключения создается объект

Его класс – потомок класса System.Exception

Особый блок обработки исключений: try

Try-блоки могут быть вложенными

При генерации исключения CLR seeks ищет в стеке текущего потока подходящий для данного исключения обработчик

Четыре вида обработчиков исключений в

.NET CTS:

Catch – обрабатывает исключение данного класса или любого его подкласса

Filter – анализирует, может ли исключение быть обработано, либо оно должно быть передано для обработки следующей записи активации на стеке текущего потока

Fault – исполняется при генерации исключения

Finally – исполняется всегда (“последнее желание”)

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

Делегаты и события

История: Java – события обрабатываются слушателями событий, которые подписываются на получение информации о том, что событие произошло. Данный механизм не является частью языка Java , но введен прежде всего для целей технологии JavaBeans

Делегаты в .NET CTS – многоязыковая концепция. Выражаясь неформально, делегаты – это методы, которым делегируется обработка события.

Делегат это разновидность типа в CTS

Тип делегата должен определять метод Invoke (call-back метод) и (не обязательно) методы BeginInvoke и EndInvoke (которые могут быть использованы для асинхронных вызовов делегата)

Делегат – это объектно-ориентированный, безопасный с точки зрения использования типов аналог указателя функции

Аналогичен указателям функций в C и C++ Использование безопасно, так как это управляемый указатель:

(ссылка на метаданные, ссылка на метод)

Multicast-делегаты могут вызывать более одного метода

Подклассы System.MulticastDelegate

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

MulticastDelegate

СобытияИзменяют состояние объекта

Наблюдатель (observer) регистрирует делегата и событиеГенерация события включает MulticastDelegate

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

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