Очень хочется разобраться с данной технологией не поверхностно, то есть, принцип "это нужно запомнить" не подходит. По этому поводу крик души( ) — почему к методам СОМ-объекта нальзя доступиться напрямую, а приходится использовать интерфейсы? И еще. В статье "Основы СОМ" прочел фразу, что использование абстрактного класса порождаем виртуальную таблицу, как это?
жизненный путь программиста должен заканчиваться точкой с запятой;
A&D>Очень хочется разобраться с данной технологией не поверхностно, то есть, принцип "это нужно запомнить" не подходит.
Похвально. Читай статьи на сайте и спрашивай в форуме, что не ясно. Можно и обсуждение в форуме почитать.
A&D>По этому поводу крик души( ) — почему к методам СОМ-объекта нальзя доступиться напрямую, а приходится использовать интерфейсы?
К методам СОМ-объекта ты имеешь прямой доступ. Если у тебя есть указатель на интерфейс Ix* p, то через него ты и вызываешь методы этого интерфейса, т.е. p->f(<params>). Куда уж прямее!
А интерфейс — это набор методов, объединенных в единое целое по их функциональности. Если ты каким-то образом получил указатель на интерфейс от объекта, то можешь использовать любой метод интерфейса в зависимости от твоей цели работы с объектом.
Объект может реализовывать столько интерфейсов, сколько ему необходимо по его роду деятельности. Сам объект выступает как некая виртуальная реальность, данная нам через интерфейсы. Поскольку объект может быть написан на любом языке программирования, а не только на том, на котором программируешь ты. К объекту нельзя подступиться напрямую, поскольку у самого объекта нет методов, как бы странно это не звучало.
A&D>И еще. В статье "Основы СОМ" прочел фразу, что использование абстрактного класса порождаем виртуальную таблицу, как это?
A&D>В статье "Основы СОМ" прочел фразу, что использование абстрактного класса порождаем виртуальную таблицу, как это?
Если в этой статье так буквально и написано, то выкинь эту статью.
Начни с книги Дона Бокса "Essentual COM". Вот где ты можешь ее взять: Несколько книг о добром и вечном
ME>Если в этой статье так буквально и написано, то выкинь эту статью. ME>Начни с книги Дона Бокса "Essentual COM". Вот где ты можешь ее взять: Несколько книг о добром и вечном
Статья действительно не очень, но по сути так оно и есть. Создавая абстрактный класс ты указываешь порядок методов в виртуальной таблице, так что никакого криминала тут нет.
Здравствуйте, Tom, Вы писали:
ME>>Если в этой статье так буквально и написано, то выкинь эту статью. ME>>Начни с книги Дона Бокса "Essentual COM". Вот где ты можешь ее взять: Несколько книг о добром и вечном
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.
Здравствуйте, Tom, Вы писали:
ME>>Если в этой статье так буквально и написано, то выкинь эту статью. ME>>Начни с книги Дона Бокса "Essentual COM". Вот где ты можешь ее взять: Несколько книг о добром и вечном
Tom>Статья действительно не очень, но по сути так оно и есть. Создавая абстрактный класс ты указываешь порядок методов в виртуальной таблице, так что никакого криминала тут нет.
В статье "Основы СОМ" прочел фразу, что использование абстрактного класса порождаем виртуальную таблицу, как это?
vtbl появляется когда есть хотя бы один виртуальный метод или виртуальный деструктор. Абстрактность класса не является причиной появления vtbl.
ME>А теперь скажи, что я не прав .
Понимаешь ли дело в том, что я парв и ты тоже, но проблемма в том, что ты почему то решил искать какие то неточности в моих словах. Я предпологаю, что это не большая обида за предыдущий флейм. Если это так, то не стоит обижаться так как вопрос в нём поставлен не корректно. Если бы ты спросил так: "Какие достоинства и недостатки в CP", а не "Почему плохи connection points." дискуссия была бы намного конструктивнее. Ну да ладно. А про интерфыейсы говорить лень. Скучная это тема... Если есть что нибудь по интереснее давай обсудим.
Здравствуйте, Tom, Вы писали:
ME>>А теперь скажи, что я не прав . Tom>Понимаешь ли дело в том, что я парв и ты тоже, но проблемма в том, что ты почему то решил искать какие то неточности в моих словах. Я предпологаю, что это не большая обида за предыдущий флейм. Если это так, то не стоит обижаться так как вопрос в нём поставлен не корректно. Если бы ты спросил так: "Какие достоинства и недостатки в CP", а не "Почему плохи connection points." дискуссия была бы намного конструктивнее. Ну да ладно. А про интерфыейсы говорить лень. Скучная это тема... Если есть что нибудь по интереснее давай обсудим.
Ей, это же другой топик — причем здесь connection points??? Я ни на кого не имею ничего личного.
Но, в твоих словах были не неточности, а вопиющие неточности. Эти сообщения читаем не только мы вдвоем. Неподготовленный читатель счел бы твои слова за чистую монету. Поэтому я и написал, что это не так.
Здравствуйте, Tom, Вы писали:
ME>>Но, в твоих словах были не неточности, а вопиющие неточности. Tom>Например ?
Создавая абстрактный класс ты указываешь порядок методов в виртуальной таблице
"Неточности": Невозможно указать компилятору порядок методов в vtbl.
Компилятору наплевать абстрактный ли твой класс. Если он встретит в объявлении класса ключевое слово virtual или один из родителей будет иметь vtbl, то данный класс тоже получит vtbl (и, во втором случае, возможно не одну).
Здравствуйте, Tom, Вы писали:
Tom>COM по этому и существует, потому, что этот порядок как раз определён жёстко при помощи интерфейсов. Иначе какой в этом во всём смысл.
Да, все правильно, вся реализация com крутится вокруг vtbl.