
- •Архитектуры и модели программ и знаний
- •.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

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