С++ - язык, который изучается постепенно.Посредники
                   Справочники Всё для создания сайта

Ссылки


Home
Бизнес
Справочники
Советы







Материалы книги получены с http://www.itlibitum.ru/

Посредники

Интерфейсные указатели также помогают скрыть тот факт, что указываемый объект находится где-то в киберпространстве, а не сидит в памяти по соседству. В распределенных объектных системах такое происходит сплошь и рядом. Первая цель проектировщика - держать клиентские объекты в блаженном неведении; они не знают и знать не хотят, где находится указываемый объект - на расстоянии плевка или где-то на краю земли. Объект, который заменяет другой, удаленный объект, называется посредником (proxy). На эту тему тоже существует немало вариаций, но самая простая из

них - локальное использование интерфейсного объекта или грани. Затем локальный посредник может воспользоваться дистанционными вызовами или другим механизмом отправки сообщений, подходящим для взаимодействия с оригиналом.

Эта концепция распространяется и на ситуации, в которых удаленный «объект» вообще не является объектом. Это может быть целое приложение, завернутое посредником в объектно-ориентированную оболочку, или, допустим, содержимое базы данных с библиотечными функциями «класса».

В самой идее внедрения «не объектно-ориентированного» кода в объекты С++ нет ничего нового или оригинального. Нас в первую очередь интересует уровень инкапсуляции. Что должен знать клиент о реальной ситуации? Умные указатели на основе операторов -> подходят плохо. Клиент должен знать интерфейс указываемого объекта; следовательно, он должен знать, существует ли указываемый объект, как устроен его интерфейс и т. д. Интерфейсные указатели, в том числе грани - более удачный вариант. Если ваша программа написана с применением интерфейсных указателей, вам будет намного

проще вставить новый код, в котором некоторые из этих указателей реализуются в виде посредников.

Проще, хотя и не совсем незаметно для клиента - пока. Помните базовую форму интерфейсного указателя с обязательным предварительным объявлением?

class Pointee; // Предварительное объявление

class Interface {

private:

Pointee* pointee;

public:

// Функции класса

};

Проблема кроется в переменной pointee. Клиент должен знать, что указатель ссылается на нечто, даже если он понятия не имеет, на что именно. В части 3 мы попробуем устранить даже это ограничение, а пока будем считать его досадной мелочью.

В результате мы приходим к классическому компромиссу: понижение быстродействия интерфейсных указателей (с вынесенными (outline) функциями) за возможность кардинальных изменений реализации без модификации клиентского кода. В большинстве проектов и классов расходы с лихвой компенсируются ускорением цикла разработки.


Назад    Содержание    Далее    

Home  Создание сайтов  Учебник по записи CD  Справочник Web дизайнера Самоучитель IE PHP и MySQL Компьютерные сети С++ E-mail me

Copyright 2007. Климов Александр. All Right Reserved.
Hosted by uCoz