

| стрелялки |
| спорт |
| драки |
| стратегии |
| гонки |
| логические |
| азартные |
| аркады |
| эротические |
| фильмы онлайн |
| COM-объект |
|
В основе многокомпонентной модели лежит понятие COM-объекта. Физически COM-объект представляет собой совокупность данных и методов, управляющих этими данными. Структура COM-объекта существенно отличается от кнопок и строк ввода, привычных нам по библиотеке VCL. Ключевое отличие COM от знакомого нам объекта Delphi в том, каким образом COM-объ-ект предоставляет доступ к своим данным. Структура COM-объекта материализует идею сказки о Кощее Бессмертном. Помните: смерть в игле, игла в яйце, яйцо в утке, утка в зайце, заяц в сундуке, сундук на дубе... Не знаю, читали в Microsoft русские народные сказки или нет, но проектируя COM-объект, программисты корпорации уверенно пошли по проторенному Кощеем пути - прямого доступа к данным COM-объекта извне в принципе не существует. Каждое поле объекта скрыто в его недрах и может обслуживаться только методами COM-объекта. Методы объекта также особой коммуникабельностью не отличаются; они упакованы так глубоко, что доступны лишь через свои указатели. И это еще не все. В свою очередь указатели на методы хранятся в специальных таблицах адресов функций - в так называемых виртуальных таблицах объекта (virtual tables). Описание каждой из таких таблиц называют интерфейсом (interface). Сколько у объекта таблиц, столько у него интерфейсов. И теперь вряд ли кого удивит, что непосредственно к интерфейсу (указателю на виртуальную таблицу адресов методов) обратиться нельзя - вместо этого мы можем работать лишь с указателем на интерфейс; это единственное, что доступно извне COM-объекта. На рис. 24.1 представлена модель COM-объекта. Количество интерфейсов COM-объекта определяется замыслом разработчика. В границах отдельного интерфейса программисты обычно объединяют однородные по функциональному назначению методы. Таким образом, чем больше задач решает объект, тем значительнее перечень его интерфейсов. Вне зависимости от того, сколько интерфейсов объявит программист, любой COM-объект поддерживает один базовый интерфейс IUnknown, в обязанности которого входит информирование клиента COM об имеющихся в распоряжении объекта интерфейсах. Для того чтобы программист в среде Delphi с первого взгляда отличал интерфейс от класса, принято решение перед названием классов-интерфейсов использовать префикс «I». Получив доступ к обязательно присутствующему интерфейсу IUnknown, программа или любой другой объект сразу может обратиться к функции QueryInterface() и узнать обо всех остальных имеющихся у этого объекта интерфейсах. На схемах интерфейс IUnknown изображается в верхней части объекта. В среде программирования Delphi в основу COM-объекта положен класс TCOMObject. Его интерфейсная часть создается на базе опорного для всех интерфейсных классов IInterface. |
