Составители:
Рубрика:
В-третьих, выполнение любой программы управляется средой вы-
полнения 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 и не зависит от языка программирования, на котором на- из сборки, а каждый член типа (метод, поле, свойство и т.д.) должен быть писана программа. объявлен с определенным значением флага доступа.
Страницы
- « первая
- ‹ предыдущая
- …
- 43
- 44
- 45
- 46
- 47
- …
- следующая ›
- последняя »