Post on 29-Jan-2016
description
transcript
Štěpán Šípal
Obsah cvičeníObjekty
Co to jsou objektyRozdíl strukturálního a objektového
programováníZapouzdřeníPolymorfismusDědičnost
OOP programováníTřídy, inicializaceMetody a proměnné
ObjektyObjekty můžeme vidět všude kolem nás.Objekty v sobě mají uložené své vlastnosti.Objekty mají metody, které mohou ovlivňovat
jejich vnitřní stav (vlastnosti).Objekty mezi sebou vzájemně komunikují
pomocí zasílání zpráv.
Strukturální vs. OOPStrukturální programování odděluje data a
algoritmy.V objektovém programování jsou data
zapouzdřena v objektech a jejich manipulace je umožněna s pomocí metod objektu.
V objektovém programování tedy nemusíme znát a psát přesné algoritmy uložené uvnitř objektu (co se děje když dupneme na plyn v motoru), ale stačí nám znát metodu objektu, která zajistí požadovanou změnu stavu (zrychlení auta).
Strukturální vs. OOPObjekty jsou znovupoužitelné.Změny uvnitř algoritmů objektu (výměna
motoru) neovlivní funkčnost ostatních objektů (po sešlápnutí plynu bude pořád zrychlovat).
Objektové programování dává lepší předpoklady pro kvalitní rozdělení práce.
Zapouzdření objektůZapouzdření objektů nám umožňuje skrývat před
okolím vlastnosti a některé metody objektu. Díky zapouzdření tak můžeme omezit možnost
zadání chybné vlastnosti stran jiného objektu.Také díky němu můžeme objekty upravovat
nezávisle na ostatních (pokud ponecháme stejné metody rozhraní pro komunikaci s okolím). V objektu tak můžeme například změnit zdroj dat z DB na XML soubor a podobně.
Třídy v JAVATřídy v jazyce JAVA jsou v podstatě šablonami
objektů.Jejich vlastnosti jsou charakterizovány proměnnými.Operace se na nich provádějí pomocí metod.Při inicializaci třídy vytvoříme objekt – každý objekt
vytvořený na základě třídy je samostatný, má samostatné vlastnosti a metody.
V Javě inicializujeme třídy pomocí:NázevTřídy JménoProměnné = new NázevTřídy();Metody objektu budou poté dostupné pod proměnnou
„JménoProměnné“.
Třídy v JAVAObjekty v Javě spolu komunikují pomocí
zasílání zpráv – volání metod.Vždy musíme mít odkaz na instanci objektu
dostupný v některé proměnné:Kruh novy = new Kruh();
Pokud chceme na objektu vykonat nějakou metodu, zavoláme jej jménem proměnné a metody takto:novy.Vykresli();
Pokud potřebujeme získat hodnotu:Int hodnota = novy.VypoctiObsah();
Proměnné v JAVAProměnné v jazyce JAVA je nutné před použitím
inicializovat – určit jak se budou jmenovat a jakého budou typu.
int vek; //inicializace celočíselné proměnné věkV Javě existují primitivní proměnné,
obsahující jednoduchou hodnotu – číslo či text, tak proměnné sloužící jako odkaz na jiný objekt.
vek je primitivní proměnnáZamestnanec bude proměnná odkazující na
instanci třídy zaměstnance
Základní datové typy pro Javaint = celé čísloString = textboolean = TRUE/FALSE hodnota...U referenčních proměnných se jako jejich
datový typ používá název odkazované třídy.
Proměnné v Java IIProměnné se inicializují jako lokální, nebo
jako proměnné třídyLokální proměnné se inicializují uvnitř
jednotlivých metod a nejsou dostupné pro ostatní metody stejné třídy
Lokální proměnné se po provedení metody „zapomenou“
Třídní proměnné = proměnné inicializované ihned za definicí třídy jsou dostupné všem metodám dané třídy
Metody JAVAMetody ve třídách Java jsou jednotlivé
činnosti, které daný objekt může vykonávat.Metoda je základní jednotkou pro komunikaci
mezi třídami.Metoda může vracet hodnoty a může
požadovat proměnné jako parametr.Deklarace metody vracející číslo:
public int vydel(){…….}Deklarace třídy nevracející nic:
public void posunSe(){…….}
Třídy v JAVAMetody a proměnné objektů zapisujeme s
modifikátory private, public a protected.Private = nebude dostupná mimo objekt, tedy
budou ji moci změnit pouze metody objektu.Public = bude dostupná mimo objekt – obvykle
se public nechávají pouze metody rozhraní. V OOP by měly být všechny proměnné private.
Protected = nebude dostupná mimo objekt, bude však dostupná potomkům třídy.
Dědičnost třídDědičnost umožňuje určité rozšiřování
možností tříd.Nově vytvořená třída – potomek bude mít
vlastnosti a metody svého předka + jí můžeme přidat vlastní metody a vlastnosti.
Pokud tedy budeme mít například třídu Kruh(), která bude mít metodu vykresli() kreslící kruh na daný výstup, můžeme jí vytvořit potomka KruhPlus(), kterému přidáme ještě metodu vypočtiObsah() vracející obsah kruhu.
PolymorfismusDíky polymorfismu se u jednoho objektu
může vyskytovat více stejně pojmenovaných metod, odlišených na základě počtu, či typu parametru – tzv. přetížené metody.
Dále polymorfismus znamená možnost existence stejných metod požadujících stejné parametry u různých tříd, což umožňuje jejich případné zaměňování.
Abstraktní třídyZ abstraktní třídy není možné vytvořit
instanci.Jedná se o jakousi „šablonu tříd“, je určena
pro dědění a instancovat lze pouze její potomky.
Sama může mít některé metody prázdné – musíme je v potomku přepsat.
Jsou to pouze základní kameny pro stavbu složitějších tříd objektů.