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

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

(instance konkrétní třídy)

Podobné prezentace


Prezentace na téma: "(instance konkrétní třídy)"— Transkript prezentace:

1 (instance konkrétní třídy)
OOP Třída a Objekt  Třída je Datový typ  Třída obsahuje nejen Data ale i Metody, jež s těmito daty pracují. 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) Objekt 1 Objekt 2 Třída Objekt 3 Objekt N

2 OOP 2 Třída a Objekt  Dědičnost  Polymorfizmus Třída Hl metoda 1
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. Vlastnosti Metody Třída (předek) Vlastnosti Metody Třída (potomek) Třída Hl metoda 1 Objekt (instance Trídy Hl) nebo (instance Trídy A) (instance Trídy B) metoda 1 Třída A (Odvozená od Třídy Hl ) metoda 1 Třída B (Odvozená od Třídy Hl ) 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 !

3 OOP Třída a Objekt 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: - public (vlastnost viditelná odkudkoli) - 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) Příklad: <?php class Pokus1 { public $prom1; // k dispozici odkudkoli protected $prom2; // k dispozici v dané třídě nebo v odvozených třídách private $prom3; // k dispozici pouze ve této třídě } ?> 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í 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. 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: <?php $můj_nový_objekt=new Nějaká_Třída(); ?> 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. Ob1 Vlastnost: $lom Ob2 Třída A Třída B Třída Vlastnost: $lom Vlastnost: $lom Vlastnost: $lom Vlastnost: $lom Ob3 ObA ObB Vlastnost: $lom Vlastnost: $lom Vlastnost: $lom

5 OOP 5 Třída a Objekt Práce s vlastnostmi objektu Deklarace metod
Příklad: <?php $nazevObjektu->nazevVlastnosti=“hodnota”; ?> Deklarace metod Deklarace metod obvykle následuje za deklarací vlastností. Metody stejně jako vlastnosti odkazované prostřednictvím identifikátoru třídy. class MyClass { public $částka; public $stav; public function výběr($částka) { $this->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 Volaní metod
Pomocí konstanty self a operátoru :: (dvě dvojtečky) nikoli ->jako v případě dynamických vlastností <?php class MyClass { public static $some = 100; // Společná pro všechny objekty …………….. public static function Rozvrh ($r) { self::$some=$r; } Volaní metod Je nutné uvést jméno objektu a jméno metody. class Myclass { public function výběr($částka) { $this->stav - =$částka; $my_object = new Myclass(); $my_object->výběr(2000); ?>

7 OOP 7 Třída a Objekt Volaní Statické metody Konstruktor
Třeba použit dvě dvojtečky (::) místo běžného operátoru dereference ( ->) 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. Vzhledem k tomu, že žádný objekt nemusí existovat, nejsou ve statické metodě k dispozici žádné vlastnosti jednotlivých objektů ani identifikátor this. <?php class Myclass { public static function info { each “ Nějaká zpráva“; } Myclass::info(); ?> 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(). Obvykle není explicitně volán. V PHP operátor new slouží pro vyvolání konstruktoru.

8 OOP 8 Třída a Objekt Konstruktor $this->par3=$par3; }
// 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í: $MyObjekt= new Myclass(); // volání bez parametrů, budou použíty všechny standardní hodnoty (tj. $par1=3 , $par2=“text”, $par3=true) $MyObjekt= new Myclass(5); // vlastnost $par1 bude iniciálizována hodnotou 5 $MyObjekt= new Myclass(23, “nový_text“); // vlastnost $par1 bude iniciálizována hodnotou 23, a vlastnost $par2 hodnotou “nový_text” $MyObjekt= new Myclass(44, “další_text“, false); // nastaví všechny vlastnosti podle zadaných hodnot

9 OOP 9 Dědičnost Zamezení překrytí (Final)
Dědičnost – metoda, která umožňuje od jedné třídy odvozovat třídu novou (potomka). Nová Třída dědí všechny vlastnosti a metody svého předka. Navíc může je upravit. Definice: klíčové slovo extends. <?php class NovaTrida extends 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. Definice: klíčové slovo final. class AFin { privat $par; final public function somefun() { return $this->par; }

10 OOP Stejným způsobem lze zamezit překrytí vlastností třídy: <?php class AFin { final protected $muj; .. ……………….. } ?> Zamezení dědění Definice: klíčové slovo final. final class Ultimate { ….. ………………. Od takové třídy není možné odvozovat nové třídy. 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  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í. Dědění Třída A-potomek Metoda 1 (metoda 1 Třídy A je překrytá) 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. <?php class Sporžiro extends Učet { …………………………….. public function výběr (částka) { if ($this->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. <?php class Tvar { protected Delka; public function spoctiObsah() {return 0;} public function spoctiObvod() {return 0;} public function __construct($r=1) {$this->Delka=$r;} public function __toString() {return “Tvar”;} } Tvar extends extends Čtverec Kruh RT

13 OOP 13 Abstraktní třídy a metody
Je zřejmé, že implementace metod spoctiObsah() a spoctiObvod() třídy Tvar jsou zcela nepoužitelné. 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 Rozhraní
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: Rozhraní nemohou obsahovat implementovaní metody, jen metody abstraktní, a proto klíčové slovo abstract není třeba uvádět. Rozhraní nemohou obsahovat vlastnosti, jen metody (resp. jejich hlavičky). Třída může implementovat jedno či více rozhraní, aniž by to ovlivnilo možnost dědit od jiné třídy.

15 OOP 15 Rozhraní Definice rozhraní: <?php interface MyInterface {
public function spoctiObsah(); public function spoctiObvod(); } ?> Rozhraní mohou být rozšiřována podobně jako třídy pomocí klíčového slova extends. interface Dalsi extends MyInterface { public function GeoFun(); Třída může implementovat několik rozhraní. Použiva se klíčové slovo implements a jednotlivé rozhraní jsou oddělena čárkou. class X extends Y implements InterF1, InterF2, InterF3 { . . .}


Stáhnout ppt "(instance konkrétní třídy)"

Podobné prezentace


Reklamy Google