Objekt Korytnačka
V doterajších príkladoch sme zadefinovali a používali buď celočíselné
premenné (integer)
alebo premenné typu Kor -- t.j. korytnačky.
Tieto korytnačkové premenné sa líšia od "obyčajných" premenných tým,
že
-
si pamätajú svoj momentálny stav v svojich tzv. stavových premenných
(napr. pozícia, farba, tvar, ...)
-
majú svoje súkromné príkazy, pomocou ktorých ich nejako riadime, resp.
meníme ich stavové premenné -- takýmto príkazom -- sú to procedúry -- hovoríme
metódy
a
"rozumejú" im len korytnačky (premenné typu Kor)
-
musia byť vytvorené (nielen deklarované) špeciálnym spôsobom ( Kor.Create(...);)
a kým sa takto nevytvoria, nesmú sa vôbec používať
-
takýmto premenným hovoríme OBJEKT a typom, z ktorých vytvárame objekty
(napr. Kor) hovoríme TRIEDA (po anglicky object a
class);
niekedy sa objektu hovorí aj inštancia triedy.
-
okrem korytnačiak sme sa už stretli aj s inými objektami, napr. grafická
plocha, Form1, Image1, Button1 aj premenná g,
ktorá bola inštanciou triedy
TCanvas
-
zatiaľ si o objektoch treba zapamätať, že sú to premenné, ktoré v sebe
môžu obsahovať veľa stavových premenných tiež "v sebe" obsahujú nejaké
svoje procedúry (metódy) => tomuto hovoríme zapúzdrenie (enkapsulácia),
lebo v jednom "púzdre" sú aj údaje (stavové premenné) aj algoritmy (metódy),
ktoré vedia s týmito údajmi pracovať.
Vlastnosti:
-
enkapsulácia (encapsulation - zapúzdrenie)
nový dátový
typ trieda (class)
spojenie typu
record a procedúry/funckcie pre manipuláciu so stavovými premennými
-
dedičnosť (inheritance)
od definovaného
objektu môžeme odvodiť celú hierarchiu objektov
t.j. potomkov,
ktoré dedia prístup k dátovým aj programovým zložkám
-
polymorfizmus
zdielanie akcií v
hierarchii objektov
! Otvorme si Delphi a začnime s novým projektom
File
--> New Application.
Nezabudnite do časti uses
Unitu1
dopísať na začiatok
KorUnit, projekt si
zapíšte
do nového adresára a do tohto adresára si zapíšte aj súbor
KorUnit.pas.
Do formulára vložme
Image
a Button. Napíšme jeho inicializačnú
procedúru.
Na minulej aktivite sme kreslili obrázky a definovali ich na tlačidlá.
Lenže to sú vlastne procedúry, ktoré sa vzťahujú na korytnačku, takže by
bolo prirodzené, keby to boli jej metódy -- každý objekt typu korytnačka
by vedel nakresliť napr. štvorec.
Ako to urobiť
-
mohli by sme otvoriť unit KorUnit.pas a dopĺňať tieto metódy --
to sa veľmi nepoužíva
-
môžeme si zadefinovať potomka triedy Kor, ktorému naprogramujeme
nové metódy
Použime druhú možnosť a v editore Unitu1 a do časti implementation
dopíšme deklarácie novej triedy a definíciu novej metódy:
|
type MyKor = class(Kor)
procedure Stvorec(d:integer);
end;
procedure MyKor.Stvorec(d:integer);
var i:integer;
begin
for i:=1 to 4 do
begin dopredu(d); vpravo(90); end;
end; |
|
|
-
trieda MyKor je potom triedy Kor, t.j. pozná všetky metódy,
ktoré má zadefinované trieda Kor, napr. Dopredu, Vlavo...
-
môže mať svoje vlastné premenné a metódy -- teraz napr. metódu Stvorec,
definície metód napíšeme hneď za deklaráciu triedy
! Na stlačenie Button1 nakreslite štvorec
veľkosti 40. Nezabudnite zadeklarovať objekt -- inštanciu triedy MyKor
, napr. var K: MyKor; a vytvoriť ho pomocou K:=MyKor.Create(0,0,0);
--
inak Delphi vyhlasujú chybu.
Vytvorte ďalší objekt typu MyKor, napr. K1, ale vytvorte
na inom mieste, napr. K1:=MyKor.Create(100,100,45);
Na stlačenie Button1 nech obe tieto inštancie nakreslia štvorec.
Uvedomte si rozdiel medzi definíciami z tejto a z minulej aktivity:
Vtedy bolo potrebné pre každú
korytnačku napísať časť programu na kreslenie nejakého obrázka
Teraz je samotné kreslenie obrázka metóda celej triedy
MyKor
a teda všetky inštancie tejto triedy môžu túto metódu použiť.
Súbor vznikol na základe prednášok Andreja
Blaha