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

UptoLike

В-третьих, выполнение любой программы управляется средой вы-
полнения CLR. Это означает, что среда выполнения контролирует JIT-
компиляцию CIL-кода программы, выполняет управление памятью и в
каждый момент времени имеет всю информацию о состоянии программы.
Эти три особенности платформы .NET позволяют среде выполнения
автоматически обеспечивать взаимодействие компонентов вне зависимо-
сти от того, на каком языке они написаны.
На рис. 2.12 изображена схема взаимодействия двух объектов на
платформе .NET. Объекты Client и Server находятся в разных компонен-
тах, работающих в адресном пространстве одного процесса (здесь мы
не рассматриваем межпроцессное взаимодействие, а также взаимодейст-
вие по сети). Передача сообщения от объекта Client объекту Server сво-
дится к простому вызову соответствующего метода объекта Server, то есть
в среде .NET не нужны никакие объекты-заглушки.
Компоненты на платформе .NET представляют собой сборки .NET.
Сборка .NET может статически импортировать любую другую сборку и
свободно использовать типы, экспортируемые из этой сборки. Для этого
информация об импортируемой сборке заносится в таблицу метаданных
AssemblyRef, информация о каждом импортируемом типе – в таблицу
TypeRef, а информация о каждом импортируемом методе и поле – в таб-
лицу MemberRef. Кроме того, сборка может импортироваться динамиче-
ски через рефлексию (мы рассмотрим эту возможность в пункте 4.4.2).
2.3.2.1. Видимость и контроль доступа
Метаданные в сборках .NET содержат полную информацию о типах.
При этом каждый тип может экспортироваться или не экспортироваться
из сборки, а каждый член типа (метод, поле, свойство и т.д.) должен быть
объявлен с определенным значением флага доступа.
Структура программных компонентов
77
серверному объекту-заглушке ServerStub, который распаковывает сооб-
щение и вызывает соответствующий метод объекта Server. Результат, воз-
вращаемый методом объекта Server, совершает обратный путь к объекту
Client аналогичным образом. Данный пример показывает, что использо-
вание технологий COM и CORBA связано с большими трудностями. Си-
туация, пожалуй, облегчается лишь тем, что объекты-заглушки могут быть
сгенерированы автоматически на основе описания объекта Server на язы-
ке IDL (для этого существуют специальные компиляторы).
Хотя технологии COM и CORBA продолжают активно применяться,
есть все основания утверждать, что в самом ближайшем будущем они бу-
дут вытеснены более эффективными и удобными технологиями (напри-
мер, .NET).
2.3.2. Взаимодействие компонентов в среде .NET
Организация компонентного программирования на платформе .NET
необычайно проста и удобна для программиста. Давайте обсудим, какие
особенности .NET обеспечивают это удобство.
Во-первых, компилятор любого языка программирования, реализо-
ванного на платформе .NET, генерирует сборки, содержащие CIL-код и
метаданные. При этом формат этих сборок определяется спецификацией
CLI и не зависит от языка программирования.
Во-вторых, любая программа, работающая в среде .NET, использует
общую систему типов CTS. Поэтому представление данных в памяти оп-
ределяется CTS и не зависит от языка программирования, на котором на-
писана программа.
76
CIL и системное программирование в Microsoft .NET
Компонент1
Client
Client
Stub
Компонент2
Server
Server
Stub
Информационная
магистраль
Рис. 2.11. Взаимодействие двух объектов через COM или CORBA
Компонент1
Client
Компонент2
Server
Рис. 2.12. Взаимодействие двух объектов в среде .NET
Common Language Runtime
76                         CIL и системное программирование в Microsoft .NET   Структура программных компонентов                                     77


                                                                                    В-третьих, выполнение любой программы управляется средой вы-
       Компонент1                                      Компонент2              полнения CLR. Это означает, что среда выполнения контролирует JIT-
                                                                               компиляцию CIL-кода программы, выполняет управление памятью и в
                                                                               каждый момент времени имеет всю информацию о состоянии программы.
     Client                                                     Server              Эти три особенности платформы .NET позволяют среде выполнения
                                                                               автоматически обеспечивать взаимодействие компонентов вне зависимо-
                                                                               сти от того, на каком языке они написаны.
                                                                                    На рис. 2.12 изображена схема взаимодействия двух объектов на
                           Информационная                                      платформе .NET. Объекты Client и Server находятся в разных компонен-
               Client                              Server                      тах, работающих в адресном пространстве одного процесса (здесь мы
                Stub                                Stub                       не рассматриваем межпроцессное взаимодействие, а также взаимодейст-
                              магистраль
                                                                               вие по сети). Передача сообщения от объекта Client объекту Server сво-
                                                                               дится к простому вызову соответствующего метода объекта Server, то есть
                                                                               в среде .NET не нужны никакие объекты-заглушки.
     Рис. 2.11. Взаимодействие двух объектов через COM или CORBA
                                                                                                       Common Language Runtime
серверному объекту-заглушке ServerStub, который распаковывает сооб-
щение и вызывает соответствующий метод объекта Server. Результат, воз-                  Компонент1                                 Компонент2
вращаемый методом объекта Server, совершает обратный путь к объекту
Client аналогичным образом. Данный пример показывает, что использо-
вание технологий COM и CORBA связано с большими трудностями. Си-
туация, пожалуй, облегчается лишь тем, что объекты-заглушки могут быть               Client                                                Server
сгенерированы автоматически на основе описания объекта Server на язы-
ке IDL (для этого существуют специальные компиляторы).
     Хотя технологии COM и CORBA продолжают активно применяться,
есть все основания утверждать, что в самом ближайшем будущем они бу-                Рис. 2.12. Взаимодействие двух объектов в среде .NET
дут вытеснены более эффективными и удобными технологиями (напри-
мер, .NET).                                                                         Компоненты на платформе .NET представляют собой сборки .NET.
                                                                               Сборка .NET может статически импортировать любую другую сборку и
2.3.2. Взаимодействие компонентов в среде .NET                                 свободно использовать типы, экспортируемые из этой сборки. Для этого
     Организация компонентного программирования на платформе .NET              информация об импортируемой сборке заносится в таблицу метаданных
необычайно проста и удобна для программиста. Давайте обсудим, какие            AssemblyRef, информация о каждом импортируемом типе – в таблицу
особенности .NET обеспечивают это удобство.                                    TypeRef, а информация о каждом импортируемом методе и поле – в таб-
     Во-первых, компилятор любого языка программирования, реализо-             лицу MemberRef. Кроме того, сборка может импортироваться динамиче-
ванного на платформе .NET, генерирует сборки, содержащие CIL-код и             ски через рефлексию (мы рассмотрим эту возможность в пункте 4.4.2).
метаданные. При этом формат этих сборок определяется спецификацией
CLI и не зависит от языка программирования.                                    2.3.2.1. Видимость и контроль доступа
     Во-вторых, любая программа, работающая в среде .NET, использует                Метаданные в сборках .NET содержат полную информацию о типах.
общую систему типов CTS. Поэтому представление данных в памяти оп-             При этом каждый тип может экспортироваться или не экспортироваться
ределяется CTS и не зависит от языка программирования, на котором на-          из сборки, а каждый член типа (метод, поле, свойство и т.д.) должен быть
писана программа.                                                              объявлен с определенным значением флага доступа.