Common Intermediate Language и системное программирование в Microsoft.Net. Макаров А.В - 43 стр.

UptoLike

К сожалению, проблемы в организации взаимодействия компонен-
тов зачастую перевешивают преимущества компонентного подхода. Дей-
ствительно, языки программирования используют различные несовмес-
тимые между собой модели данных, соглашения о вызове подпрограмм,
форматы исполняемых и объектных файлов и т.п. Поэтому взаимодейст-
вие компонентов, написанных на разных языках, требует от разработчика
дополнительных усилий и, кроме того, может существенно снизить эффе-
ктивность получаемого кода.
Отсутствие удовлетворительной технологии взаимодействия компо-
нентов приводит к следующим негативным явлениям:
Для разработки программной системы используется только
один язык программирования, даже если часть системы удобней
было бы реализовать на другом языке.
Программа выглядит как гигантский монолит, из которого тру-
дно выделить отдельные части и, соответственно, невозможно
заменить одну часть на другую.
Появляются чрезмерно универсальные языки программирова-
ния, а существующие языки наделяются несвойственными им
возможностями. Например, функциональные и логические
языки оснащаются библиотеками для разработки графического
пользовательского интерфейса.
В компонентной системе можно выделить три вида взаимодействия
компонентов:
1. взаимодействие внутри адресного пространства одного процесса;
2. межпроцессное взаимодействие, при котором компоненты ра-
ботают в разных процессах;
3. взаимодействие в сети, когда компоненты запущены на разных
компьютерах.
В этом разделе мы ограничимся рассмотрением первого случая, то
есть изучим, как на платформе .NET реализовано взаимодействие компо-
нентов, работающих в рамках одного процесса. Межпроцессное и сетевое
взаимодействие используется, главным образом, в распределенных систе-
мах, изучение которых выходит за рамки нашего учебника.
2.3.1. Обзор компонентных технологий
Существует множество способов и технологий организации компо-
нентного программирования. Давайте проведем беглый обзор достижений
в этой области.
2.3.1.1. Библиотеки подпрограмм
Наиболее древний способ заключается в использовании библиотек
подпрограмм. Такие библиотеки создаются одной группой разработчиков,
Структура программных компонентов
73
Это поле содержит индекс в куче строк, по которому хранится
имя импортируемой сборки (в нашем случае это «mscorlib»).
2.2.3.6. Таблица импортируемых типов (TypeRef – 0x01)
Каждая запись в этой таблице соответствует одному из импортируе-
мых типов и содержит следующие поля:
short ResolutionScope;
Специальным образом закодированная информация о том, ка-
кой сборке или какому модулю принадлежит данный тип.
short Name;
Это поле содержит индекс в куче строк, по которому хранится
имя импортируемого типа (в нашем случае это «Console»).
short Namespace;
Это поле содержит индекс в куче строк, по которому хранится
имя пространства имен; данному пространству принадлежит
импортируемый тип (в нашем случае это «System»).
2.2.3.7. Таблица членов импортируемых типов (MemberRef – 0x0A)
В таблице членов импортируемых типов перечислены все методы,
поля и свойства этих типов, которые используются в программе. Каждая
запись этой таблицы содержит следующие поля:
short Class;
Специальным образом закодированная информация об импор-
тируемом типе.
short Name;
Это поле содержит индекс в куче строк, по которому хранится
имя члена импортируемого типа.
short Signature;
Индекс в куче двоичных данных, по которому расположена сиг-
натура члена импортируемого типа.
2.3. Взаимодействие программных компонентов
В настоящее время большой популярностью пользуется компонент-
ный подход к разработке программного обеспечения. Этот подход харак-
теризуется тем, что создаваемый программный продукт состоит из взаи-
модействующих компонентов. При этом различные компоненты могут
независимо разрабатываться разными группами программистов, и при со-
здании каждого компонента может применяться наиболее подходящий
язык программирования. В качестве примера можно привести Microsoft
Visual Studio .NET и Microsoft Office.
72
CIL и системное программирование в Microsoft .NET
72                         CIL и системное программирование в Microsoft .NET   Структура программных компонентов                                     73


         Это поле содержит индекс в куче строк, по которому хранится                К сожалению, проблемы в организации взаимодействия компонен-
         имя импортируемой сборки (в нашем случае это «mscorlib»).             тов зачастую перевешивают преимущества компонентного подхода. Дей-
                                                                               ствительно, языки программирования используют различные несовмес-
2.2.3.6. Таблица импортируемых типов (TypeRef – 0x01)                          тимые между собой модели данных, соглашения о вызове подпрограмм,
     Каждая запись в этой таблице соответствует одному из импортируе-          форматы исполняемых и объектных файлов и т.п. Поэтому взаимодейст-
мых типов и содержит следующие поля:                                           вие компонентов, написанных на разных языках, требует от разработчика
     short ResolutionScope;                                                    дополнительных усилий и, кроме того, может существенно снизить эффе-
           Специальным образом закодированная информация о том, ка-            ктивность получаемого кода.
           кой сборке или какому модулю принадлежит данный тип.                     Отсутствие удовлетворительной технологии взаимодействия компо-
     short Name;                                                               нентов приводит к следующим негативным явлениям:
           Это поле содержит индекс в куче строк, по которому хранится                 • Для разработки программной системы используется только
           имя импортируемого типа (в нашем случае это «Console»).                        один язык программирования, даже если часть системы удобней
     short Namespace;                                                                     было бы реализовать на другом языке.
           Это поле содержит индекс в куче строк, по которому хранится                 • Программа выглядит как гигантский монолит, из которого тру-
           имя пространства имен; данному пространству принадлежит                        дно выделить отдельные части и, соответственно, невозможно
           импортируемый тип (в нашем случае это «System»).                               заменить одну часть на другую.
                                                                                       • Появляются чрезмерно универсальные языки программирова-
2.2.3.7. Таблица членов импортируемых типов (MemberRef – 0x0A)                            ния, а существующие языки наделяются несвойственными им
     В таблице членов импортируемых типов перечислены все методы,                         возможностями. Например, функциональные и логические
поля и свойства этих типов, которые используются в программе. Каждая                      языки оснащаются библиотеками для разработки графического
запись этой таблицы содержит следующие поля:                                              пользовательского интерфейса.
     short Class;                                                                   В компонентной системе можно выделить три вида взаимодействия
           Специальным образом закодированная информация об импор-             компонентов:
           тируемом типе.                                                              1. взаимодействие внутри адресного пространства одного процесса;
     short Name;                                                                       2. межпроцессное взаимодействие, при котором компоненты ра-
           Это поле содержит индекс в куче строк, по которому хранится                    ботают в разных процессах;
           имя члена импортируемого типа.                                              3. взаимодействие в сети, когда компоненты запущены на разных
     short Signature;                                                                     компьютерах.
           Индекс в куче двоичных данных, по которому расположена сиг-              В этом разделе мы ограничимся рассмотрением первого случая, то
           натура члена импортируемого типа.                                   есть изучим, как на платформе .NET реализовано взаимодействие компо-
                                                                               нентов, работающих в рамках одного процесса. Межпроцессное и сетевое
                                                                               взаимодействие используется, главным образом, в распределенных систе-
2.3. Взаимодействие программных компонентов                                    мах, изучение которых выходит за рамки нашего учебника.

     В настоящее время большой популярностью пользуется компонент-             2.3.1. Обзор компонентных технологий
ный подход к разработке программного обеспечения. Этот подход харак-                Существует множество способов и технологий организации компо-
теризуется тем, что создаваемый программный продукт состоит из взаи-           нентного программирования. Давайте проведем беглый обзор достижений
модействующих компонентов. При этом различные компоненты могут                 в этой области.
независимо разрабатываться разными группами программистов, и при со-
здании каждого компонента может применяться наиболее подходящий                2.3.1.1. Библиотеки подпрограмм
язык программирования. В качестве примера можно привести Microsoft                  Наиболее древний способ заключается в использовании библиотек
Visual Studio .NET и Microsoft Office.                                         подпрограмм. Такие библиотеки создаются одной группой разработчиков,