Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Delphi
Naučte se programovat v Delphi (9. díl) - Objekty
30. října 2001, 00.00 | V dnešním díle seriálu si probereme Objekty a obecné zásady práce s nimi. Vysvětlíme si pojmy dedičnost, přístupová práva apod.
Základy OOP
Object Pascal je objektově orientovaný jazyk, proto budeme hovořit o objektově orientovaném programování (dále jen OOP). OOP je často skloňovaným pojmem v oblasti programování. Dnes se vám pokusím vysvětlit hlavní principy OOP.
Nejčastěji se objekt srovnává se záznamem (record).
Samozřejmě záznam není to samé co objekt a nyní vám popíší rozdíly mezi nimi,
protože podle nich velmi dobře (podle mého mínění) pochopíte podstatu objektu.
Nejprve uvedu příklad objektu a pak si probereme jednotlivé řádky kódu.
|
Objekty se uvozují klíčovým slovem class (u zánamu record). Za class může následovat uvedení předka v závorce protože objekty mohou po předkovi dědit vlastnosti, atributy a metody, ale o tom až později. Na rozdíl od záznamu mohou mít objekty procedury a funkce, kterým souhrnně říkáme metody objektu. Naproti tomu proměnným, které může záznam obsahovat také, říkáme atributy.
Metody, které jsou uvedené v deklaraci objektu mají tzv. neúplnou deklaraci, protože deklarace metody se provádí ve dvou krocích. Nejdřív se uvede její identifikátor spolu s proměnnými v těle objektu a její definice se musí uvést zvlášť v sekci implementation.
|
Je tu ještě jeden rozdíl oproti záznamu. Záznamovou proměnnou stačí deklarovat za klíčovým slovem var a už s ní můžete pracovat. Takto to u objektů nefunguje. Instance (objektová proměnná) jen ukazuje na určitou oblast paměti. Vlastní objekt vytvoříme pomocí konstruktoru a pak zrušíme pomocí destruktorů.
Konstruktory a destruktory
Jak už jsem psal, konstruktorem se objekt vytvoří a destruktorem zruší. Zatímco konstruktor existuje jen jeden, destruktory existují dva.
Konstruktor je vlastně metoda Create, která se volá až když máme deklarovanou instanci objektu.
|
A teď už můžeme s objektem pracovat. Můžeme přiřazovat proměnným hodnoty, volat metody atd.
|
V Javě se už dál nemusíte o odstranění objektu starat, protože obsahuje garbage collector, který odstraňuje objekty, na které už není žádný odkaz. Takhle to v Object Pascalu nefunguje. Zde se musíme o zrušení objetku postarat my. K tomu nám Object Pascal nabízí hned dva destruktory, Free a Destroy. Oba slouží k odtranění objektu z paměti, ale přesto jsou rozdílné. Zatímco Free testuje, zda objekt skutečně existuje a pak ho odstraní, Destroy se ho rovnou pokusí odstranit. Proto byste měli dávat přednost destruktoru Free.
Dědičnost
Každý objekt má svého předka. Pokud neuvedete předka objektu, od kterého má objekt dědit vlastnosti, atributy a metody, přiřadí se objektu předek TObject.
|
Mohlo by se zdát, že BojoveLetadlo má jen atributy maRakety a pocetRaket, ale není tomu tak. Jak už jsem psal, tak objekty dědí vlastnosti od svého předka, tím je v tomto případě Letadlo. Takže BojoveLetadlo má vlastnost palivo, maPasazery atd. Chcete důkaz? Zkuste si vytvořit objekt typu TBojoveLetadlo a přiřadit jeho vlastnosti palivo nějakou hodnotu.
|
Překrývání
Někdy se může stát, že u potomka uvedete metodu, která má stejný identifikátor, ale třeba rozdílnou implementaci. V tomto případě nová metoda nahradí tu stávající. Těmto metodám říkáme statické.
V Objekt Pascalu můžeme za neúplnou deklaraci uvést klíčové slovo virtual, kterým kompilátoru říkáme, že metodu nechceme nahradit, ale jen překrýt, což se provádí příkazem override.
|
Mohlo by se vám zdát, že metoda Let() z objektu TBojoveLetadlo překrývá metodu Let() z objektu TLetadlo, ale není tomu tak. Na rozdíl od statické metody, kdy je překrytá metoda ztracena u virtuální metodu můžeme klíčovým slovem inherited zavolat metodu předka.
Vlastnosti
Vlastnosti už znáte, např. většina komponent má vlastnost enabled typu boolean. Stejně jako všechny objekty, mohou mít i námi definované objekty proměnné. Vlastnost může vypadat jako obyčejná objektová proměnná (může to být i funkce nebo procedura), ale není to obyčejný atribut. Na rozdíl od atributu je vlastnost deklarována klíčovým slovem property, potom následuje typ vlastnosti a tzv. čtecí a zapisovací část.
|
Čtecí a zapisovací část musejí být deklarovány jako objektové metody. Demonstraci použití čtecí a zapisovací procedury předvedu na vlastnosti left objektu TObject;
|
Jak už jsem výše uvedl, vlastnosti se dědí s každým novým objektem.
Přístupová práva
Snad v každém objektově orientovaném jazyku můžete nastavit přístupová práva. V Object Pascalu se o dělá pomocí klíčových slov private, public, protected a published. První dva určují zda budou atributy nebo metody viditelné z vnější jednotky. Klíčové slovo public to dovoluje, ale private ne. Pomocí published se také zveřejňují metody a atributy stejně jako u public, ale u published obsahují metody a vlastnosti informace pro běh programu, díky kterým vidíme dané vlastnosti v Object Inspectoru. Aby toto bylo možné je nutné kompilovat předka nebo rovnou daný objekt s příkazem kompilátoru $M, o tom až v některé z dalších kapitol. Abyste si otestovali omezení přístupu nemusíte chodit daleko, předem předdefinovaná aplikace s formulářem obsahuje tento kód.
|
Příkaz protected funguje dobně jako
private, ale přístup nemusí být ze stejné jednotky.
Všechny tyto příkazy lze použít na atributy, metody a vlasnosti objektu.
Obsah seriálu (více o seriálu):
- Naučte se programovat v Delphi (1. díl) - Trocha historie
- Naučte se programovat v Delphi (2. díl) - Object Pascal
- Naučte se programovat v Delphi (3. díl) - Seznámení s vývojovým prostředím
- Naučte se programovat v Delphi (4. díl) - První program
- Naučte se programovat v Delphi (5. díl) - Datové typy, proměnné a konstanty
- Naučte se programovat v Delphi (6. díl) - Operátory, funkce a procedury
- Naučte se programovat v Delphi (7. díl) - Řízení toku programu
- Naučte se programovat v Delphi (8. díl) - Typy, záznamy a pole
- Naučte se programovat v Delphi (9. díl) - Objekty
- Naučte se programovat v Delphi (11. díl) - Práce se soubory
Diskuse k článku
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007