(instance konkrétní třídy)

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

Normalizace Řada analytiků se mylně domnívá, že pro každý objekt existuje jedno jediné univerzálně použitelné nejlepší řešení bez ohledu na řešený problém.
Seminář C++ 5. cvičení Dědičnost Ing. Jan Mikulka.
Programování funkcí v Excelu
Selektory 1 1. Selektor elementu Deklarované styly budou použité při každém vyskytování elementu v dokumentu. Selektor elementu se obvykle používá pro.
Pole, ukazatele a odkazy
ÚVOD DO CPP 7 Dědičnost - pokračování
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
Polymorfismus Dědičnost
C++ Přednáška 3 Konstantní a statické členy tříd, ukazatel this, konstantní instance třídy Ing. Jiří Kulhánek , kat. 352, VŠB TU Ostrava 2004.
C# pro začátečníky Mgr. Jaromír Osčádal
Programování v C++ Cvičení.
PROGRAMOVACÍ JAZYKY (c) Tralvex Yeap. All Rights Reserved.
Čtvrté cvičení Objektové programování Objektový model v Javě
Programování PA - 2.
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
Objekty v CLIPSu RNDr. Jiří Dvořák, CSc.
PHP PHP – základy syntaxe (část 1) - 03 Mgr. Josef Nožička IKT PHP
C# - struktury, výčtové typy, pole
State. State – kontext a problém Kontext  chování objektu má záviset na jeho stavu, který se typicky mění za běhu Neflexibilní řešení  metody obsahují.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Objektové orientované programování Objektově orientované problémy v PHP Lukáš Masopust 2008.
Objektové programování
Dostupné z Metodického portálu ISSN: , financovaného z ESF a státního rozpočtu ČR. Provozováno Výzkumným ústavem pedagogickým v Praze.
Jedenácté cvičení Vlákna. Java cv112 Vlákna Operační systém Mutitasking – více úloh se v operačním programu vykonává „současně“ Java Multithreading -
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
6. cvičení Polymorfismus
Počítače a programování 1
JavaScript Podmínky, cykly a pole.
CSS styly Kaskádové styly (CSS – Cascading Style Sheets) jsou prostředkem, který zajišťuje jednotný vzhled publikovaných stránek. Technologii CSS podporují.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
Algoritmizace a programování Objektově orientované programování - 16 Mgr. Josef Nožička IKT Algoritmizace a programování
PB161 Principy OOP - rozhraní, dědičnost PB161 | Principy OOP - Dědičnost, rozhraní
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
IB111 Programování a algoritmizace
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
JavaScript Funkce.
OSNOVA: a) Přetížení členských funkcí b) Dědičnost tříd Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 2 pro obor EST BPC2E.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
13/04/20151 Datový typ třída – class (1) Datový typ definovaný uživatelem Poskytuje mechanismus pro modelování entit, s nimiž manipulují aplikace Charakterizuje.
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
Principy OOP Objektově orientované programování vychá-zí ze třech základních principů (rysů): zapouzdření (encapsulation) dědičnost (inheritance) polymorfismus.
Objektově orientovaný přístup (úvod)
Dostupné z Metodického portálu ISSN: , financovaného z ESF a státního rozpočtu ČR. Provozováno Výzkumným ústavem pedagogickým v Praze.
Decorator. Rozšiřuje objekty o dodatečné chování  rozšiřuje konkrétní objekty, ne třídy  rozšiřuje objekt dynamicky, tj. za běhu Upřednostňuje kompozici.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Pokročilé programování v C++ (část B)
JUI přednáška Vstup a výstup, cykly RNDr. Jiří Dvořák, CSc.
Počítače a programování 1
Podprogramy (subroutines) Pojmenované kousky programu, které –tvoří logicky ucelené části –se v programu opakují Jsou zapsány na jednom místě a v případě.
Template Method. Motivační příklad – reálný svět Čaj 1) Uvař vodu 2) Dej do hrnku sáček čaje 3) Zalij hrnek 4) Přisyp cukr a vymačkej citrón Káva 1) Uvař.
Úvod do databází zkrácená verze.
Programovací jazyk C# 2. část. Datové typy C# rozeznává dva druhy datových typů, hodnotové a referenční. Hodnotové datové typy Proměnné hodnotového datového.
Programování v jazyce C++ Dědičnost a polymorfismus.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
Programování v jazyce C++ Speciality jazyka C++, úvod do OOP.
Vývojová prostředí Objektově Orientované Programování OB21-OP-EL-KON-DOL-M Orbis pictus 21. století.
Y36PJC Programování v jazyce C/C++
Úvod do C# - OOP Jaroslav BURDYS 4IT.
Definiční obor a obor hodnot
Dynamické proměnné (1) Proměnné, jejichž počet a (nebo) velikost pa-měti využívané těmito proměnnými se v prů-běhu programu mění Dynamické proměnné lze.
Bridge.
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
ZAL – 7. cvičení 2016.
Transkript prezentace:

(instance konkrétní třídy) 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í. 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

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 !

OOP 3 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

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

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).

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); ?>

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.

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

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; }

OOP 10 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í.

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.

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

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.

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.

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 { . . .}