Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Т2. Связь_Таненбаум_СРС_ПРИС.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.59 Mб
Скачать

2.3.1. Распределенные объекты

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

Это подразделение на интерфейсы и объекты, реализующие их, очень важно для распределенных систем. Четкое разделение позволяет нам помещать интер­фейс на одну машину при том, что сам объект находится на другой. Структура, показанная на рис. 2.16, обычно и называется распределенным объектом (distribu­ted object).

2.3. Обращение к удаленным объектам 113

К огда клиент выполняет привязку к распределенному объекту, в адресное пространство клиента загружается реализация интерфейса объекта, называемая заместителем (proxy). Заместитель клиента аналогичен клиентской заглушке в системах RPC. Единственное, что он делает, — выполняет маршалинг парамет­ров в сообщениях при обращении к методам и демаршалинг данных из ответных сообщений, содержащих результаты обращения к методам, передавая их клиен­ту. Сами объекты находятся на сервере и предоставляют необходимые клиент­ской машине интерфейсы. Входящий запрос на обращение к методу сначала по­падает на серверную заглушку, часто именуемую скелетоном (skeleton). Скелетон преобразует его в правильное обращение к методу через интерфейс объекта, на­ходящегося на сервере. Серверная заглушка также отвечает за маршалинг пара­метров в ответных сообщениях и их пересылку заместителю клиента.

Характерной, но немного противоречащей интуитивному представлению осо­бенностью большинства распределенных объектов является то, что их состояние (данные) не распределяется — оно локализовано на одной машине. С других ма­шин доступны только интерфейсы, реализованные в объекте. Такие объекты еще называют удаленными (remote object). Как мы увидим в последующих главах при общем знакомстве с распределенными объектами, их состояние может быть фи­зически распределено по нескольким машинам, но это распределение также скры­вается от клиентов за интерфейсами объектов.

Объекты времени компиляции против объектов времени выполнения

Объекты в распределенных системах существуют в различных формах. В наибо­лее распространенном варианте они соответствуют объектам выбранного языка программирования, например Java, C++ или другого объектно-ориентированного языка, и представляют собой объекты времени компиляции. В этих случаях объ­ект является экземпляром класса. Класс — это описание абстрактного типа в виде модуля, содержащего элементы данных и операций над этими данными [291].

Использование объектов времени компиляции в распределенных системах обычно значительно упрощает создание распределенных приложений. Так, в язы­ке Java объект может быть полностью описан в рамках своего класса и интер­фейсов, которые этот класс реализует. Компиляция определения класса порож­дает код, позволяющий создавать экземпляры объектов языка Java. Интерфейсы можно скомпилировать в клиентские и серверные заглушки, позволяющие обра­щаться к объектам Java с удаленных машин. Разработчик программы на Java ча­ще всего может не беспокоиться по поводу распределения объектов: он занима­ется только текстом программы на языке Java.

Очевидная оборотная сторона использования объектов времени компиляции состоит в зависимости от конкретного языка программирования. Существует и альтернативный способ создания распределенных объектов — непосредственно во время выполнения. Такой подход характерен для множества объектных рас­пределенных систем, поскольку распределенные приложения, созданные в соот­ветствии с ним, не зависят от конкретного языка программирования. В част-