Základní pojmy OOP. Třída, objekt, jeho vlastnosti. Metody, proměnné. Konstruktory. Obsah Třída, objekt, jejich vlastnosti........................................................................................2 Co je třída a objekt?.............................................................................................................2 Vlastnosti objektu (1)...........................................................................................................3 Vlastnosti objektu (2)...........................................................................................................3 Deklarace a použití třídy...............................................................................................4 Příklad - deklarace třídy Person .............................................................................................4 Příklad - použití třídy Person (1) ............................................................................................4 Příklad - použití třídy Person (2) ............................................................................................5 Vytváření objektů................................................................................................................5 Shrnutí..............................................................................................................................5 Proměnné ..................................................................................................................6 Proměnné - deklarace...........................................................................................................6 Proměnné - datový typ .........................................................................................................6 Proměnné - jmenné konvence ................................................................................................7 Proměnné - použití ..............................................................................................................7 Proměnné - modifikátory přístupu ..........................................................................................8 Proměnné - použití (2) .........................................................................................................8 Metody .....................................................................................................................8 Metody .............................................................................................................................8 Metody -příklad .................................................................................................................9 Volání metod .....................................................................................................................9 Volání metod - přiklad .........................................................................................................9 Parametry metod...............................................................................................................10 Předávání skutečných parametrů metodám.............................................................................10 Příklad předávání parametrů - primitivní typy .........................................................................11 Příklad předávání parametrů - objektové typy (1) ....................................................................11 Příklad předávání parametrů - objektové typy (2) ....................................................................12 Návrat z metody ...............................................................................................................12 Konstruktory ............................................................................................................13 Konstruktory ....................................................................................................................13 Konstruktory (2) ...............................................................................................................14 Přetěžování metod.....................................................................................................14 Přetěžování......................................................................................................................14 Přetěžování - příklad..........................................................................................................14 Přetěžování - příklad (2) .....................................................................................................15 Přetěžování - příklad (3) .....................................................................................................15 1 Základní pojmy OOP. Třída, objekt, jeho vlastnosti. Metody, proměnné. Odkazy na objekty (instance).......................................................................................15 Odkazy na objekty (instance)...............................................................................................15 Přiřazování objektových proměnných....................................................................................15 Vracení odkazu na sebe......................................................................................................16 Řetězení volání.................................................................................................................17 Statické proměnné a metody........................................................................................17 Proměnné a metody třídy - statické .......................................................................................17 Příklad statické proměnné a metody......................................................................................18 Úvod do objektového programování Pojmy: třída, objekt Deklarace a definice tříd, jejich vlastnosti (proměnné, metody) Vytváření objektů (deklarace sama objekt nevytvoří...), proměnné odkazující na objekt Jmenné konvence -jak tvořit jména tříd, proměnných, metod Použití objektů, volání metod, přístupy k proměnným Modifikátory přístupu/viditelnosti (public, protected...) Konstruktory (dotvoří/naplní prázdný objekt) Přetěžování metod (dvě metody se stejným názvem a jinými parametry) Třída, objekt, jejich vlastnosti Co je třída a objekt? Tnda (také poněkud nepřesně zvaná objektový typ) představuje skupinu objektů, které nesou stejné vlastnosti stejné" je myšleno kvalitativně, nikoli kvantitativně, tj. např. všechny objekty třídy PersonWiKIPEfllA Dir Vnf Fil i. Lfi^bi [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=Person] mají vlastnost na-meWlKlPFrílA [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=name], Dir ľnr Fir ■■ L-raib i tato vlastnost má však obecně pro různé lidi různé hodnoty - lidi mají různá jména Objekt je jeden konkrétní jedinec (reprezentant, entita) příslušné třídy pro konkrétní objekt nabývají vlastnosti deklarované třídou konkrétních hodnot 2 Konstruktory. Přiklad: • Třída PersonWlfCIPF.rilA íli r priT r ik i. u n n L ■ [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=Person] má vlastnost name WlKIPF.MA [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=name] ílir rni" Fib i. ĽniL ■ • Objekt panProfesorWlKIPFMA TTír Fni- Fík ■■ L-^b-iL i [http ://cs .wikipedia. org/wiki/Speci%C3 %A 1 ln%C3 %AD: Search?search=panProfesor] typu P e r -sonWlKIÍ'ľ.íJlA ILr F^-T..rLľA. [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=Person] má vlastnost na-meWlKIPFMA [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=name] s Trir p'pit pil i. L-^a-iL i hodnotou "Václav Klaus "WUCIPFMA ľ" i p p*pi a> Fik i. I ■ ■■ a b i [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search="Václav Klaus"]. Vlastnosti objektu (1) Vlastnostmi objektů jsou: • proměnné • metody Vlastnosti objektů - proměnné i metody -je třeba deklarovat. viz Sun Java Tutorial / Trail: Learning the Java Language: Lesson: Classes and Inheritance [http://java.sun.com/docs/booksAutorial/java/javaOO/classes.html] Vlastnosti objektu (2) Proměnné 1. jsou nositeli "pasivních" vlastností; jakýchsi atributů, charakteristik objektů 2. de facto jde o datové hodnoty svázané (zapouzdřené) v objektu Metody 1. jsou nositeli "výkonných" vlastností; "dovedností" objektů 2. de facto jde o funkce (procedury) pracující (převážně) nad proměnnými objektu 3 Základní pojmy OOP. Třída, objekt, jeho vlastnosti. Metody, proměnné. Deklarace a použití třídy Příklad - deklarace třídy Person • deklarujme třídu objektů - lidí public class Person { protected String name; protected int age; public Person(String n, int a) { name = n; age = a; } public void writelnfo () { System.out.println("Person:"); System.out.println("Name "+name); System.out.println("Age "+age); } } • Použij me j i v programu - 1. vytvořme instanci - objekt - typu PersonWlŤflPFľllA ílir p ni1 pil i. L nikl [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=Person] 2. vypišme informace o něm Příklad - použití třídy Person (1) Mějme deklarovánu třídu Person Metoda main v následujícím programu DemoWlKIPFľllA ill p V ni1 Fib u Lniii [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=Demo]: 1. vytvoří 2 lidi (pomocí new Person) 2. zavolá j ej ich metody vypislnfo( Uhr rn-i-PiLi.Uiv-iki [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=vypisInfo()] 4 Konstruktory. public class Demo { public static void main(String[] args) { Person ales = new Person("Ales Necas", 38); Person beata = new Person("Beata Novákova", 36); ales.writelnfo(); beata.writelnfo(); } } Tedy: vypíší se informace o obou vytvořených objektech - lidech. Nyní podrobněji k proměnným objektů. Příklad - použití třídy Person (2) Ve výše uvedeném programu znamenalo na řádku: Person ales = new Person("Ales Necas", 38); Person alesWlKIPFIllA ill p p pit FiL i. lin^bi [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=Person ales]: pouze deklarace (tj. určení typu) proměnné ales - bude typu Person. ales = new Person ("Ales Necas", 38)WlKIPFniA ill r p m- pil i. LiniLi [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=ales = new Person ("Ales Necas", 38)]: vytvoření objektu Person se jménem Ales Necas. Lze napsat zvlášť do dvou řádků nebo (tak jak jsme to udělali) na řádek jeden. Každý příkaz i deklaraci ukončujeme středníkem. Vytváření objektů Ve výše uvedených příkladech jsme objekty vytvářeli voláními new Person(...)WlK:iPErjlA "Ifcr Fni- Fib i. L-^i-ib ■ [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=new Person(...)] bezděčně jsme tak použili • operátor new, který vytvoří prázdný objekt typu Person a • volání konstruktoru, který prázdný objekt naplní počátečními údaji (daty). Shrnutí 5 Základní pojmy OOP. Třída, objekt, jeho vlastnosti. Metody, proměnné. Objekty: • jsou instance "své" třídy • vytváříme je operátorem newWltlPfiľllA Hli r priT riii i. Laanb i [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=new] - voláním konstrukto-ru • vytvořené objekty ukládáme do proměnné stejného typu (nebo typu předka či implementovaného rozhraní - o tom až později) Proměnné Proměnné - deklarace Položky nameWlrlPF.rilA Ti r hni" Fík ■■ l-aink i [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=name] a ageWlKIPFFHA Imp p pit riL i. Ľaini i [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=age] v předchozím příkladu jsou proměnné objektu PersonWlFCIPFDlA flip P m1 pil i. LniBi [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=Person]. Jsou deklarovány v těle deklarace třídy Person. Deklarace proměnné objektu má tvar: modifikátory TypProměnné jménoProměnné; WlKlPf.TJlA íli p p pit rik i. L-aanL i [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=modifikátory TypProměnné j ménoProměnné;] např.: protected int age "*i " 11T :, ťim:r. [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=protectedintage;] Proměnné - datový typ Výše uvedená proměnná rokNarozeniWlKIPFDlA Tri p p n i ■ pil i. I ■ ■ ■ i fa ■ [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=rokNarozeni] měla datový typ int (32bitové celé číslo). Tedy: proměnná takového typu nese jednu hodnotu typu celé číslo (v rozsahu -2A31.. 2A31-1); • nese-li jednu hodnotu, pak se jedná o tzv. primitivní datový typ. 6 Konstruktory. Kromě celých čísel int nabízí Java celou řadu dalších primitivních datových typů. Primitivní typy jsou dané napevno, programátor je jen používá, nedefinuje. Tam, kde nestačí diskrétní hodnoty (tj. primitivní typy), musíme použít typy složené, objektové. • Objektovými typy v Jávě jsou třídy (class) a rozhraní (interface). Třídy už jsme viděli v příkladu Person. • Existují třídy definované přímo v Jávě, v knihovně Java Core API. • Nenajdeme-li tam třídu, kterou potřebujeme, můžeme šiji nadefinovat sami - viz Person. Proměnné -jmenné konvence Na jméno (identifikátor) proměnné sice Java neklade žádná speciální omezení (tedy mimo omezení platná pro jakýkoli identifikátor), ale přesto bývá velmi dobrým zvykem dodržovat při pojmenovávání následující pravidla (blíže viz podrobný rozbor na http://java.sun.com/docs/codeconv/): • jména začínají malým písmenem • nepoužíváme diakritiku (problémy s editory, přenositelností a kódováním znaků) (raději ani český jazyk, angličtině rozumí "každý") • je-li to složenina více slov, pak je nespojujeme podtržítkem, ale další začne velkým písmenem (tzv. "CamelCase") např.: protected int rokNarozeni; WlrlPF.ÍllA "Flip r'n-i- Fib ■ L-^a-ik i [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search= protected int rokNarozeni;] je identifikátor se správně (vhodně) utvořeným jménem, zatímco: protected int RokNarozeni ;WlKIPFI)lA **i - nT i.ň.ir, [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search= protected int RokNarozeni;] není vhodný identifikátor proměnné (začíná velkým písmenem) Dodržování těchto jmenných konvencí je základem psaní srozumitelných programů a bude vyžadováno, sledováno a hodnoceno v odevzdávaných úlohách i písemkách. Proměnné - použití Proměnné objektu odkazujeme pomocí "tečkové notace": 7 Základní pojmy OOP. Třída, objekt, jeho vlastnosti. Metody, proměnné. public class Demo2 { public static void main(String[] args) { Person ales = new Person("Ales Necas", 38); // vytvořeni objektu ... System.out.println(ales.name); // přistup k (čteni) jeho proměnné ... ales.name = "Aleš Novák"; // modifikace (zápis do) jeho proměnné } } Proměnné - modifikátory přístupu Přístup k proměnným (i metodám) může být řízen uvedením tzv. modifikátoru před deklaraci prvku, viz výše: // protected = přistup pouze z třidy ve stejném baliku nebo z podtřidy: protected String name; Modifikátoru je více typů, nejběžnější jsou právě zmíněné modifikátory přístupu (přístupových práv) Proměnné - použití (2) Objektů (tzv. instancí) stejného typu (tj. stejné třídy) si můžeme postupně vytvořit více: public class Demo3 { public static void main(String[] args) { Person ales = new Person("Ales Necas", 38); // vytvořeni prvniho objektu Person petr = new Person("Petr Svoboda", 36); // vytvořeni druhého objektu System.out.println(ales.name); // přistup k (čteni) proměnné - prvnimu obje System.out.println(petr.name); // přistup k (čteni) proměnné - druhému obje } } Existují tady dva objekty, každý má své (obecně různé) hodnoty proměnných - např. jsou různá jména obou lidí. Metody Metody Nad existujícími (vytvořenými) objekty můžeme volat jej ich metody. Metoda je: • podporgram (funkce, procedura), který primárně pracuje s proměnnými "mateřského" objektu, • může mít další parametry Konstruktory. • může vracet hodnotu podobně jako v Pascalu funkce. Každá metoda se musí ve své třídě deklarovat. V Jávě neexistují metody deklarované mimo třídy (tj. Java nezná žádné "globální" metody). Metody - příklad Výše uvedená třída PersonWlKIPFľJlA ílir ^ľ Fit i. Ljaik ■ [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=Person] měla metodu na výpis informací o daném objektu/člověku: public class Person { protected String name; protected int age; public Person(String n, int a) { name = n; age = a; } public void writeinfo() { System.out.println("Person:"); System.out.println("Name "+name); System.out.println( "Age "+age) ; } Volání metod • Samotnou deklarací (napsáním kódu) metody se žádný kód neprovede. Chceme-li vykonat kód metody, musíme ji zavolat. Volání se realizuje (tak jako u proměnných) "tečkovou notací", viz dále. • Volání lze provést, jen je-li metoda z místa volání přístupná - "viditelná". Přístupnost regulují pdob-ně jako u proměnných modifikátory přístupu. Volání metod - příklad Vracíme se k prvnímu příkladu: vytvoříme dva lidi a zavoláme postupně jejich metodu writeinfo. 9 Základní pojmy OOP. Třída, objekt, jeho vlastnosti. Metody, proměnné. public class TestLidi { public static void main(String[] args) { Person ales = new Person("Ales Necas", 38); Person beata = new Person("Beata Novákova", 36); ales.writelnfo(); // voláni metody objektu ales beata.writelnfo(); // voláni metody objektu beata } } Vytvoří se dva objekty PersonWlKlPFľllA ill r tni1 pil u Lniki [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=Person] a vypíší se informace o nich. Parametry metod V deklaraci metody uvádíme v její hlavičce tzx. formální parametry. Syntaxe: modifikátory typVraceneHodnoty nazevMetody(seznamFormalnichParametru) { tělo (výkonný kód) metody } seznamFormalnichParametru je tvaru: typParametru nazevFormalnihoParametru, WlKlPFDlA [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=typParametru ill p p pit FiL i. '"■■^b i nazevFormalnihoParametru,...] Podobne jako v jiných jazycích parametr představuje v rámci metody lokální proměnnou. Při volání metody jsou í p. nahrazeny skutečnými parametry. Předávání skutečných parametrů metodám Hodnoty primitivních typů - čísla, logické hodnoty, znaky se předávají hodnotou, tj. hodnota se nakopíruje do lokální proměnné metody Hodnoty objektových typů - všechny ostatní (tj. vč. všech uživatelem definovaných typů) se předávají odkazem, tj. do lokální proměnné metody se nakopíruje odkaz na objekt - skutečný parametr Pozn: ve skutečnosti se tedy parametry vždy předávají hodnotou, protože v případě objektových parametrů se předává hodnota odkazu na objekt - skutečný parametr. 10 Konstruktory. V Jávě tedy nemáme jako programátoři moc na výběr, jak parametry předávat • to je ale spíše výhoda! Příklad předávání parametrů - primitivní typy Rozšiřme definici třídy Person o metodu scream s parametry: public void scream(int kolikrat) { System.out.println("Kricim " + kolikrat + "krát UAAAA!"); } Při zavolání: scream(10); tato metoda vypíše Kricim lOkrat UAAAA! Příklad předávání parametrů - objektové typy (1) Následující třída AccountWlKlPFDlA I . ■ I- i til. :.' V-. ■. [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=Account] modeluje jednoduchý bankovní účet s možnostmi: • přidávat na účet/odebírat z účtu • vypisovat zůstatek na něm • převádět na jiný účet public class Account { // stav (zůstatek) peněz učtu protected double balance; public void add(double amount) { balance += amount; } 11 Základní pojmy OOP. Třída, objekt, jeho vlastnosti. Metody, proměnné. public void writeBalance() { System.out.println(balance) ; } public void transferTo(Account whereTo, double amount) { balance -= amount; whereTo.add(amount); } Metoda transferTo pracovat nejen se svým "mateřským" objektem, ale i s objektem whereTo předaným do metody... opět přes tečkovou notaci. Příklad předávání parametrů - objektové typy (2) Příklad použití třídy Account. public static void main(String[] args) { Account petrsAccount = new Account(); Account ivansAccount = new Account(); petrsAccount.add(100) ; ivansAccount.add(22 0) ; petrsAccount.transferTo(ivansAccount, 50) ; petrsAccount.writeBalance() ; ivansAccount.writeBalance() ; } Návrat z metody Kód metody skončí, tj. předá řízení zpět volající metodě (nebo systému - v případě startovní metody mainWlKIPFhlA [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=main]), Ihr Kn-i- Fiihb^i^i jakmile • dokončí poslední příkaz v těle metody nebo • dospěje k příkazu return ľlír p m- pil i. LbbiL i [http ://cs. wikipedia. org/wiki/Speci%C3 %A 1 ln%C3 %AD: Search?search=return] Metoda může při návratu vrátit hodnotu -tj. chovat se jako funkce (ve pascalském smyslu): • Vrácenou hodnotu musíme uvést za příkazem returnWlĽlľFľllA ill p p pit rik i. Laanb i [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=return]. V tomto případě 12 Konstruktory. tedy nesmí return chybět! • Typ vrácené hodnoty musíme v hlavičce metody deklarovat. • Nevrací-li metoda nic, pak musíme namísto typu vracené hodnoty psát voidWlKIPFDiA íli p p pit FiL i. Ln^bi [http ://cs. wikipedia. org/wiki/Speci%C3 %A 1 ln%C3 %AD: Search?search=void]. Pozn.: I když metoda něco vrátí, my to nemusíme použít, aleje to trochu divné... Konstruktory Konstruktory Co a k čemu jsou konstruktory? Konstruktury jsou speciální metody volané při vytváření nových instancí dané třídy. • Typicky se v konstruktoru naplní (inicializují) proměnné objektu. • Konstruktory lze volat jen ve spojení s operátorem newWlKIPFDiA íli r p m- rit i. L ni b ■ [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=new] k vytvoření nové instance třídy - nového objektu, evt. volat z jiného konstruktoru Syntaxe (viz výše): public class Person { protected String name; protected int age; // konstruktor se dvěma parametry // - inicializuje hodnoty proměnných ve vytvořeném objektu public Person(String n, int a) { name = n; age = a; } Príklad využití tohoto konstruktoru: Person pepa = new Person("Pepa z Hongkongu", 105); Toto volání vytvoří objekt pepa a naplní ho jménem a věkem. 13 Základní pojmy OOP. Třída, objekt, jeho vlastnosti. Metody, proměnné. Konstruktory (2) Jak je psát a co s nimi lze dělat? • nemají návratový typ (ani voidWlKlPFľllA "Inr Fni- Fil u L-jaiki [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=void] - to už vůbec nelil) • mohou mít parametry • mohou volat konstruktor rodičovské třídy - ale jen jako svůj první příkaz Přetěžování metod Přetěžovaní Jedna třída může mít: • Více metod se stejnými názvy, ale různými parametry. Pak hovoříme o tzv. přetížené (overloaded) metodě. • Nelze přetížit metodu pouze změnou typu návratově hodnoty. Přetěžování - příklad Ve třídě UcetWlťlPFniA 111 r ŕni" Fi h ■■ Lnibi [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=Ucet] přetížíme metodu pre-vedNaWlKIPFľllA Ihr Kn-i- Fík i. L^v-iki [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=prevedNa]. • Přetížená metoda převede na účet příjemce celý zůstatek z účtu odesílatele: public void transferTo(Account whereTo) { whereTo.add(balance); balance = 0; } Ve třídě Učet koexistují dvě různé metody se stejným názvem, ale jinými parametry. 14 Konstruktory. Pozn: I když jsou to teoreticky dvě úplně různé metody, pak když už se jmenují stejně, měly by dělat něco podobného. Přetěžování - příklad (2) Často přetížená metoda volá jinou "verzi" metody se stejným názvem: public void transferTo(Account whereTo) { transferTo(whereTo, balance); } Toto je jednodušší, přehlednější, udělá se tam potenciálně méně chyb. Lze doporučit. Je to přesně postup divide-et-impera, rozděl a panuj, dělba práce mezi metodami! Přetěžování - příklad (3) • Je ale otázka, zdali převod celého zůstatku raději nenapsat jako nepřetíženou, samostatnou metodu, např.: public void transferAHMoneyTo (Account whereTo) { transferTo(whereTo, balance); } • Je to o něco instruktivnější, ale přibude další identifikátor - název metody - k zapamatování. Což může být výhoda (je to výstižné) i nevýhoda (musíme si pamatovat další). Odkazy na objekty (instance) Odkazy na objekty (instance) Deklarace proměnné objektového typu ještě žádný objekt nevytváří. To se děje až příkazem - operátorem [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=new] • Proměnné objektového typu jsou vlastně odkazy na dynamicky vytvořené objekty. Přiřazením takové proměnné zkopírujeme pouze odkaz. Nezduplikujeme celý objekt! Přiřazování objektových proměnných newWlKlPFMA íli r p m- rit i. LniBi 15 Základní pojmy OOP. Třída, objekt, jeho vlastnosti. Metody, proměnné. V následující ukázce vytvoříme dva účty. Odkazy na ně budou primárně v proměnnýchpetruvUcet a ivanuvUcet. • V proměnné u nebude primárně odkaz na žádný účet. Pak do ní přiřadíme (u = petruvUcet; WlKľlPRÍ li A "Tfcr Fn-i- Fík i. kav-iki [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=u = petruvUcet;]) odkaz na objekt skrývající se pod odkazem petruvUcet. • Od této chvíle můžeme s účtem petruvUcet manipulovat přes odkaz (proměnnou) u. Což se také děje: u.prevedNa(ivanuvUcet, 50);WlíTIPRniA íli p p pit Fib u Lniii [http ://cs. wikipedia. org/wiki/Speci%C3 %A 1 ln%C3 %AD: Search?search=u.prevedNa(ivanuvUcet, 50);] public static void main(String[] args) { Account petruvUcet = new Account(); Account ivanuvUcet = new Account(); Account u; petruvUcet.add(100); ivanuvUcet.add(22 0) ; u = petruvUcet; u.transferTo(ivanuvUcet, 50); // odečte se z Petrova účtu petruvUcet.writeBalance(); // vypiše 50 ivanuvUcet.writeBalance () ; } Vracení odkazu na sebe Metoda může vracet odkaz na objekt, nad nímž je volána pomocí return this; Víl KL ÍPF Til A Tli r priT rib i. Lnifei [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search= return this; ] Príklad - upravený AccountWlKIPFMA ílir rni1 Fib i. LniBi [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search= Account] s metodou trans f erToWlKlPEniA Hir ľni- Fla ■. Lbi-iLi [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=transferTo] vracející odkaz na sebe public class Account { private double balance; 16 Konstruktory. public void add(double amt) { balance += amt; } public void writeBalance() { System.out.println(balance) ; } public Account transferTo(Account whereTo, double a) { add(-a); u.add(a); return this; } } Řetězení volání Vracení odkazu na sebe (tj. na objekt, na němž se metoda volala) lze s výhodou využít k "řetězení" volání: public static void main(String[] args) { Account petruvUcet = new Account(); Account ivanuvUcet = new Account(); Account igoruvUcet = new Account(); petruvUcet.add(100); ivanuvUcet.add(10 0); igoruvUcet.add(100); // budeme řetězit voláni: petruvUcet.transferTo(ivanuvUcet, 50).transferTo(igoruvUcet, 20); petruvUcet.writeBalance(); // vypiše 30 ivanuvUcet.writeBalance(); // vypiše 150 igoruvUcet.writeBalance(); // vypiše 120 } Statické proměnné a metody Proměnné a metody třídy - statické Dosud jsme zmiňovali proměnné a metody (tj. souhrnně prvky - members) objektu. Lze deklarovat také metody a proměnné patřící celé třídě, tj. skupině všech objektů daného typu. Takové 17 Základní pojmy OOP. Třída, objekt, jeho vlastnosti. Metody, proměnné. metody a proměnné nazýváme statické a označujeme v deklaraci modifikátorem static WlKlPFillA [http://cs.wikipedia.org/wiki/Speci%C3%Alln%C3%AD:Search?search=static] íli r priT r ik i. uniL i Příklad statické proměnné a metody Představme si, že si budeme pamatovat, kolik lidí se nám během chodu programu vytvořilo a vypisovat tento počet. Budeme tedy potřebovat do třídy Person doplnit: • jednu proměnnou pocetLidi společnou pro celou třídu Person - každý člověk ji při svém vzniku zvýší o jedna. • jednu metodu howManyPeople, která vrátí počet dosud vytvořených lidí. public class Person { protected String name; protected int a; protected static int peopleCount = 0; public Person(String n, int a) { name = n; age = a; peopleCount++; } public static int howManyPeople() { return peopleCount; } } Pozn: Všimněte si v obou případech modifikátoru/klíčového slova static. 18