Objektové programování Štěpán Šípal
Obsah cvičení Objekty OOP programování Co to jsou objekty Rozdíl strukturálního a objektového programování Zapouzdření Polymorfismus Dědičnost OOP programování Třídy, inicializace Metody a proměnné
Objekty Objekty 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. OOP Strukturá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. OOP Objekty 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 JAVA Tří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 JAVA Objekty 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 JAVA Promě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ěk V 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 Java int = celé číslo String = text boolean = 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 II Proměnné se inicializují jako lokální, nebo jako proměnné třídy Loká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 JAVA Metody 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 JAVA Metody 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říd Dě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.
Polymorfismus Dí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řídy Z 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ů.