Форум: "Основная";
Текущий архив: 2003.07.24;
Скачать: [xml.tar.bz2];
ВнизИнтерфейсы Найти похожие ветки
← →
Alex134 (2003-07-13 18:49) [0]Объясните пожалуйста зачем они нужны, можно на примере. Читаю две книжки и не могу понять самой сути, там только и написано как их объявлять, про три основных метода, короче фигня всякая.
← →
Ihor Osov'yak (2003-07-13 21:30) [1]COM без них невозможен. Но их можно использовать не только в контексте COM.
Зы - позволю себе ниже фрагмент одной статьи - может чего и прояснит:
COM - это есть во первых, некий набор не нарушаемых ни при каких условиях правил, согласно которым одни программные объекты могут воспользоваться ресурсами других программных обьектов, а также средства операционной системы, которые обеспечивают это взаимодействие. Причем те объекты, которые используют ресурсы (далее клиенты), никогда не получают полного контроля над объектами, которые эти ресурсы отдают (далее - компоненты, или объекты COM)... Мало того, клиенту даже не обязательно иметь представление об общем устройстве объекта COM. Для их взаимодействия важно наличие оговоренного интерфейса взаимодействия и гарантии того, что этот интерфейс никогда не будет изменен.
Здесь под интерфейсом понимается набор определенных методов, которые должны быть реализованы объектом COM, и которые "предоставляются" клиенту. На уровне бинарного кода за интерфейсом стоит некая структура в памяти, которую реализует объект COM и которая предоставляет собой некую таблицу адресов методов обьекта COM. Когда говорят, что клиент получил интерфейс, то понимают, что ему стал известен адрес той структуры. Кроме того, клиент "знает", в каком порядке идут точки вхождения в этой таблице для соответствующих методов, так как клиент знаком с соответствующей спецификацией.
...
Подытоживая, можно сказать,что интерфейс есть спецификация, которая на на уровне бинарного кода "отражается" в таблицу вызовов в памяти.
..
В СОМ интерфейсы - это все. Для клиента сервер представляет собой набор интерфейсов. Клиент с сервером может взаимодействовать только посредством интерфейсов. Мало того, клиент даже может не знать о всех интерфейсах, поддерживаемых сервером.
Все интерфейсы наследуются от базового интерфейса IUnnknown . Причем, если говорят о наследовании интерфейсов, то понимают не наследование реализации (с ней мы имеем дело, когда работаем в пределах объектной модели хотя бы того же Delphi), а наследование деклараций. Под наследованием деклараций понимается то, что если некий интерфейс IB наследуется от интерфейса IA, то в соответствующей таблице вызовов для интерфейса IB сначала будут идти адреса методов, которые декларируются в IA, а затем адреса методов от IB. Причем списки формальных параметров наследуемых методов не должны быть изменены. Если вспомнить, что интерфейсы есть спецификации, то становится понятным, почему по отношению к ним может идти речь только о наследовании деклараций. Конечно, при реализации конкретного COM-обьекта можно использовать технологию наследования реализации, но это будет внутреннее дело объекта, которое никак не затрагивает клиента.
В завершение разговора об COM, я хотел бы упомянуть о некоторых методах базового интерфейса IUnnknown, так как во первых, эти методы присутствуют в любом интерфейсе (вспомним о наследовании деклараций и о том, что любой интерфейс наследуется от IUnnknown) и во вторых, на использовании этих методов строится вся идеология работы с COM.
Итак, разрешите представить - QueryInterface. С помощью этого интерфейса клиент может определить, поддерживает ли COM-обьектом какой либо другой интерфейс, который известен клиенту, и получить указатель на тот интерфейс, если он поддерживается объектом. При работе с СOM, это пожалуй самый популярный вызов. В Dеlphi он иногда вызывается явно, иногда неявно. Неявный вызов происходит при применении оператора as для интерфейсных ссылок.
Интерфейс IUnnknown также декларирует два метода интерфейса AddRef и Release, которые ответственны за подсчет использования COM-обьекта (одно из требований к COM-обьектам - они должны уметь сами себя уничтожить, если в их услугах более никто не нуждается). Вам вряд ли придется вызывать эти методы напрямую, так как Delphi генерирует их вызовы автоматически.
← →
Ihor Osov'yak (2003-07-13 23:25) [2]
То есть, работа с COM-обьектами идет только через интерфейсы. На эту тему есть куча литературы.
Есть еще менее очевидный момент. Использование интерфейсов помимо COM. Можно привести несколько примеров. Например, реализация обьектов с самоуничтожением. То есть, создаем обьект и работаем с ним исключительно по интерфейсной ссылке. Когда этот обьект становится ненужным, ссылка обнуляется, и как следствие, счетчик использований обьекта уменшается на единицу.. Если обьект больше нигде не используется, счетчик сбрасывается в 0 и обьект уничтожается.. Красиво, и главное - поддержка на уровне синтаксиса языка..
Второй пример. Есть много разнотипных обьектов. Все они имеют несколько одинаковых методов, и мы вынуждены работать с этими методами, независимо от типа обьекта.. Например, множество диалоговых оком, методы - putData, getData, Execute.. Предположим, их в принцыпе проблематично свести к одному предку, или нецелесообразно.. Не будем здесь рассуждать об изьяне в проектировании - возможно пример неудачный, но идею он иллюстрирует..
Так вот, мы можем продекларировать некий интерфейс, содержащий этих три метода, и научить эти диалоговые окна реализировать этот интерфейс.. И потом работать через этот интерфейс, не особо вникая, какой диалог мы дергаем за этот интерфейс..
← →
Alex134 (2003-07-14 01:13) [3]Теперь все стало ясно, большое спаибо !
← →
Крот (2003-07-14 08:11) [4]http://www.clubpro.spb.ru/cominside/
Здесь очень хорошая рассылка по COM-технологиям, лучше всяких книжек, есть примеры на Delphi, очень рекомендую заглянуть.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.07.24;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.014 c