Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТП лекции Раздел 4.doc
Скачиваний:
16
Добавлен:
28.09.2019
Размер:
2.56 Mб
Скачать

Тема 4.14. Обзор платформы ms .Net.

4.14.1. Общая идея архитектуры .Net.

В течение многих лет для Windows было написано огромное число программ, и Windows не приобрела бы тот успех, который она имеет сейчас, если бы Microsoft каждый раз создавала новую техноло­гию, которая не позволяла бы использовать существующие программистские наработки. Новые тех­нологии, конечно же, появлялись, но основной акцент делался на развитие и расширение существующих технологий. Microsoft выбрала эволюционный путь развития по одной простой причине — обес­печение обратной совместимости с уже имеющимися продуктами.

Хотя обратная совместимость является ключевой особенностью технологий Windows и одним из ее наиболее сильных моментов, она обладает огромным недостатком. Каждый раз, когда какая-нибудь технология расширяется и приобретает новые возможности, она становится чуть более сложной. В результате этого спустя десятилетие появилось боль­шое число областей программирования, для которых написание кода сильно затрудняет­ся именно тем, что в них предусматривается обратная совместимость с технологиями, появившимися 10 и более лет тому назад.

Например, СОМ основывается на относительно сложных потоковых моделях, кото­рые являются таковыми лишь потому, что им необходимо сочетать текущую многопото­ковую технологию с компонентами, написанными для Windows 3.1, в которой не существовало многопотоковых процессов. СОМ — хороший пример семейства техноло­гий, чья полезность отрицательно сказалась на сложности, когда даже опытные разработ­чики сталкиваются с необходимостью изучения в течение 6 месяцев, а то и года, целого лабиринта интерфейсов, GUID (Globally Unique IDentifiers), сложных процессов перено­са данных (marshalling) и других низкоуровневых хитростей, которыми пользуется СОМ.

Точно так же MFC основывается на объектной модели, которая должна быть совме­стима с Windows 3.1, и не использует многих замечательных особенностей С++ только потому, что этих особенностей не было в то время, когда разрабатывалась MFC.

Visual Basic сохраняет относительную простоту и успешно скрывает от пользователя сложности, к примеру, низкоуровневой СОМ, но за это приходится платить. Вызов API Windows из кода VB сопряжен со значительными трудностями, и разработчики на VB в основном имеют доступ лишь к небольшой части той функциональности и гибкости, которые предлагают Windows и Windows API.

Необходимо было создать простой, но имеющий сложную структуру набор языков, сред и средств разработки, которые позволят разработчику легко создавать современные программные продукты. .NET представляет собой новую платформу, новый API для программирования в Win­dows, а С# — новый язык, созданный с нуля, для работы с этой платформой, а также для извлечения всех выгод из прогресса сред разработки и нашего понимания принципов объектно-ориентированного программирования в течение последних 20 лет.

Необходимо отметить, что обратная совместимость не потеряна. Существующие программы будут выполняться, а платформа -NET была спроектирована таким образом, чтобы она могла работать с имеющимся программным обеспечением. Связь между ком­понентами в Windows сейчас почти целиком осуществляется при помощи СОМ. С уче­том этого .NET обладает способностью (а) создавать оболочки (wrappers) вокруг существующих компонентов СОМ, так что компоненты .NET могут общаться с ними, и (б) создавать оболочки вокруг компонентов .NET, что позволяет им выглядеть как обычные СОМ-компоненты.

Чтобы писать код для платформы -NET, необязательно изучать C#. Microsoft расши­рила язык C++ и произвела значительные изменения в VB, который превратился в еще более мощный язык VB.NET. Благодаря этому код, написанный с применением обоих этих языков, может работать на платформе -NET. Однако эти языки отягощены наслед­ством, приобретенным в процессе длительного развития, так как они не были созданы с нуля с учетом использования современных технологий.

Платформа .NET — это среда, которую видит код в процессе исполнения. Это означает, что .NET занимается исполнением кода: запускает его, дает ему соответствующие права, выделяет память для хранения данных, помогает с освобождением памяти и ресурсов, которые больше не требуются, и т.д. По­мимо этого .NET предоставляет обширную библиотеку классов, так называемую библио­теку базовых классов .NET, для выполнения большого числа задач Windows. В этом плане .NET можно рассматривать с двух сторон: как управляющую выполнением кода и предоставляющую коду различные службы.

Определения и термины, связанные с .NET.

  • Среда исполнения .NET (.NET runtime), также известная как общая среда ис­полнения или CLR,— это то, что собственно управляет кодом. Можно рассмат­ривать ее как код, который обеспечивает загрузку программы, ее выполнение и предоставление всех необходимых служб.

  • Управляемый код (managed code). Любой код, который разработай для исполне­ния в .NET, называется управляемым. Код, который работает под управлением Windows, называется неуправляемым.

  • Промежуточный язык (IL). Это тот самый язык, на котором должен быть напи­сан код, загружаемый и запускаемый средой исполнения .NET. При компиляции управляемого кода компилятор генерирует код на промежуточном языке, a CLR выполняет заключительную стадию компиляции непосредственно перед испол­нением кода. Язык IL разработан таким образом, чтобы обеспечить быструю ком­пиляцию в машинный код, но в то же время он поддерживает все особенности .NET.

  • Общая система типов (Common Type System, CTS). Для обеспечения совмести­мости языков необходимо иметь согласованный набор основных типов данных. чтобы все языки могли быть стандартизированы. Этим целям и служит CTS. Кро­ме того, CTS предоставляет правила для определения пользовательских классов.

  • Базовые классы .NET. Это обширная библиотека классов, которая содержит код для выполнения большого числа задач в Windows, начиная от отображения окон и форм и заканчивая базовыми службами Windows, чтением и записью в файлы, доступом к сети и Интернету и доступом к источникам данных.

  • Сборка. Это модуль, в котором хранится компилированный управляемый код. Она похожа на классический исполняемый файл или DLL, но имеет важное свой­ство — она полностью себя описывает. Сборки содержат метаданные, которые включают в себя сведения о сборке и обо всех определенных внутри нее типах, методах и т.п. Сборка может быть частной (доступной только одному приложению) и разделяемой (доступной любому приложению Windows).

  • Кэш сборок. Место на диске, где хранятся разделяемые сборки.

  • Общая спецификация языка (Common Language Specification, CLS). Это мини-мальный набор стандартов, который гарантирует, что доступ к коду может быть осуществлен из любого языка. Все компиляторы, предназначенные для .NET, дол­жны поддерживать CLS. CLS формирует подмножество функций, доступных в .NET и IL, и полезна для кода, использующего особенности вне компетенции CLS. Если в сборке присутствуют какие-либо не CLS особенности, они могут быть недоступны в некоторых языках.

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

  • Компиляция Just-In-Time (JIT). Этот термин обозначает процесс выполнения за­ключительной стадии компиляции с промежуточного языка в машинный код. На­звание определяется тем, что части кода компилируются по мере необходимости.

  • Манифест. Область сборки, содержащая метаданные.

  • Область приложения. Это способ, с помощью которого CLR позволяет различ­ным программам исполняться в одном и том же пространстве процессов. Изоля­ция модулей кода достигается путем использования безопасности типов IL для проверки того, что каждый сегмент кода ведет себя правильно.

Сборка мусора. CLR применяет этот способ для очистки памяти, которая больше не требуется приложению. Таким образом, приложение не несет ответственно­сти за освобождение памяти.