Re: Программирование на языке Delphi. Глава 6.
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 11.12.05 13:26
Оценка: +2
>При программировании нередко возникает необходимость выполнить обращение к объекту, находящемуся в другом загрузочном модуле, например EXE или DLL. Для решения поставленной задачи компания Microsoft разработала технологию COM (Component Object Model) — компонентную модель объектов.

Рекомендую выразиться в том духе, что не "в другом загрузочном модуле", а "в чужом программном продукте". И привести пример с открытием скачиваемых doc-файлов прямо внутри Internet Explorer (мне кажется, это нагляднее, чем демонстрировать выгрузку данных в Excel — это, в конце концов, можно и через файловый ввод-вывод проделать).

>Интерфейс = Объект – Реализация

Очень странная формула. Тогда уж " = класс — реализация". А еще правильнее "= видимые извне составляющие объекта". В том числе, кстати, и поля (если трактовать "интерфейс" более широко, чем в COM). Но и это не отражает смысл понятия. Может, не стоит давать формулу, которая не помогает понять явление? Лучше бы начать разговор с того, что интерфейс объекта — это то, что представляет собой объект для внешнего по отношению к нему кода. То есть это операции, которые может вызывать внешний код, и данные, доступ к которым он имеет. Интерфейс не обязательно включает все видимые стороны объекта: любое подмножество интерфейса объекта также является его интерфейсом, только суженным, более специализированным. Например, если есть определенный класс пользователей, которым у данного объекта интересна только возможность сохраняться в поток, им не нужен для работы полный интерфейс объекта: для их работы им достаточно иметь доступ к такому интерфейсу этого объекта, в котором есть метод для записи его в поток. Это позволяет не перегружать внешних партнеров объекта лишней информацией о нем.

В Delphi используется принятое в COM определение интерфейса (в отличие, скажем, от Java). Интерфейс может содержать методы и свойства, но не поля.................................. и далее по вкусу.

А то объяснение, которое присутствует в книге сейчас — объясняет единичный прием, но оставляет за бортом принцип, парадигму.

> IntfReader := Intf as ITextReader; // Intf.QueryInterface(ITextReader, IntfReader);

Не совсем так. Сначала идет проверка на nil, поэтому as безопасно применять к нулевым указателям.

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.