Выбрать главу

Модульность

Число классов библиотеки FCL велико (несколько тысяч). Поэтому понадобился способ их структуризации. Логически классы с близкой функциональностью объединяются в группы, называемые пространством имен (Namespace). Для динамического компонента CLR физической единицей, объединяющей классы и другие ресурсы, является сборка (assembly).

Основным пространством имен библиотеки FCL является пространство System, содержащее как классы, так и другие вложенные пространства имен. Так, уже упоминавшийся примитивный тип Int32 непосредственно вложен в пространство имен System и его полное имя, включающее имя пространства — System.Int32.

В пространство System вложен целый ряд других пространств имен. Например, в пространстве System.Collections находятся классы и интерфейсы, поддерживающие работу с коллекциями объектов — списками, очередями, словарями. В пространство System.Collections, в свою очередь, вложено пространство имен Specialized, содержащие классы со специализацией, например, коллекции, элементами которых являются только строки. ПространствоSystem.windows.Forms содержит классы, используемые при создании Windows-приложений. Класс Form из этого пространства задает форму — окно, заполняемое элементами управления, графикой, обеспечивающее интерактивное взаимодействие с пользователем.

По ходу курса мы будем знакомиться со многими классами, принадлежащими различным пространствам имен библиотеки FCL.

Общеязыковая исполнительная среда CLR — динамический компонент каркаса

Наиболее революционным изобретением Framework.Net явилось создание исполнительной среды CLR. С ее появлением процесс написания и выполнения приложений становится принципиально другим. Но обо всем по порядку.

Двухэтапная компиляция. Управляемый модуль и управляемый код

Компиляторы языков программирования, включенные в Visual Studio.Net, создают модули на промежуточном языке MSIL (Microsoft Intermediate Language), называемом далее просто — IL. Фактически компиляторы создают так называемый управляемый модуль — переносимый исполняемый файл (Portable Executable или PE-файл). Этот файл содержит код на IL и метаданные — всю необходимую информацию как для CLR, так и конечных пользователей, работающих с приложением. О метаданных — важной новинке Framework.Net — мы еще будем говорить неоднократно. В зависимости от выбранного типа проекта, PE-файл может иметь уточнения exe, dll, mod или mdl.

Заметьте, PE-файл, имеющий уточнение ехе, хотя и является exe-файлом, но это не совсем обычный, исполняемый Windows, файл. При его запуске он распознается как специальный PE-файл и передается CLR для обработки. Исполнительная среда начинает работать с кодом, в котором специфика исходного языка программирования исчезла. Код на IL начинает выполняться под управлением CLR (по этой причине код называется управляемым). Исполнительную среду можно рассматривать как своеобразную виртуальную IL-машину. Эта машина транслирует "на лету" требуемые для исполнения участки кода в команды реального процессора, который в действительности и выполняет код.

Виртуальная машина

Отделение каркаса от студии явилось естественным шагом. Каркас Framework.Net перестал быть частью студии, а стал надстройкой над операционной системой. Теперь компиляция и создание РЕ-модулей на IL отделено от выполнения, и эти процессы могут быть реализованы на разных платформах. В состав CLR входят трансляторы JIT (Just In Time Compiler), которые и выполняют трансляцию IL в командный код той машины, где установлена и функционирует исполнительная среда CLR. Конечно, в первую очередь Microsoft реализовала CLR и FCL для различных версий Windows, включая Windows 98/ Me/NT 4/2000, 32 и 64-разрядные версии Windows ХР и семейство. Net Server. Для операционных систем Windows СЕ и Palm разработана облегченная версия Framework.Net.

В 2001 году ЕСМА (Европейская ассоциация производителей компьютеров) приняла язык программирования С#, CLR и FCL в качестве стандарта, так что Framework.Net уже функционирует на многих платформах, отличных от Windows. Он становится свободно распространяемой виртуальной машиной. Это существенно расширяет сферу его применения. Производители различных компиляторов и сред разработки программных продуктов предпочитают теперь также транслировать свой код в IL, создавая модули в соответствии со спецификациями CLR. Это обеспечивает возможность выполнения их кода на разных платформах.

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