5-ДӘРІС. Қолданба дайындау

 



1.      Қарапайым қолданба.

2.      Қолданба интерфейсін жасау.

3.      Қолданбаның функционалдылығын анықтау.

      Интерфейстер -COM (Component Object Model — объектілердің компоненттік моделі), COBRA (Common Object Request Broker Architecure — жалпы объектілерді талап ететін брокерлі архитектура) технологияларында және осыған байланысты қашықтықтан кіру мүмкіндігі бар технологияларда басты роль атқарады. басқа сөзбен айтқанда, басқа машинада  орналасқан объектілер объектілерге кіру технологиясы. Оның негізгі міндетіалыстағы объектінің қасиетін, әдісін және оқиғасын сипаттау, яғни  программалау тілінде клиентке арналған қосымшаны жасауда пайдаланылады. Егер ол өзінің жеке меншік объектісі болса, интерфейститің көмегімен клиент программасы  алыстағы объектіге қатынас жасайды.

      Интерфейстер тақырыбының ауқымы өте кең және қызықты да. Бірақ интерфейстер жөніндегі жалпы түсінікпен ғана шектелеміз. Интерфейс дегенімізбос класс.

 

Интерфейстің құрылуы және пайдаланылуы

Интерфейстер типтерді сипаттаудың дербес жағдайы. олар interface қызметші сөзінің көмегімен хабарланады. Мысалы,

      Type

      IEdit=interface

      Procedure Copy;stdcall;

      Procedure Cut;stdcall;

      Procedure Paste;stdcall;

      Function Undo;stdcall;

      End;

      Мұндағы хабарлау абстракт класты сипаттаумен бірдей, яғни интерфейсті шақыру ондағы хабарланған қасиеттер мен әдістерді талдауды талап етпейді.

      Кластардан айырмашылығы интерфейстің өрістері болмайды, сондықтан ондағы read және write бөлімінде хабарланған қасиеттер тек әдіске ғана сілтеме жасауы мүмкін. Интерфейсте хабарланған барлық мүшелер тек Public секциясында орналасады.

      Әдістер абстракт (abstract), виртуалды (virtual), динамикалық (dinamic)   немесе жабылатын (override) бола алмайды. Интерфейстерде конструкторлар немесе деструкторлар болмайды, яғни ондағы  сипатталған әдістер тек оны сүйемелдейтін кластың шеңберінде ғана жүзеге асырылады, ол интерфейстің аты оның аталық тізіміндегі кластың хабарлануында көрсетіледі:

      TEditor=class(TInterfacedObject,IEdit)

      Procedure Copy;stdcall;

      Procedure Cut;stdcall;

      Procedure Paste;stdcall;

      Function Undo:Boolean;stdcall;

      End;

Әдеттегі кластан интерфейстік кластың айырмашылығы оның бірнеше аталық интерфейсі болуы мүмкін:

      Type

      IMyInterface=interface

      Procedure Delete; stdcall;

      TmyEditor=class(TInterfacedObject,IEdit,IMyInterface)

      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,x2,y1,y2,R:integer);

      End;

Кез келген жағдайдағы интерфейстік класты жүзеге асыру бөлімінде сәйкес интерфейстік әдістерді сипаттау қажет. Мысалы, егер интерфейс хабарланған болса

      IPaint=interface

      ProcedureCirclePaint(Canva:Tcanvas; x,y,R:integer);

      Procedure RectPaint(Canva:Tcanvas; x1,x2,y1,y2,R:integer);

      End;

және оның интерфейстік класын пайдаланатын болса,

      TPainter=class(TInterfaceObject, Ipaint)

      ProcedureCirclePaint(Canva:Tcanvas; x,y,R:integer);

      Procedure RectPaint(Canva:Tcanvas; x1,x2,y1,y2,R:integer);

      End;

онда implementation бөлімінде әдістің жүзеге асырылуын көрсету қажет:

      Procedure Tpainter.CirclePaint(Canva:TCanvas; x,y,R:integer);

      begin

      With Canva do

      Ellipse(x,y,x+2*R,y+2*R);

      End;

      Procedure Tpainter.CirclePaint(Canva:TCanvas; x1,y1,x2,y2,R:integer);

      begin

      With Canva do

      Rectabgle(x1,y1,x2,y2);

      End;

Енді шеңбер және квадрат сызу үшін кластың интерфейстік объектісін хабарлауға болады:

      Procedure Tform1.PaintBoxPaint(Sender:TObject);

      var

      Painter:IPaint;

      begin

      Painter:=TPainter.Create;

      Painter.CirclePaint(PaintBox1.Canvas,10,0,10);

      Painter.RectPaint(PaintBox1.Canvas,40,0,60,20);

      End;

      Интерфейс оның пайдаланатын интерфейстік класын хабарлағанға дейін хабарланатындығын қарамастан, оның әдістерінің кластың хабарлауында келтірілетіні міндетті екені компиляторға белгілі. Біздің жағдайда оны былай көрсетуге болады:

      Type

      TPainter=class(TInterfaceObject,IPaint)

      End;

      Мұнда жазу қате болар еді: компилятор CirclePaint  және RectPaint әдістерінің сипатталуын қоюды талап етер еді.

      Сондай-ақ, Object Pascal тілінің барлық кластары жалғыз аталық класс Tobject класынан туындағаны тәрізді барлық интерфейстік кластар TinterObject жалпы аталығынан туындаған. Бұл аталық жадыны интерфейстік объектілер үшін үлестіре алады және  Iunknow глобальды интерфейсін пайдаланады:

      Type

      TinterfacedObject=class(TObject,IUnknown)

      Private

      Frefcount:integer;

      Protected

      Function QueryInterface(constIID:TGUID; outObj):integer;stdcall;

      Function_AddRef:integer;stdcall;

      Function_Relefse:integer;stdcall;

      Public

      Property RefCount:integer read FrefCount;

      End;

Егер алдыңғы мысалда Tpainter класы төмендегідей сипатталған болса:

      TPainter=class(TPaint)

      ProcedureCirclePaint(Canva:Tcanvas; x,y,R:integer);

      Procedure RectPaint(Canva:Tcanvas; x1,x2,y1,y2,R:integer);

      End;

Онда компилятор TinterfaceObject класының QueryInterface_Add_Release әдістерін қосуды талап етер еді. Бұл кластың FrefCount өрісі интерфейстік объектіні шақыру есептегішінің қызметін атқарады және  Windows схемасында қабылданғанындай пайдаланылады:  Iunknow интерфейсінің Add әдісіне әрбір оралған сайын есептегіш 1-ге артады, ал Release әдісіне оралған сайын есептегіш 1-ге кемиді. Бұл өрістің мәні нольге тең болғанда интерфейстік объект жойылып, жадыдан алған орнын босатады.

      Интерфейстік объектіге as типтерді келтіру операторын қолдануға болады, бұл жағдайда керекті интерфейс таңдалады:

      Procedure PaintObject(P:TInterfacedObject)

      Var x:IPaint

      begin

      Try

      X:PasIPaint;

      X.CirclePaint(PaintBox1.Canvas,0,0,20)

      Except

      ShowMessage('объект IPaint интерфейсін сүйемелдемейді')

      End; end;

Мұндай меншіктеуді кездестіргеннен кейін компилятор код құрады және оның көмегімен  Ipaint интерфейсіне сілтеме жасауды шақырылады. Егер объект көрсетілген интерфейсті сүйемелдемейтін болса, шектен тыс  жағдай пайда болады.

      қашықтықтағы объектіні пайдалануға есептелген интерфейстер глобальды бірегей идентификатормен жабдықталуы тиіс (Guid). Мысалы,

      IPaint=interface

      ['{AYAFEB60-7705-11D2-8B-41-4444553540000}']

      ProcedureCirclePaint(Canva:TCanvas; x,y,R:integer);

      ProcedureRectPaint(Canva:TCanvas; x1,y1,x2,y2:integer);

      End;

Implements қызметші сөзінің көмегімен программист кейбір класқа қандай  да бір қасиетті қоса алады. Бұл қасиеттің типі интерфейс немесе класс болуы мүмкін. Егер қасиеттің типі интерфейс болса, бұл интерфейстің аты аталық кластар тізімінде көрсетілуі тиісяғни интерфейстік кластағыдай:

      Type

      IMyInterface=interface

      Procedure P1; Procedure P2;

      End;

      TMyClass=class(TObject,IMyInterface)

      IMyInterface=IMyInterface;

      Property MyInterface:IMyInterface

      Read FMyInterface implements ImyInterface;

      End;

Мұнда мына мәселеге көңіл аудару қажет: мысалдағы  TmyClass интерфейстік класс болып табылмайды, яғни Р1 және Р2 әдістері орындалатын класс.

      Егер одан MyInterface өкілетті қасиетін анықтауды алып тастаса, онда ол интерфейстік болып табылады және MyInterface әдісін сипаттау қажет.

      Өкілетті қасиетте міндетті түрде read болуы тиіс. Егер оның типі класс болса және ол сол хабарланған болса, оның басқа өкілетті қасеиттерінің болуы мүмкін емес.


Ұқсас жұмыстар

Delphi программалау ортасы. Мәліметтер базасы
Delphi ортасының құрал - саймандары
Протолиттік теорияның негізгі қағидалары
Ерте жастағы жүктіліктің алдын алу
Білімді ақпараттандыру және оқыту мәселелері
Зиянды бағдарлама түрлері
Тотығу-тотықсыздану процесстер
Биоорганикалық реакциялардың түрлері және орынбасушылардың электрондық әсерлері
Мектептегі психологиялық қызметті ұйымдастырудың әдіснамалық-әдістемелік мәселелері
Электролиттердің ерітінділердің тепе-тенділігі