Санкт-Петербургский государственный университет
Опубликован: 25.07.2014 | Доступ: свободный | Студентов: 1039 / 80 | Длительность: 17:26:00
Лекция 3:

Обзор возможностей .NET

< Лекция 2 || Лекция 3: 123 || Лекция 4 >
Аннотация: В данной лекции рассмотрены следующие вопросы: Принципы архитектуры и использования платформы .NET. Новые возможности .NET 4.5.1.

Цель лекции

Ознакомление с принципами архитектуры и использованием платформы .NET, новыми возможностями .NET 4.5.1.

3.1. Введение

Данная лекция знакомит с платформой .NET и возможностями новой версии .NET 4.5.1.

Рассмотрены Web-сервисы .NET, на которых базируется архитектура и реализация платформы облачных вычислений Microsoft Azure.

3.2. Обзор архитектуры .NET

.NET [7, 12] - платформа надежного и безопасного многоязыкового программирования.

Она основана на единой для всех языков инфраструктуре (CLI), общей системе типов (CTS), общей системе поддержки выполнения (CLR).

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

Исполнение программы в CLR реализовано как последовательность вызовов методов и just-in-time (динамическая) компиляция каждого метода в native-код при первом вызове, с последующими вызовами native-кода откомпилированного метода.

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

На использовании метаданных основан динамический контроль типов и безопасности, выполняемый CLR.

Подчеркнем, что, в отличие от Java-технологии (стандарты которой принаждежат корпорации Oracle), платформа .NET первоначально появилась в виде набора международных стандартов ECMA и ISO [13]. То есть, сам термин .NET обозначает именно набор этих стандартов на язык C#, CLI, CIL, CTS и структуру библиотек. Согласно этим стандартам, была реализована платформа Microsoft.NET - реализация стандартов .NET корпорацией Microsoft для ОС семейства Windows.

В отличие от Java, для того, чтобы разработать собственную реализацию стандартов .NET, не требуется покупка лиценции у какой-либо фирмы-владельца этих стандартов. Однако следует отметить, что это нисколько не облегчает саму реализацию стандартов .NET, которая является весьма сложной задачей, решение которой под силу только высококвалифицированному и опытному коллективу разработчиков ПО. У меня самого неоднократно возникали идеи и предложения по разработке сторонних реализаций .NET для различных программно-аппаратных платформ, которые пока не были осуществлены.

Имеются и другие реализации стандартов .NET:

  • Shared Source Common Language Infrastructure (SSCLI, или Rotor) - академическая версия .NET с открытым исходным кодов, реализованная для операционных систем Windows, UNIX FreeBSD и MacOS;
  • Mono - открытая реализация .NET международным распределенным сообществом программистов, ориентированная, прежде всего, на ОС Linux, но также работающая и для Windows;
  • DotGNU.

3.3. Основные идеи и принципы .NET

Основные идеи и принципы .NET следующие. Это компиляция с любого языка в промежуточный двоичный код MSIL (CIL) - постфиксную форму представления программ; генерация компилятором так называемых метаданных - информации о типах, определяемых и используемых в программном модуле для .NET. Промежуточный код, метаданные, плюс так называемый манифест (список содержимого бинарного кода) составляют сборку (assembly) - логическую единицу представления бинарного кода в .NET. Во время выполнения программы, при первом вызове каждого метода, его промежуточный код компилируется специальным компилятором (just-in-time, или JIT, компилятором) в платформно-зависимый (native) код аппаратной платформы (машины), на которой исполняется программа. Де-факто стандартом для представления конфигурационной информации и передачи данных через сеть в .NET является XML.

3.4. Преимущества подхода .NET

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

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

Повышенные требования к безопасности - еще одна характерная черта .NET. Используются следующие виды безопасности:

  • безопасность доступа к коду (code access security): при проверке наличия полномочий безопасности для выполнения определенных действий (например, для открытия файла) у какого-либо метода какой-либо сборки наличие этих полномочий проверяется не только у самого этого метода, но и у всей цепочки вызовов методов, вызванных в данный момент на стеке текущего потока; подобная стратегия носит название security stack walk (прогулка по стеку) и обеспечивает отсутствие атак, связанных с превышением привилегий (elevation of privilege), когда злонамеренный код пытается воспользоваться для превышения полномочий вызовом "чужого" метода;
  • безопасность, основанная на свидетельствах (evidence-based security) - проверки безопасности ("благонадежности") сборки: наличия у нее соответствующей цифровой подписи, надежного авторства сборки (например, принадлежность сборки компании Microsoft, и т.д.;
  • безопасность, основанная на ролях (role-based security) - возможность определения для какого-либо пользователя некоторой роли, обозначаемой строкой (например, "second-line manager") и связывания с этой ролью определенного набора полномочий.

Наконец, .NET имеет удобные современные механизмы поддержки Web-программирования - Web-сервисы, рассмотренные позже в данной лекции.

3.5. Архитектура .NET Framework

На рис. 3.1 приведена архитектура базовой библиотеки классов (BCL) .NET. Их использование ясно из их названий. Особенно важно, что все эти классы могут быть использованы при программировании на любом языке .NET - C#, Visual Basic, Managed C++ и др.

Например, пространство имен System.Web реализует поддержку Web-сервисов, а пространство имен System.Security - поддержку установки, проверки и конфигурирования полномочий безопасности сборок.

Классы .NET Framework

Рис. 3.1. Классы .NET Framework

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

Общая система типов .NET (CTS) - унификация систем типов данных современных языков программирования. Подчеркнем, что такая унификация необходима в .NET для поддержки многоязыкового программирования (CLR должна "понимать" типы каждого языка одинаково).

Различаются следующие разновидности типов в CTS.

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

Простые типы (int, double, unsigned int, native int и др.), разумеется, относятся к типам-значениям.

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

Указатели (managed pointers) - разновидность указателей, на которой базируются проверки типов и безопасности. Управляемый указатель в .NET содержит ссылку на тип объекта (на метаданные), благодаря чему тип и атрибуты любого объекта можно проверить во время выполнения. Как альтернатива, в .NET также возможно использование более традиционных неуправляемых указателей (unmanaged pointers) - фактически, обычных адресов без явного хранения типа содержащейся в памяти по этим адресам информации. Однако на платформе .NET работа с неуправляемыми указателями возможна только в небезопасном режиме (unsafe). При этом "за последствия отвечает программист" (как было раньше в языках C и C++), и никакого контроля типов или сборки мусора для таких неуправляемых объектов не производится.

В общем случае, на платформе .NET разрешен запуск неуправляемого кода (unmanaged code) - например, традиционного exe-файла для Windows - из управляемого кода сборки .NET, так как иногда удобно использовать уже существующий унаследованный код (legacy code), разработанный традиционными методами на традиционных языках. Однако при этом необходимо учитывать, что платформа .NET не обепечиват дополнительный контроль типов, безопасности и сборку мусора при запуске неуправляемого кода.

Классы в .NET имеют обычный смысл, как в других системах ООП. Класс - совокупность полей (информации) и методов, предназначенных для ее обработки. Классы могут наследовать поля и методы друг от друга.

Интерфейсы - также стандартная концепция для современных языков ООП - Java, C#, VB и др. Интерфейс - совокупность заголовков методов. Интерфейс может быть реализован одним или несколькими классами. Например, интерфейс Stack может содержать заголовки методов Push и Pop. Допускается любое число реализаций интерфейса различными классами.

Делегаты и события - типы данных для обработки событий. Тип делегата описывает типовую структуру заголовка обработчика события, представленного в виде callback-метода. При описании события указывается конкретный тип делегата.

< Лекция 2 || Лекция 3: 123 || Лекция 4 >
Александр Калинин
Александр Калинин

Осенью прошёл курс и получил ключ. Но т.к. уже имел действующую подписку, то ключом не воспользовался. Сейчас захожу сюда, а про DreamSpark вообще ни слова. Где же мой ключ?