Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

OOP 1 Třída a Objekt  Třída je Datový typ  Třída obsahuje nejen Data ale i Metody, jež s těmito daty pracují. Objekty Můžeme vytvářet jednotlivé proměnné.

Podobné prezentace


Prezentace na téma: "OOP 1 Třída a Objekt  Třída je Datový typ  Třída obsahuje nejen Data ale i Metody, jež s těmito daty pracují. Objekty Můžeme vytvářet jednotlivé proměnné."— Transkript prezentace:

1 OOP 1 Třída a Objekt  Třída je Datový typ  Třída obsahuje nejen Data ale i Metody, jež s těmito daty pracují. Objekty Můžeme vytvářet jednotlivé proměnné tohoto typu, tj. Objekty (instancí konkrétní třídy) Třída obecný popis (abstraktní) Objekt konkrétní zástupce dané třídy  Každý Objekt patří do určité třídy  Můžeme od jedné třídy vytvořit několik Objektů (instancí) Třída Objekt (instance konkrétní třídy) Třída Objekt N Objekt 3 Objekt 2 Objekt 1

2 OOP 2 Třída a Objekt  Dědičnost Dědičnost umožňuje vytvářet nové třídy odvozením od již existujících tříd. Nová třída automaticky získává (dědí) všechny vlastnosti a metody svého předka. dědění  Polymorfizmus Polymorfizmus umožňuje všudy tam, kde požadujeme Objekt určité třídy poskytnout Objekt libovolné třídy, která odvozená od této třídy. Odvozená třída dědí všechny vlastnosti a metody. Třída (předek) Třída (potomek) Třída Hl metoda 1 metoda 1 Třída A (Odvozená od Třídy Hl ) metoda 1 metoda 1 Třída B (Odvozená od Třídy Hl ) metoda 1 Objekt (instance Trídy Hl) nebo (instance Trídy A) nebo (instance Trídy B) metoda 1 Chovaní metody 1 ve Třídách A a B může být odlišné od chovaní metody 1 ve Třídě Hl ! Vlastnosti Metody Vlastnosti Metody

3 OOP 3 Třída a Objekt Vlastnosti (členské proměnné) jsou interní proměnné dané trídy. Vlastnosti (členské proměnné) jsou interní proměnné dané trídy.  Existují Vlastnosti společné pro všechny Objekty dané třídy (tzn. Statické vlastnosti)  Vlastnosti se liší řízením přístupu (viditelnost). Modifikátory přístupu: Modifikátory přístupu: - public (vlastnost viditelná odkudkoli) - public (vlastnost viditelná odkudkoli) - protected (vlastnost je k dispozici pouze v dané třídě a v třídách odvozených) - protected (vlastnost je k dispozici pouze v dané třídě a v třídách odvozených) - private (vlastnost je k dispozici pouze ve třídě, v niž je definována) - private (vlastnost je k dispozici pouze ve třídě, v niž je definována)Příklad: ?> Metody (členské funkce) jsou funkce, jež manipulují s daty objektu (instance). Funkce jsou svázány s daty uvnitř definice třídy. Spojení dat i metod pro manipulaci s nimi zapouzdření Spojení dat i metod pro manipulaci s nimi zapouzdření  Třídy mohou mít Statické metody (tj. metody jež je možné volat bez vytvoření instance objektu) Modifikátor static pro deklarace statické metody. Modifikátor static pro deklarace statické metody.Vlastnosti

4 OOP 4 Třída a Objekt Vytváření instancí Instance Třídy = Objekt Objekty jsou vytvářeny pomocí operátora new a určení jejího jména Příklad: Proměnná můj_nový_objekt reprezentuje Objekt se všemi jeho Vlastnosti a Metodami. Práce s vlastnostmi objektu  Přístup k jednotlivým vlastnostem objektu prostřednictvím identifikátoru objektu. Odkaz na Jméno vlastnosti třídy --  vždy přes jméno objektu !! (Např. $Ob1->lom) Příklady: 1. Více objektů stejné třídy (nebylo by poznat, k vlastnosti kterého objektu chceme přistupovat) 2. Ruzné třídy mají vlastnosti stejného jména. Třída Vlastnost: $lom Třída BTřída A Vlastnost: $lom Ob1 Ob2 Ob3 ObAObB Vlastnost: $lom

5 OOP 5 Třída a Objekt Práce s vlastnostmi objektu Příklad: nazevVlastnosti=“hodnota”; ?> Deklarace metod  Deklarace metod obvykle následuje za deklarací vlastností.  Metody stejně jako vlastnosti odkazované prostřednictvím identifikátoru třídy. Příklad: stav - =$částka; } ?> Slovo this: Při každém přístupu k vlastnosti třídy je třeba zadávat jméno příslušného objektu. V definice třídy jméno objektu, který bude vytvořen není známo. Pro přístup ke všem vlastnostem (proměnným) slouží identifikátor this. Identifikátor this odkazuje na aktuální instanci třídy (tj. na Objekt).

6 OOP 6 Třída a Objekt Odkaz na statické proměnné třídy self Pomocí konstanty self a operátoru :: (dvě dvojtečky) nikoli ->jako v případě dynamických vlastností stav - =$částka; } $my_object = new Myclass(); $my_object->výběr(2000); ?>

7 OOP 7 Třída a Objekt Volaní Statické metody Třeba použit dvě dvojtečky (::) místo běžného operátoru dereference ( ->) volat i bez vytvoření objektu  Statické metody je možné volat i bez vytvoření objektu. Proto se při volaní neuvádime jméno objektu (instance). Uvádime pouze jméno třídy. this  Vzhledem k tomu, že žádný objekt nemusí existovat, nejsou ve statické metodě k dispozici žádné vlastnosti jednotlivých objektů ani identifikátor this.  Všechny statické metody lze zároveň volat i běžným způsobem (přes jméno objektu) když vytvářime objekt (přes jméno objektu). Např. $jmeno_objektu->info(); Konstruktor Konstruktor – je speciální metoda třídy, která slouží k její inicializaci. Konstruktor se jmenuje __construct(). new Obvykle není explicitně volán. V PHP operátor new slouží pro vyvolání konstruktoru.

8 OOP 8 Třída a Objekt Konstruktor // deklarace konstruktoru public function __construct($par1=3, $par2=“text”, $par3=true) { $this->par1=$par1; $this->par2=$par2; $this->par3=$par3; } Tento zápis umožňuje ruzné volání: 1.$MyObjekt= new Myclass(); // volání bez parametrů, budou použíty všechny standardní hodnoty (tj. $par1=3, $par2=“text”, $par3=true) 2.$MyObjekt= new Myclass(5); // vlastnost $par1 bude iniciálizována hodnotou 5 3.$MyObjekt= new Myclass(23, “nový_text“); // vlastnost $par1 bude iniciálizována hodnotou 23, a vlastnost $par2 hodnotou “nový_text” 4.$MyObjekt= new Myclass(44, “další_text“, false); // nastaví všechny vlastnosti podle zadaných hodnot

9 OOP 9 Dědičnost Dědičnost – metoda, která umožňuje od jedné třídy odvozovat třídu novou (potomka). Třída  Nová Třída dědí všechny vlastnosti a metody svého předka. Navíc může je upravit. Definiceextends Definice: klíčové slovo extends. NovaTrida PuvTrida.  Nová třída NovaTrida může přidat nové vlastnosti a přepsat (nahradit novou verzí) některé z metod původní třídy PuvTrida. Zamezení překrytí (Final) Předefinování funkcí v odvozené třídě může způsobit problem (např. bezpečnostní problem). Nikdy nevíme, jak se budou chovat metody potomků náší třídy, a zda neumožní provádět akce, jež jsme v původní třídě zakázali. Definicefinal Definice: klíčové slovo final. par; } } ?>

10 OOP 10  Stejným způsobem lze zamezit překrytí vlastností třídy: Zamezení dědění Definicefinal Definice: klíčové slovo final. Od takové třídy není možné odvozovat nové třídy. muj  Uvedená vlastnost muj bude sice k dispozici ve všech odvozených třídách, ale nebude možné její definicí (především přístupová práva –viditelnost) měnit.  Ovozené třídy mohou měnit viditelnost svých vlastností i metod pouze směrem ke „slabšímu“ zabezpečení.

11 OOP 11 Volání metod předka Třída A Metoda 1 Třída A-potomek Metoda 1 (metoda 1 Třídy A je překrytá) Dědění  Někdy potřebujeme metody (např. metody A) v nové třídě překryt, ale zároveň mít přístup i k metodě původní.  Občas potřebujeme mít možnost metodu předka v nové metodě zavolat abychom nemuseli opakovat celý kód znovu. Klíčové slovo parent:: nahrazuje jméno třídy, takže jej již není třeba uvádět. stav - $částka >= $this->kontocurrent) parent::výběr ($částka); // volání metody předka } ?> Nová funkce výběr() otestuje, zda je možné částku z konta strhnout, a poté na vlastní provedení operace volá metodu předka.

12 OOP 12 Abstraktní třídy a metody Jsou případy, kdy potřebujeme mít společného předka, který bude obsahovat celou řadu metod a vlastností společných pro všechny třídy-potomky. Např. Třída Tvar může mít následující potomky: Čtverec, Kruh, RT. Třída Tvar bude obsahovat metody (napr. spoctiObsah() a spoctiObvod()), které mohou mít potomky. Kromě toho, Třída Tvar může mít vlastnost Delka. Tato vlastnost může být použita potomky. U čtverce a RT to bude strana, u kruhu poloměr. Delka=$r;} public function __toString() {return “Tvar”;} } Tvar ČtverecKruhRT extends

13 OOP 13 Abstraktní třídy a metody  Je zřejmé, že implementace metod spoctiObsah() a spoctiObvod() třídy Tvar jsou zcela nepoužitelné. abstraktní metoda Metoda, která neobsahuje žádnou implementaci, je abstraktní metoda.  Nepoužitelná je i třída Tvar. Nemůžeme vytvářet instance třídy Tvar. Jejím jediným účelem je umožnit dědění a zajistit tak, že všechny odvozené třídy budou obsahovat některé základní vlastnosti. Taková třída je abstraktní třída. Abstraktní třída vypadá jako každá jiná, ale není možné vytvářet její instance.  Každá třída, jež obsahuje alespoň jednou abstraktní metodu (vlastní či zděděnou) musí být deklarována jako abstraktní.  Jakákoli třída, která odvozená od abstraktní třídy, musí poskytnout implementaci abstraktní metody, nebo danou metodu opět deklarovat jako abstraktní. Abstraktní třída slouží jako vzor pro chování odvozených tříd. Můžeme definovat základní chování tříd určením metod, jež mají obsahovat. Nemusíme takové metody implementovat.  Hlavní cíl: 1. zamezit vytváření nesmyslných instancí; 2. vynutit implementaci námi určených metod v odvozených třídách.

14 OOP 14 Abstraktní třídy a metody Třída Tvar musí být deklarována následně: abstract class Tvar { protected delka; abstract public function spoctiObsah(); public function __construct ($r) {this->delka=$r;} public function __toString() {return “Tvar”;} } Rozhraní Rozhraní (interface) – umožňuje definovat rozhraní třídy s okolím,tedy metody, jež musí příslušná třída povinně implementovat. Jedná se pouze o definice hlaviček, nikoli implementaci. Rozdíly mezi abstraktní třídou a rozhraním: 1.Rozhraní nemohou obsahovat implementovaní metody, jen metody abstraktní, a proto klíčové slovo abstract není třeba uvádět. vlastnosti 2.Rozhraní nemohou obsahovat vlastnosti, jen metody (resp. jejich hlavičky). 3.Třída může implementovat jedno či více rozhraní, aniž by to ovlivnilo možnost dědit od jiné třídy.

15 OOP 15Rozhraní Definice rozhraní:  Rozhraní mohou být rozšiřována podobně jako třídy pomocí klíčového slova extends.  Třída může implementovat několik rozhraní. Použiva se klíčové slovo implements a jednotlivé rozhraní jsou oddělena čárkou.


Stáhnout ppt "OOP 1 Třída a Objekt  Třída je Datový typ  Třída obsahuje nejen Data ale i Metody, jež s těmito daty pracují. Objekty Můžeme vytvářet jednotlivé proměnné."

Podobné prezentace


Reklamy Google