Основные понятия Технологии .NET
Платформа Java
Платформа Microsoft.NET (.NET Framework)
CLS (Common Language Specification)
Основные правила общей спецификации языков:
CLR (Common Language Runtime)
Задачи CLR (Common Language Runtime)
Компоненты CLR
FCL (.NET Framework Class Library)
FCL (.NET Framework Class Library)
MSIL (Microsoft Intermediate Language/ IL – Intermedia Language)
МЕТАДАННЫЕ
МЕТАДАННЫЕ: ФУНКЦИИ
Исполняемый модуль
Элементы управляемого модуля
Управляемый модуль
Управляемые данные
Сборка (Assembly)
Виды сборок
Манифест (manifest)
JIT- компилятор (just in time – в нужный момент)
Схема взаимодействия между исходным кодом, компилятором .NET и механизмом выполнения .NET.
Связь между исходным кодом, компилятором и механизмом выполнения .NET
Общая система типов CTS
Назначение общеязыковой спецификации CLS
Языки программирования, которые поддерживают технологию .NET
Структура среды выполнения CLR
Выводы
Пространство имен
Пространство имен
Пространство имен
Пространство имен
В чем отличие между пространством имен и именем сборки?
Как вывести содержимое сборок, пространств имен и типов в MS Visual Studio?
РАЗВЕРТЫВАНИЕ И ИЗОЛЯЦИЯ ПРИЛОЖЕНИЙ
Варианты развертывания .NET приложения
Домен приложения
СБОРКА МУСОРА
Сборка мусора
БЕЗОПАСНОСТЬ
Безопасность .NET
Верификация кода
продолжение
Стандарты
Ядро системы типов .NET
Ядро системы типов .NET
1.45M
Категория: ПрограммированиеПрограммирование

Основные понятия Технологии .NET

1. Основные понятия Технологии .NET

ОСНОВНЫЕ ПОНЯТИЯ
Технологии .NET

2.

3.

4.

5.

6. Платформа Java

Краеугольным
камнем
платформы
Java
является
виртуальная машина, которая отвечает за независимость
Java-программ от операционных систем и аппаратных
платформ.
Набор инструкций этой виртуальной машины (так
называемый Java byte-code) может выполняться как на
специализированных Java-процессорах, так и путем
компиляции в исполняемый код конкретной аппаратной
платформы.

7. Платформа Microsoft.NET (.NET Framework)

Microsoft.NET (.NET Framework) – программная
платформа.
Платформа
.NET
Framework
предоставляет
комплексную модель программирования для создания
всех типов приложений, от мобильных и вебприложений до классических приложений.
Содержит следующие основные компоненты:
the common language runtime (CLR)
the .NET Framework class library (.NET FCL)

8.

Список версий .NET Framework

9. CLS (Common Language Specification)

Или
общая
программирования.
спецификация
языков
Это набор конструкций и ограничений, которые
являются руководством для создателей библиотек и
компиляторов в среде .NET Framework. Библиотеки,
построенные в соответствии с CLS, могут быть
использованы из любого языка программирования,
поддерживающего CLS. Языки, соответствующие CLS
(к их числу относятся языки Visual C#, Visual Basic,
Visual C++), могут интегрироваться друг с другом.
CLS – это основа межъязыкового взаимодействия в
рамках платформы Microsoft.NET.

10. Основные правила общей спецификации языков:

Спецификация распространяется только на доступные извне части
экспортируемых из библиотеки типов. То, что остается внутри
библиотеки, может использовать любые типы, не оглядываясь на
спецификацию.
Упакованные типы-значения, неуправляемые указатели и
типизированные ссылки не должны использоваться.
Регистр букв в идентификаторах не имеет значения.
Методы не должны иметь переменного количества параметров.
Глобальные поля и методы не поддерживаются спецификацией.
Объекты исключений должны наследовать от System.Exception.

11. CLR (Common Language Runtime)

– Среда Времени Выполнения или Виртуальная
Машина. Обеспечивает выполнение сборки. Основной
компонент .NET Framework.
Под Виртуальной Машиной понимают абстракцию
инкапсулированной
(обособленной)
управляемой
операционной системы высокого уровня, которая
обеспечивает выполнение программного кода.

12. Задачи CLR (Common Language Runtime)

управление кодом (загрузку и выполнение),
управление памятью при размещении объектов, изоляцию памяти
приложений,
проверку безопасности кода, преобразование промежуточного
языка в машинный код,
доступ к метаданным (расширенная информация о типах),
обработка исключений, включая межъязыковые исключения,
взаимодействие между управляемым и неуправляемым кодом (в
том числе и COM- объектами),
поддержка сервисов для разработки (профилирование, отладка и
т.д.).

13. Компоненты CLR

Ядро (mscoree.dll)
Библиотеки базовых классов (mscorlib.dll)

14. FCL (.NET Framework Class Library)

соответствующая
CLS
спецификации
объектноориентированная библиотека классов, интерфейсов и
системы типов (типов-значений), которые включаются в
состав платформы Microsoft .NET.
Данная
библиотека
обеспечивает
доступ
к
функциональным возможностям системы и предназначена
в качестве основы при разработке .NET приложений,
компонент, элементов управления.

15. FCL (.NET Framework Class Library)

.NET FCL могут использовать ВСЕ .NET-приложения, независимо
от назначения, архитектуры, используемого при разработке языка
программирования.
В частности, содержит:
встроенные (элементарные) типы, представленные в виде классов
классы для разработки графического пользовательского
интерфейса (Windows Form)
классы для разработки Web-приложений и Web-служб на основе
технологии ASP.NET (Web Forms)
классы для разработки XML и Internet-протоколами (FTP, HTTP,
SMTP, SOAP)
классы для разработки приложений, работающих с базами данных
(ADO.NET),
итд

16. MSIL (Microsoft Intermediate Language/ IL – Intermedia Language)

– промежуточный язык платформы Microsoft.NET.
Исходные тексты программ для .NET приложений
пишутся на языках программирования, соответствующих
спецификации CLS.
Для языков программирования, соответствующих
спецификации CLS может быть построен преобразователь
в MSIL.
Таким образом, программы на этих языках могут
транслироваться в промежуточный код на MSIL.
Благодаря соответствию CLS, в результате трансляции
программного кода, написанного на разных языках,
получается совместимый IL код.

17. МЕТАДАННЫЕ

Создаются при преобразовании программного кода в
MSIL.
Блок МЕТАДАННЫХ содержит информацию о данных,
используемых в программе, это наборы таблиц,
содержащих информацию о типах данных, определяемых в
модуле, о типах данных, на которые ссылается данный
модуль.

18. МЕТАДАННЫЕ: ФУНКЦИИ

сохранения информации о типах. При компиляции не
требуются заголовочные и библиотечные файлы. Всю
необходимую
информацию
компилятор
читает
непосредственно из управляемых модулей,
верификации кода в процессе выполнения модуля,
управления динамической памятью (освобождение
памяти) в процессе выполнения модуля,
при
разработке
программы
стандартными
инструментальными
средствами
(Microsoft
Visual
Studio.NET) на основе метаданных обеспечивается
динамическая подсказка (IntelliSense).

19. Исполняемый модуль

Управляемый исполняемый модуль (управляемый
модуль) это результат трансляции .NET приложения.
Это стандартный переносимый исполняемый (PE –
Portable Executable) файл Windows.

20. Элементы управляемого модуля

Заголовок PE
Показывает тип файла (например, DLL),
содержит временную метку (время сборки
файла), содержит сведения о процессорном
коде.
Заголовок
CLR
Содержит
информацию
для
среды
выполнения модуля (версию требуемой
среды
исполнения,
характеристики
метаданных, ресурсов и т.д.).
Метаданные
Таблицы метаданных: 1. типы, определённые
в исходном коде, 2. типы, на которые
имеются в коде ссылки.
IL
Код, который создаётся компилятором при
компиляции исходного кода. На основе IL в
среде
выполнения
впоследствии
формируется множество команд процессора.

21. Управляемый модуль

Управляемый модуль содержит управляемый код.
Управляемый код - это код, который выполняется в
среде CLR.
Код строится на основе объявляемых в исходном
модуле структур и классов, содержащих объявления
методов.
Управляемому
коду
должен
соответствовать
определенный уровень информации (метаданных) для
среды выполнения. Код C#, Visual Basic, и JScript является
управляемым по умолчанию.
Одной из особенностей управляемого кода является
наличие механизмов, которые позволяют работать с
УПРАВЛЯЕМЫМИ ДАННЫМИ.

22. Управляемые данные

Управляемые данные - объекты, которые в ходе
выполнения кода модуля размещаются в управляемой
памяти (в управляемой куче) и уничтожаются сборщиком
мусора CLR.
Данные C#, Visual Basic и JScript .NET являются
управляемыми по умолчанию.

23. Сборка (Assembly)

Управляемые модули объединяются в сборки.
Сборка является логической группировкой одного или
нескольких управляемых модулей или файлов ресурсов.
Управляемые модули в составе сборок исполняются в
Среде Времени Выполнения (CLR).
Сборка может быть:
исполняемым приложением (файл с расширением .EXE)
библиотечным модулем (файл с расширением .DLL).

24. Виды сборок

Существует два вида сборок:
однофайловые сборки;
многофайловые сборки.
Сборка, которая состоит из одного единого модуля (*.dll или *.exe)
называется однофайловой. В однофайловых сборках все
необходимые CIL-инструкции, метаданные и манифесты
размещаются в одном, четко определенном пакете.
Сборка, которая состоит из многих файлов двоичного кода .NET,
называется многофайловой. Каждый из этих файлов называется
модулем.
В многофайловой сборке один из модулей есть главным (primary).

25. Манифест (manifest)

Манифест – это описание самой сборки с помощью
метаданных.
В манифесте размещается информация:
о текущей версии сборки;
сведения о культуре (локализация строчных и
графических ресурсов);
перечень ссылок на все внешние сборки, которые нужны
для правильного функционирования.

26. JIT- компилятор (just in time – в нужный момент)

Перевод IL кода осуществляется JIT- компилятором (just
in time – в нужный момент), который активизируется CLR по
мере необходимости и выполняется процессором.
При этом результаты деятельности JIT-компилятора
сохраняются в оперативной памяти.
Между фрагментом оттранслированного IL кода и
соответствующим
блоком
памяти
устанавливается
соответствие, которое в дальнейшем позволяет CLR
передавать управление командам процессора, записанным
в этом блоке памяти, минуя повторное обращение к JITкомпилятору.

27. Схема взаимодействия между исходным кодом, компилятором .NET и механизмом выполнения .NET.

Схема взаимодействия между исходным кодом,
компилятором .NET и механизмом
выполнения .NET.
Программист создает исходный код приложения на языке, который
поддерживает технологию .NET (языке C#, C++/CLI, Visual Basic
.NET и т.д.). Приложение создается в некоторой среде
программирования, например Microsoft Visual Studio. Компилятор
формирует сборку – файл, который содержит CIL-инструкции,
метаданные и манифест.
После запуска на выполнение этого приложения на некотором
компьютере (некоторой платформе), в работу запускается механизм
выполнения .NET. Предварительно, на компьютере должна быть
установлена одна из версий (как минимум) .NET Framework.
Если в исходном коде используются библиотеки базовых классов
(например из сборки mscorlib.dll), то они загружаются с помощью
загрузчика классов.
JIT-компилятор осуществляет компиляцию сборки с учетом
(привязкой) аппаратных и программных особенностей компьютера,
на котором происходит запуск приложения.
После этого приложение выполняется.

28. Связь между исходным кодом, компилятором и механизмом выполнения .NET

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

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

Общая система типов CTS
CTS (Common Type System) – система типов, которая
содержит полное описание всех возможных типов
данных и программных конструкций, которые
поддерживаются общеязыковой исполнительной
средой CLR. Также здесь описывается то, как эти
сущности могут взаимодействовать между собою.
Типами могут быть классы, интерфейсы, структуры,
перечисления, делегаты.

30. Назначение общеязыковой спецификации CLS

Не все языки программирования, которые являются
совместимыми
с
.NET,
могут
поддерживать
функциональные возможности системы типов CTS. Для
этого
используется
общеязыковая
спецификация CLS (Common Language Specification).
Задачей CLS есть описание только того подмножества
общих типов и программных конструкций, которые
воспринимаются
абсолютно
всеми
языками
программирования, которые поддерживают .NET.

31. Языки программирования, которые поддерживают технологию .NET

Языки программирования, которые
поддерживают технологию .NET
В системе разработки приложений MS Visual
Studio технологию .NET поддерживают следующие
языки
программирования:
C#,
Visual
Basic
.NET, C++/CLI, JScript .NET, F#, J#.
Для
того,
чтобы
можно
было
использовать
технологию .NET нужно установить на компьютере
программное обеспечение Microsoft .NET Framework
Software Development Kit (SDK) или Microsoft Visual
Studio любой версии.

32. Структура среды выполнения CLR

Код приложения .NET
на одном из языков
программирования
.NET
Компилятор .NET
Сборка в виде файлов DLL
(Содержит IL и Метаданные)
или
EXE
Ядро среды выполнения
(mscoree.dll)
Загрузчик
Библиотеки базовых
классов (mscorlib.dll и
другие)
JIT компилятор
Инструкции ассемблера
Выполнение приложения

33. Выводы

Блок метаданных CLR обеспечивает ЭФФЕКТИВНОЕ
взаимодействие выполняемых .NET приложений.
Для CLR все сборки одинаковы, независимо от того на
каких языках программирования они были написаны.
Фактически
CLR
разрушает
границы
программирования (cross-language interoperability).
языков
Благодаря CLS и CTS .NET-приложения фактически
оказываются приложениями на MSIL (IL).

34. Пространство имен

ПРОСТРАНСТВО ИМЕН

35. Пространство имен

Пространство имен определяет декларативную область,
которая позволяет отдельно хранить множества имен.
По существу, имена, объявленные в одном пространстве
имен, не будут конфликтовать с такими же именами,
объявленными в другом.
Классы группируются по пространствам имён, которые
имеют (как правило) вложенную структуру.
Наиболее часто используемое пространство имён –
System. Оно объединяет те классы из .NET Framework,
которые наиболее часто используются в программах на C#

36. Пространство имен

При многократном обращаться к классам из одного и
того же пространства имен, можно упростить составные
имена, используя в начале программы (до определения
класса) специальный оператор:
using <имя_пространства_имен>;
После такого оператора для обращения к статическому
члену класса из данного пространства имен можно
использовать сокращенное квалифицированное имя
имя_класса.имя_члена

37. Пространство имен

Нахождения модуля числа a
System.Math.Abs(a)
Поместив в программу оператор
using System;
Можно использовать сокращенное выражение:
Math.Abs(a)

38. В чем отличие между пространством имен и именем сборки?

Пространство имен - это логическая схема именования типов, в
которой простому имени типа, например, МойТип, предшествует
разделенное точками иерархическое имя. Такая схема именования
находится полностью под контролем разработчика. Например, по
имени
типов
МояКомпания.ФайловыйДоступ.А
и
МояКомпания.ФайловыйДоступ.В
можно
ожидать,
что
их
функциональность имеет отношение к работе с файлами.
.NET Framework использует иерархическую схему именования типов
для объединения типов в логические категории с общей
функциональностью.
Средства
разработки
позволяют
удобно
просматривать типы, ссылаться на них и использовать в коде.
Концепция пространства имен не имеет прямого отношения к сборке.
Одна сборка может содержать типы, имена которых начинаются в
разных пространствах имен, и одно пространство имен может быть
реализовано в нескольких сборках. В .NET Framework пространство
имен является соглашением по именовании в процессе разработки, в
то время как сборка устанавливает область действия имени для типа в
период выполнения.

39. Как вывести содержимое сборок, пространств имен и типов в MS Visual Studio?

Как вывести содержимое сборок, пространств
имен и типов в MS Visual Studio?
В системе Microsoft Visual Studio есть утилита Object Browser,
которая вызывается с меню View. В результате откроется
окно Object Browser, в котором будут отображаться сборки, которые
используются в определенной технологии.
Если раскрыть содержимое сборки mscorlib (знак “+”), то будет
отображен список всех пространств имен данной сборки

40. РАЗВЕРТЫВАНИЕ И ИЗОЛЯЦИЯ ПРИЛОЖЕНИЙ

41. Варианты развертывания .NET приложения

.NET Framework упрощает развертывание, делая возможным
установку системы без побочных эффектов и развертывать
приложение, используя утилиту XCOPY. Поскольку все запросы
обрабатываются сначала в приватной директории приложения, то
для запуска приложения необходимо просто скопировать файлы
приложения на диск. Никакой регистрации не требуется.
Такой сценарий применим для Web-приложений, Web-сервисов и
клиентских приложений.
Когда приложение состоит из небольшой части приватного
кода, и использует большое количество совместно
используемых сборок, или когда приложение не всегда
полностью установлено локально (например, определенные
части приложения скачиваются и загружаются по
требованию), то для таких ситуаций, в .NET Framework
предусмотрены сервисы для скачивания кода и интеграция с
Windows Installer.
.

42. Домен приложения

Домен приложения (сокращенно AppDomain) — это
виртуальный процесс, который используется для изоляции
приложения. Все объекты, созданные в рамках одного
приложения (другими словами, любая последовательность
создания объектов, которая начинается в приложении),
создаются в рамках определенного домена приложения.
Несколько доменов приложений могут существовать в
одном процессе операционной системы, предоставляя
легкий способ для изоляции приложения.
CLR реализует изоляцию приложений, управляя памятью,
использованной кодом, запущенным в рамках домена
приложения. Это гарантирует, что не будет обращений в
память, находящуюся все рамок домена. Важно отметить,
что только безопасный код может управляться таким
образом (среда выполнения не может гарантировать
изоляцию,
когда
в
домен
приложения
загружен

43. СБОРКА МУСОРА

44. Сборка мусора

Сборка мусора - это механизм, позволяющий
компьютеру определить, когда объект более
недоступен.
Тогда
он
автоматически
освобождает память, используемую этим
объектом
(вызывая
функцию
finalizer,
реализованную пользователем). Некоторые
сборщики мусора (в т.ч. используемый в .NET),
"сжимают" память, уменьшая количество
ресурсов, используемых вашей программой.

45. БЕЗОПАСНОСТЬ

46. Безопасность .NET

Безопасность - важнейший элемент любой идеологии,
технологии и инструментального средства
программирования.
.NET как инструментальное средство призвано
обеспечивать необходимый уровень безопасности.
Для этого в .NET реализована мера безопасности автоматизированное управление ЖЦ ПО.
Для программиста это проявляется:
в автоматической реализации процедуры "сборки
мусора",
в запрете использования указателей на области памяти с
неопределенным значением ("висячих" ссылок) и

47.

- Автоматизация
обеспечения
синтаксической
коррекции
кода
(безопасные вызовы функций, контроль выхода за границы размера
статически распределяемых областей памяти, запрет использования
переменных, если им не задано значение по умолчанию).
- Обязательная проверка промежуточного кода (IL – Intermediate
Language) на корректность типизации в рамках стратегии расширенного
контроля соответствия типов.
- Усовершенствованы права доступа пользователей к ресурсам (для
включения компонента в проект необходимо проверить источник кода,
заверенный автором цифровой подписью и подлинность отправителя).
- Широкий спектр динамически корректируемых
профилями пользователя политик доступа.
в
соответствии
с
- Криптографические методы для шифрования конфиденциальной,
коммерческой информации, передаваемой по Internet-каналам

48. Верификация кода

При разработке платформы .NET было уделено много
внимания обеспечению безопасности выполняемого
программного кода. С точки зрения обеспечения
безопасности
можно
привести
следующую
классификацию CIL-кода:
Недопустимый код (illegal code).
Это код, который не может быть обработан JITкомпилятором, то есть не может быть транслирован в
машинный код.
Допустимый код (legal code).
Это код, который может быть представлен в виде
машинного кода. При этом он может содержать
вредоносные фрагменты (например, вирусы) или ошибки,
способные нарушить работу не только программы, но и
среды выполнения и даже операционной системы.

49. продолжение

Безопасный код (safe code).
Безопасный код не содержит вредоносных фрагментов (в
том числе ошибок) и не может повредить ни системе
выполнения, ни операционной системе, ни другим
выполняемым программам.
Верифицируемый код (verifiable code).
Верифицируемый код − это код, безопасность которого
может быть строго доказана алгоритмом верификации,
встроенным в CLR.

50. Стандарты

Для тиражируемого коммерческого программного
продукта необходимо подтверждение его соответствия
мировым стандартам.
Теоретические
достижения
и
технологические
инновации технологии .NET подтверждаются мнением
европейской ассоциации по стандартам ECMA
(European Computer Manufacturers Association).
ЯП C# и среда Common Language Infrastructure (CLI)
ратифицированы организацией ECMA в качестве
международного стандарта.
Разработчики ПО осуществляют проекты в соответствии
со спецификациями ECMA (реализация .NET под
управлением ОС Linux).

51. Ядро системы типов .NET

52. Ядро системы типов .NET

Типы-значения
представляют
собой
примитивные
типы
данных (целые числа и числа с плавающей запятой). Существуют
еще пользовательские типы-значения, но мы обсудим их позже.
Ссылочные типы описывают так называемые объектные ссылки
(object references), которые представляют собой адреса объектов.
Значения любого типа хранятся в ячейках (location). В качестве
ячеек могут выступать локальные и глобальные переменные,
параметры методов, поля объектов и элементы массивов. Для
каждой ячейки известен тип значений, которые она может
содержать.
Особо важным является то обстоятельство, что ячейки не могут
содержать объекты. Все объекты размещаются в специальной
области памяти, называемой кучей (heap). Таким образом, в ячейках
могут храниться только значения типов-значений или объектные
ссылки.
English     Русский Правила