Интерфейсы играют главную роль в так называемых технологиях удаленного доступа к объектам, расположенным на другой машине. Их основная задача - описать свойства, методы и события удаленного объекта в терминах машины клиента, то есть на используемом при разработке клиентского приложения языке программирования. С помощью интерфейсов программа клиента обращается к удаленному объекту так, как если бы он был ее собственным объектом. В рамках инструментария Open Tools API среда разработчика Delphi с помощью интерфейсов обращается к редакторам свойств и компонентов.

1.2.1. Создание и использование интерфейсов

Интерфейсы представляют собой частный случай описания классов. Они объявляются с помощью зарезервированного слова interface. Например:

type IEdit = interface

procedure Copy;
stdcall; procedure Cut;
stdcall; procedure Paste;
stdcall; function Undo: Boolean;
stdcall;
end;

Такое объявление эквивалентно описанию абстрактного класса в том смысле, что не требует расшифровки объявленных в интерфейсе свойств и методов. В отличие от классов, интерфейс не может содержать полей, и, следовательно, объявляемые в нем свойства в разделах read и write могут ссылаться только на методы. Все объявляемые в интерфейсе члены размещаются в единственной секции public. Методы не могут быть абстрактными (abstract), виртуальными (virtual), динамическими (dynamic) или перекрываемыми (override).

ПРИМЕЧАНИЕ -;-

По принятому в Delphi соглашению имена интерфейсов начинаются буквой I.

Если интерфейс предполагается использовать в технологии СОМ, он обязательно должен снабжаться так называемым глобально-уникальным идентификатором (Globally Unique Identifier, GUID). Этот идентификатор интерфейса (Interface Identifier, IID) создается по специальной технологии, гарантирующей ничтожно малую вероятность совпадения вновь создаваемого IID с любым ранее созданным!1.

ПРИМЕЧАНИЕ -

В среде Delphi для получения GUID достаточно нажать комбинацию клавиш Ctrl+Shift+G. Для программного получения GUID следует обратиться к функции CoCreateGUID интерфейса API.

Любой идентификатор GUID сохраняется в структуре следующего вида:

type PGUID = ATGUID; TGUID = record

Dl: LongWord;
D2: Wod;
D3: Word;
D4: array [0..7] of Byte;
end;

Поскольку оперировать такой структурой сложно, Delphi позволяет записывать ее в виде строки:

'{ХХХХХХХХХ-ХХХХ-ХХХХ-ХХХХ-ХХХХХХХХХХХХ}'

Здесь X - шестнадцатеричная цифра.

1 GUID представляет собой 128-разрядное целое число. Его уникальность обеспечивается достаточно большим числом и великолепным алгоритмом его генерации, в котором используются текущие дата и время, частота процессора и номер сетевой карты. Наличие в компьютере сетевой карты гарантирует уникальность GUID, так как по существующему отраслевому стандарту каждая сетевая карта имеет уникальный идентификатор.

Идентификатор интерфейса записывается сразу за его начальным объявлением. Например:

type IEdit = interface

['{BCC5C45F-AC0E-4FC3-9F8F-6105448423EA}■] procedure Copy;
stdcall; procedure Cut;
stdcall; procedure Paste;
stdcall; function Undo: Boolean;
stdcall;

Программист может объявлять типизированные константы типа TGUID, например:

const IID_IPaint: TGUID =

[■{A4AFEB61-7705-11D2-8B41-444553540000}'];

Константы GUID могут использоваться вместо имен интерфейсов при вызове подпрограмм. Например, два следующих обращения идентичны:

procedure Paint(const IID: TGUID);
Paint(IPaint);
Paint(IID_Paint);

1.1.4. Делегирование методов || Оглавление || 1.2.2. Интерфейсные классы


Искусство создания компонентов Delphi



Новости за месяц

  • Август
    2019
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс