Вопрос дилетанта
От: Avatar&Desperado Украина  
Дата: 04.12.02 07:17
Оценка:
Очень хочется разобраться с данной технологией не поверхностно, то есть, принцип "это нужно запомнить" не подходит. По этому поводу крик души( ) — почему к методам СОМ-объекта нальзя доступиться напрямую, а приходится использовать интерфейсы? И еще. В статье "Основы СОМ" прочел фразу, что использование абстрактного класса порождаем виртуальную таблицу, как это?
жизненный путь программиста должен заканчиваться точкой с запятой;
Re: Вопрос дилетанта
От: Vi2 Удмуртия http://www.adem.ru
Дата: 04.12.02 07:47
Оценка:
Здравствуйте, Avatar&Desperado, Вы писали:

A&D>Очень хочется разобраться с данной технологией не поверхностно, то есть, принцип "это нужно запомнить" не подходит.

Похвально. Читай статьи на сайте и спрашивай в форуме, что не ясно. Можно и обсуждение в форуме почитать.

A&D>По этому поводу крик души( ) — почему к методам СОМ-объекта нальзя доступиться напрямую, а приходится использовать интерфейсы?

К методам СОМ-объекта ты имеешь прямой доступ. Если у тебя есть указатель на интерфейс Ix* p, то через него ты и вызываешь методы этого интерфейса, т.е. p->f(<params>). Куда уж прямее!

А интерфейс — это набор методов, объединенных в единое целое по их функциональности. Если ты каким-то образом получил указатель на интерфейс от объекта, то можешь использовать любой метод интерфейса в зависимости от твоей цели работы с объектом.

Объект может реализовывать столько интерфейсов, сколько ему необходимо по его роду деятельности. Сам объект выступает как некая виртуальная реальность, данная нам через интерфейсы. Поскольку объект может быть написан на любом языке программирования, а не только на том, на котором программируешь ты. К объекту нельзя подступиться напрямую, поскольку у самого объекта нет методов, как бы странно это не звучало.

A&D>И еще. В статье "Основы СОМ" прочел фразу, что использование абстрактного класса порождаем виртуальную таблицу, как это?

Это уже больше к С++ относится чем к СОМ.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re: Вопрос дилетанта
От: MaximE Великобритания  
Дата: 04.12.02 07:48
Оценка: -1
Здравствуйте, Avatar&Desperado, Вы писали:

A&D>В статье "Основы СОМ" прочел фразу, что использование абстрактного класса порождаем виртуальную таблицу, как это?

Если в этой статье так буквально и написано, то выкинь эту статью.
Начни с книги Дона Бокса "Essentual COM". Вот где ты можешь ее взять: Несколько книг о добром и вечном
Автор: Anatolix
Дата: 23.09.02
Re: Вопрос дилетанта
От: econt Украина http://cprime.110mb.com
Дата: 04.12.02 07:53
Оценка:
Здравствуйте, Avatar&Desperado, Вы писали:

A&D>Очень хочется разобраться с данной технологией не поверхностно, то есть, принцип "это нужно запомнить" не подходит. По этому поводу крик души( )

Для начала см. книгу
Основы COM Дейл Роджерсон. 2-е издание — ее можно скачать здесь: http://nps.vnet.ee/lang.html

А вообще-то лучше найти и купить книгу Трельсена ATL 3.00 (кажется так называется).

Чтоб понять, что такое интерфейс, см. http://cprime.hypermart.net/rus/lesson/38.htm
Но это только самое начало. Дальше без книжек не разберешься.
Мне никогда не нравилась MFC. (c) Charles Petzold
Re[2]: Вопрос дилетанта
От: Tom Россия http://www.RSDN.ru
Дата: 04.12.02 08:35
Оценка:
ME>Если в этой статье так буквально и написано, то выкинь эту статью.
ME>Начни с книги Дона Бокса "Essentual COM". Вот где ты можешь ее взять: Несколько книг о добром и вечном
Автор: Anatolix
Дата: 23.09.02


Статья действительно не очень, но по сути так оно и есть. Создавая абстрактный класс ты указываешь порядок методов в виртуальной таблице, так что никакого криминала тут нет.
Народная мудрось
всем все никому ничего(с).
Re[3]: Вопрос дилетанта
От: MaximE Великобритания  
Дата: 04.12.02 09:35
Оценка:
Здравствуйте, Tom, Вы писали:

ME>>Если в этой статье так буквально и написано, то выкинь эту статью.

ME>>Начни с книги Дона Бокса "Essentual COM". Вот где ты можешь ее взять: Несколько книг о добром и вечном
Автор: Anatolix
Дата: 23.09.02


Tom>Статья действительно не очень, но по сути так оно и есть. Создавая абстрактный класс ты указываешь порядок методов в виртуальной таблице, так что никакого криминала тут нет.


А описывая неабстрактный класс, порядок методов в vtbl не определишь?

struct A
{
    virtual void Method1() = 0;
    virtual void Method2() = 0;
};

struct B : A
{
    virtual void Method2() = 0;
    virtual void Method1() = 0;
};


Я тут описал пару абстрактных классов. Следуя твоей логике B будет иметь порядок методов в vtbl как они в нем объявлены. Это не так. B's vtbl будет иметь тот же порядок, что и A's vtbl.
Re[4]: Вопрос дилетанта
От: Tom Россия http://www.RSDN.ru
Дата: 04.12.02 09:37
Оценка:
Ох и любишь ты поспорить
Народная мудрось
всем все никому ничего(с).
Re[3]: Вопрос дилетанта
От: MaximE Великобритания  
Дата: 04.12.02 09:38
Оценка:
Здравствуйте, Tom, Вы писали:

ME>>Если в этой статье так буквально и написано, то выкинь эту статью.

ME>>Начни с книги Дона Бокса "Essentual COM". Вот где ты можешь ее взять: Несколько книг о добром и вечном
Автор: Anatolix
Дата: 23.09.02


Tom>Статья действительно не очень, но по сути так оно и есть. Создавая абстрактный класс ты указываешь порядок методов в виртуальной таблице, так что никакого криминала тут нет.


В статье "Основы СОМ" прочел фразу, что использование абстрактного класса порождаем виртуальную таблицу, как это?


vtbl появляется когда есть хотя бы один виртуальный метод или виртуальный деструктор. Абстрактность класса не является причиной появления vtbl.
Re[5]: Вопрос дилетанта
От: MaximE Великобритания  
Дата: 04.12.02 09:39
Оценка:
Здравствуйте, Tom, Вы писали:

Tom>Ох и любишь ты поспорить


А теперь скажи, что я не прав .
Re[6]: Вопрос дилетанта
От: Tom Россия http://www.RSDN.ru
Дата: 04.12.02 09:48
Оценка:
ME>А теперь скажи, что я не прав .
Понимаешь ли дело в том, что я парв и ты тоже, но проблемма в том, что ты почему то решил искать какие то неточности в моих словах. Я предпологаю, что это не большая обида за предыдущий флейм. Если это так, то не стоит обижаться так как вопрос в нём поставлен не корректно. Если бы ты спросил так: "Какие достоинства и недостатки в CP", а не "Почему плохи connection points." дискуссия была бы намного конструктивнее. Ну да ладно. А про интерфыейсы говорить лень. Скучная это тема... Если есть что нибудь по интереснее давай обсудим.
Народная мудрось
всем все никому ничего(с).
Re[7]: Вопрос дилетанта
От: MaximE Великобритания  
Дата: 04.12.02 10:09
Оценка:
Здравствуйте, Tom, Вы писали:

ME>>А теперь скажи, что я не прав .

Tom>Понимаешь ли дело в том, что я парв и ты тоже, но проблемма в том, что ты почему то решил искать какие то неточности в моих словах. Я предпологаю, что это не большая обида за предыдущий флейм. Если это так, то не стоит обижаться так как вопрос в нём поставлен не корректно. Если бы ты спросил так: "Какие достоинства и недостатки в CP", а не "Почему плохи connection points." дискуссия была бы намного конструктивнее. Ну да ладно. А про интерфыейсы говорить лень. Скучная это тема... Если есть что нибудь по интереснее давай обсудим.

Ей, это же другой топик — причем здесь connection points??? Я ни на кого не имею ничего личного.

Но, в твоих словах были не неточности, а вопиющие неточности. Эти сообщения читаем не только мы вдвоем. Неподготовленный читатель счел бы твои слова за чистую монету. Поэтому я и написал, что это не так.
Re[8]: Вопрос дилетанта
От: Tom Россия http://www.RSDN.ru
Дата: 04.12.02 10:18
Оценка:
ME>Но, в твоих словах были не неточности, а вопиющие неточности.
Например ?
Народная мудрось
всем все никому ничего(с).
Re[9]: Вопрос дилетанта
От: MaximE Великобритания  
Дата: 04.12.02 10:42
Оценка:
Здравствуйте, Tom, Вы писали:

ME>>Но, в твоих словах были не неточности, а вопиющие неточности.

Tom>Например ?

Создавая абстрактный класс ты указываешь порядок методов в виртуальной таблице


"Неточности":
  1. Невозможно указать компилятору порядок методов в vtbl.
  2. Компилятору наплевать абстрактный ли твой класс. Если он встретит в объявлении класса ключевое слово virtual или один из родителей будет иметь vtbl, то данный класс тоже получит vtbl (и, во втором случае, возможно не одну).
Re[10]: Вопрос дилетанта
От: Tom Россия http://www.RSDN.ru
Дата: 04.12.02 10:46
Оценка:
Ну по поводу пункта 1 ты соврал, а по поводу 2 полностью согласен. Не пойму только одного —
так а я что не так сказал ?
Народная мудрось
всем все никому ничего(с).
Re[11]: В догонку
От: Tom Россия http://www.RSDN.ru
Дата: 04.12.02 10:48
Оценка:
COM по этому и существует, потому, что этот порядок как раз определён жёстко при помощи интерфейсов. Иначе какой в этом во всём смысл.
Народная мудрось
всем все никому ничего(с).
Re[12]: В догонку
От: MaximE Великобритания  
Дата: 04.12.02 21:29
Оценка:
Здравствуйте, Tom, Вы писали:

Tom>COM по этому и существует, потому, что этот порядок как раз определён жёстко при помощи интерфейсов. Иначе какой в этом во всём смысл.


Да, все правильно, вся реализация com крутится вокруг vtbl.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.