Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Private. FOnDblClick: TNotifyEvent;





..............................

FOnDblClick: TNotifyEvent;

FOnMouseDown: TMouseEvent;

FOnMouseMove: TMouseMoveEvent;

..............................

Protected

..............................

property OnDblClick: TNotifyEvent read FOnDblClick
write FOnDblClick;

property OnMouseDown: TMouseEvent read FOnMouseDown
write FOnMouseDown;

property OnMouseMove: TMouseMoveEvent read FOnMouseMove
write FOnMouseMove;

..............................

End;

FOnDblClick, FOnMouseDown и FOnMouseMove – оқиға-қасиетін сипаттағанда қолданылатын өрістер. Өрістерді сипаттағанда қолданылатын процедуралық типтер келес түрде анықталады:

Type

TNotifyEvent = procedure (Sender: TObject) of object;

TMouseEvent = procedure (Sender: TObject; Button: TMouseButtton;
Shift: TShiftState; X, Y: Integer) of object;

TMouseMoveEvent = procedure (Sender: TObject; Shift: TShiftState;
X, Y: Integer) of object;

Процедуралық типтерге жалпы болып оқиғаның объект-көзіне нұсқағыштан тұратын Sender параметрі табылады. Button параметрі тышқанның қай батырмасы басылғандығы туралы ақпараттан тұрады. Shift параметрі пернетақтада басылған батырманың кодынан тұрады. X және Y – құрауыштың шегіндегі тышқанның ағымды координаталары.

Инспектор объектісінің Events парағының кез – келген оқиғасының өрісіне шерту арқылы, сіздер бағдарламада керекті типтің әдісінің дайындамасын аласыздар. Мұнда ат ағымды құрауыш пен оқиғаның атынан тұратын болады (On префикісі болмайды), ал ол ағымды пішінге тиісті болады. Form1 пішінінде Label1 белгісі бар деп ұйғарайық. Онда тышқанмен шерту өңдеуішіне (OnClick оқиғасы) TForm1 класының Label1Click әдісінің тақырыбы құрылады:

procedure TForm1.Label1Click(Sender: TObject);

Begin

...

end;

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

Object1.OnMouseMove:= Object2.OnMouseMove;

Меншіктеу принципі әрбір арнайы жағдай үшін жаңа еншілес кластың тууы деген үлкен үрдістің пайда болуының алдын алады және ондай үрдістерді қарапайым процедураларды қоюмен айырбастайды.

Қандай механизм өңдеуішерді ауыстыруға мүмкіндік береді?, өйткені ол жай ғана процедура емес, әдіс қой. Бұл жерде Object Pascal тілінің әдіске нұсқағыш деген ұғымы сай келеді. Әдіс қарапайым процедурадан айқын сипатталған параметрлерден басқа әдіске айқын емес түрде класта автоматты түрде анықталған Self айнымалысына орналастырылатын оны шақырған объектіге нұсқағыштан тұрады. Сипатталып отырған процедуралық тип әдіске тағайындалғанын (яғни Self – ті алуды қарастырады), яғни әдістің типі болып келгенін көрсету үшін процедураны сипаттағанда of object резервтелген сөзді қосу керек. Әдіске нұсқағыш дегеніміз – ол осындай процедураға нұсқағыш болып табылады.

Type

TMyEvent = procedure (Sender: TObject; var AValue: Integer) of object;

T1stObject = class;

FOnMyEvent: TMyEvent;

property OnMyEvent: TMyEvent read FOnMyEvent write FOnMyEvent;

End;

T2nd0bject = class;

procedure SetValuel(Sender: TObject; var AValue: Integer);

procedure SetValue2(Sender: TObject; var AValue: Integer);

End;

Var

Obj1: T1stObject;

Obj2: T2nd0bject;

Begin

Obj1:= T1stObject.Create;

Obj2:= T2nd0bject.Create;

Obj1.OnMyEvent:= Obj2.SetValue1;

Obj1.OnMyEvent:= Obj2.SetValue2;

...

End.

Бұл мысал атын қайта өзгерткен кезде басқа кластардың да әдістерін меншіктеуге болатындығын көрсетеді. Мұнда Objl объектісінің OnMyEvent оқиғасының өңдеуіші болып ретпен Obj2 объектісінің SetValue1 және SetValue2 әдістері табылады.

Объект Инспекторының Events бетінде әдістің, яғни оқиғаның типіне сай келетін құрауыштың қасиеттері бейнеленеді. Қандай да бір оқиғаға қойылатын оқиғанының өңдеуішінің типі оқиғаның типіне сай болуы керек, сондықтан әдістің типін басқаша оқиға өңдеуішінің типі деп те атауға болады.

 


Бақылау сұрақтары:

1. Класс пен оның элементтеріне ат тағайындағанда ұсынылатын ережелер.

2. Класс дегеніміз не? Объект дегеніміз не? Кластың жариялануы. Объектінің жариялануы. Кластың синтаксисі.

3. Кластың өрісі дегеніміз не? Мысалдар. Кластың өрістерінің қалқалануы. Мысалдар.

4. Кластың әдісі болып не табылады? Мысалдар. Кластың әдісі кәдімгі процедурадан несімен ерекшеленеді?

5. Әдістердің қалқалануы. Статикалық қалқалану. Динамикалық қалқалану.

6. Динамикалық, виртуальды және қалқалау әдістері. Мысалдар.

7. Абстракті әдістер. Мысалдар. Қайта іске қосылатын әдістер.

8. Конструктор мен деструктор. Мысалдар.

9. Кластың қасиеті. Қасиеттің синтаксисі. Мысалдар.

10. Қасиеттің класы өрістің класынан несімен ерекшеленеді? Read, write специфиациялары.

11. Инкапсуляция. Мысал.

12. Туындау. Мысал.

13. Полиморфизм. Мысал.

14. Кластың құрылымы. Published, private, protected, public секциялары.

15. Кластарға амадар қолдану. IS және AS кілттік сөздері. Мысалдар.

16. Оқиға. Оқиғаның сипатталынуының синтаксисі. Мысалдар.

17. Процедуралық тип. Мысалдар.

18. Ең қарапайым процедуралық тип болып қандай тип табылады? Sender параметрі.

19. Оқиғаның өңдегішін қалай шақырады?

20. Оқиғаға қайта ат тағайындау. Мысалдар.

Өз бетінше орындауға арналған тапсырма

1. Объектілі – бағытталған бағдарламалаудың негізгі принциптері. Объект, хабарлама, класс, объектінің данасы және әдіс.

2. Абстракция, инкапсуляция, туындау және полиморфизм. Мысалдар.

3. Delphi – дің абстрактілі кластарының сипаттамалары (TObject, TPersistent, TComponent).

4. Delphi – дің абстрактілі кластарының сипаттамалары (TControl, TGraficControl, TWinControl, TScrollingWinControl).

5. Stored, default (немесе nodefaulte), implements спецификациялары. Мысалдар.

6. Берілгендердің динамикалық құрылымы. Нұсқағыштар, динамикалық айнымалылар. Мысалдар.

7. Variant типі. Variant типті айнымалылар. Variants модульі.


Зертханалық жұмыс №4 «Полиморфизм және көрнекілік әдістер»

Полиморфизм — бұл әртүрлі кластарға кіретін әдістерге бірдей ат тағайындау мүмкіндігі. Полиморфизмнің концепциясы Концепция полиморфизма обеспечивает в случае применения метода к объекту использование именно того метода, который соответствует классу объекта.

Біреуі қалған екеуіне базалық класс болатындай үш класс анықталсын:

Type

// базалық класс

TPerson = class

FName: String; // өрістің аты

Constructor Create(AName: String);

Function Info: String; virtual;

end;

 

// TPerson – нан туынды

TStud = class (TPerson)

FGr: Integer; // оқу тобының нөмірі

Constructor Create(Aname: String; Gr: Integer);

Function Info: String; override;

end;

 

// TPerson – нан туынды

TProf = class (TPerson)

FDep: String; // құжыраның аты

Constructor Create(AName: String; Dep: String);

Function Info: String; override;

end;

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

Төменде әрбір класс үшін Info әдісінің анықталуы келтірілген.

function TPerson.Info: String;

Begin

result:= ' ';

end;

 

functicn TStud.Info: String;

Begin

result:= FName + ' группа ' + IntToStr (FGr)

End;

 

function TProf.Info: String;

Begin

result:= FName + ' кафедра ' + FDep;

end;

Екі класс та бір базалық кластан туындағандықтан студенттер мен оқытушылардың тізімін былай жариялауға болады (бұл жерде мынаны еске алу қажет, объект дегеніміз - бұл нұсқағыш):

list: array [1..SZL] of TPerson;

Тізімді осылай жариялауға болады, өйткені Object Pascal аталық кластың нұсқағышына еншілес кластың нұсқағышының мәнін меншіктеуге мүмкіндік береді. Сондықтан list массивінің элементі Tstud класыныңжәне TProf класының элементтері бола алады.

Студенттер мен оқытушылардың тізімін Info әдісін массив элементтеріне қолдану арқылы шығаруға болады. Мысалы, былай:

st:= ' ';

for i:= 1 to SZL do // SZL – тізім – массивінің өлшемі

if list[i] <> NIL

then st:= st + list[i].Info + #13;

ShowMessage(st);

Бағдарламаның орындалуы барысында массивтің әрбір элементі TStud типті объектіден де, TProf типті объектіден де тұра алады.Полиморфизмнің коцепциясы объектіге объектінің типіне сай келетін әдісті қолдануды қамтамасыз етеді.

Келесі бағдарлама жоғарыда қарастырылған TPerson, TStud және TProf кластарының жариялануын қолдана отырып, студенттер мен оқытушылардың тізімін қалыптастырады және шығарады. Бағдарламаның мәтіні 2.1 листингісінде, ал қарым – қатынас терезесі сурет 2.1 келтірілген.

Сурет 2.1«Полиморфизм» бағдарламасының қарым – қатынас терезесі

2.1 листингісі Полиморфизмнің демонстрациясы

Unit polimor_;

Date: 2015-07-01; view: 942; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию