Урок 74 - Создание и использование интерфейса (часть 1/2)

Интерфейсы играют главную роль в технологиях СОМ (Component Object Model - компонентная модель объектов), CORBA (Common Object Request Broker Architecture - архитектура с брокером требуемых общих объектов) и связанных с ними технологиях удаленного доступа, т. е. технологиях доступа к объектам, расположенным (и выполняющимся) на другой машине. Их основная задача - описать свойства, методы и события удаленного объекта в терминах машины клиента, т. е. на используемом при разработке клиентского приложения языке программирования. С помощью интерфейсов программа клиента обращается к удаленному объекту так, как если бы он был ее собственным объектом.

Тема интерфейсов достаточно обширна и интересна. В этом уроке даются лишь самые общие сведения об интерфейсах. Сведение этой темы в одну главу с классами не случайно, т. к. интерфейс представляет собой пустой класс, т. е. класс, в котором провозглашены, но никак не расшифрованы свойства и методы.

Интерфейсы представляют собой частный случай описания типов. Они объявляются с помощью зарезервированного слова 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). Интерфейсы не могут иметь конструкторов или деструкторов, т. к. описываемые в них методы реализуются только в рамках поддерживающих их классов, которые называются интерфейсными.

Если какой-либо класс поддерживает интерфейс (т. е. является интерфейсным), имя этого интерфейса указывается при объявлении класса в списке его родителей:

TEditor = class(TInterfacedObject, IEdit)
  procedure Copy; stdcall;
  procedure Cut; stdcall;
  procedure Paste; stdcall;
  function Undo: Boolean; stdcall;
end;
В отличие от обычного класса интерфейсный класс может иметь более одного родительского интерфейса:
type
  IMylnterface = interface procedure Delete; stdcall;
  end;
  TMyEditor = class(TInterfacedObiect, lEdit, IMylnterface)
    procedure Copy; stdcall;
    procedure Cut; stdcall;
    procedure Paste; stdcall;
    function Undo: , Boolean; stdcall;
    procedure Delete; stdcall;
  end;
В любом случае в разделе реализации интерфейсного класса необходимо описать соответствующие интерфейсные методы. Если, например, объявлен интерфейс
IPaint = interface
  procedure CirclePaint(Canva: TCanvas; X, Y, R: Integer);
  procedure RectPaint(Canva: TCanvas; X1, Y1, X2, Y2: Integer);
end;
и использующий его интерфейсный класс
TPainter = class(TInterfacedObject, IPaint)
  procedure CirclePaint(Canva: TCanvas; X, Y, R: Integers);
  procedure RectPaint(Canva: TCanvas; X1, Y1, X2, Y2: Integer);
end;
то в разделе implementation следует указать реализацию методов:
procedure TPainter.CirclePaint(Canva: TCanvas; X, Y, R: Integers;
begin
  with Canva do
    Ellipse(X, Y, X + 2 * R, Y + 2 * R);
end;
procedure TPainter.RectPaint(Canva: TCanvas; X1, Y1, X2, Y2: Integer); begin with Canva do Rectangle(XI, Yl, X2, Y2) end; Теперь можно объявить интерфейсный, объект класса TPainter, чтобы с его помощью нарисовать окружность и квадрат:
procedure TForm1.PaintBoxIPaint(Sender: TObject);
var
  Painter: IPaint;
begin
  Painter := TPainter.Create;
  Painter.CirclePaint(PaintBoxl.Canvas, 10, 0, 10);
  Painter.RectPaint(PaintBoxl.Canvas, 40, 0, 60, 20);
end;


Удачи!
Встретимся в следующем уроке!



  1. alkanna
    alkanna 4 months ago
    Order Effexor Without Perscription Inimeneidigh [url=https://bansocialism.com/]cheapest cialis[/url] diunny Levitra Generico Miglior Prezzo India
  2. GocSE
    GocSE 3 months ago
    Medicines information for patients. Effects of Drug Abuse. <a href="https://prednisone4u.top">how to get generic prednisone pill</a> in the USA. Some about medicines. Read here.
    [url=http://pogaduchyweselne.pl/temat-Actual-information-about-meds]Actual information about meds.[/url] [url=http://japaninfo.jp/recuruitforum/?mod=document&amp;uid=310#kboard-comments-310]Best what you want to know about drugs.[/url] [url=http://culturia.nl/node/11#comment-4667]Actual what you want to know about medicament.[/url] 2757030
  3. MSCLut
    MSCLut 2 months ago
    Оказываем услуги таможенного оформления во Владивостоке импортных грузов прибывающих из Китая, Японии и Кореи в адрес заказчика.
  4. MSCLut
    MSCLut 2 months ago
    Обратившись в транспортно-логистическую компанию ООО "Азия-Трейдинг" Вы можете быть уверены, что получите всеобъемлющую помощь при оптовом заказе товаров у производителя в Китае и своевременную доставку до Вашего склада.
    http://msc.com.ru
  5. 716376
    716376 a month ago
    Логистическая компания Азия-Трейдинг работает с юридическими лицами, с малым и средним бизнесом, с интернет магазинами, при поставках товара из Китая.
  6. 441863
    441863 a month ago
    Наиболее распространенными для транспортировки грузов из Китая в Россию являются морские контейнерные перевозки. Они используются чаще остальных, в особенности малыми и средними предпринимателями из Росси при ведении внешнеторговой деятельности с Китаем.
  7. alkanna
    alkanna 15 days ago
    [url=https://vslevitrav.com/]levitra expre delivery[/url]
Отменить.