Pridávanie vlastných metód - rozširovanie tried

<< Prvý projekt s JPAZ2 frameworkom | Obsah | Opakovanie skupiny príkazov (pevný počet opakovaní) >>

Vylepšovanie existujúcich dobrých vecí je v bežnom živote užitočná stratégie. Určite je lepšie niečo dobré vylepšiť, než začať vytvárať niečo nové úplne od základov. A táto stratégia je jeden z najdôležitejších konceptov objektovo orientovaného programovania.

Doteraz nami vytvárané korytnačky, ktoré prišli do nášho programu z JPAZu (tam je nejako napísané, aké vlastnosti a metódy má korytnačka, ako sa kreslia čiary, ako sa otáča, ...), vedia toho celkom dosť. Radi by sme však v našich programoch mali "chytrejšie" korytnačky, ktoré toho vedia ešte viacej. Ako ale získať "chytrejšie" korytnačky? Jedna z inšpirácii je šľachtenie rastlín - zoberieme nejakú odrodu rastlín, "čosi porobíme", a dostaneme novú lepšiu odrodu.

Teraz sa naučíme postup, ktorým môžeme vytvoriť nový - lepší druh korytnačiek. Taký druh, že korytnačky tejto novej triedy budú poznať nejaké metódy navyše. Novú triedy spravíme rozšírením existujúcej triedy Tutle. Triedu si možno predstaviť ako akúsi šablónu, vzor – "genetickú informáciu", ktorú pri narodení (vytvorení) dostáva objekt danej triedy. Táto šablóna predpisuje aké metódy má objekt (aké "príkazy" pozná) a ako sa objekt správa pri konkrétnych metódach.

Vytvorenie vlastnej rozšírenej triedy s novými metódami (video-tutoriál)

Pripomeňme, že v tomto postupe sme vytvorili novú triedu s menom MojaKorytnacka pričom sme pri jej vytváraní povedali prostrediu Eclipse, aby táto nová trieda rozširovala triedu Turtle. Inými slovami, aby každý vytvorený objekt triedy MojaKorytnacka vedel nielen všetko čo bežné korytnačky, ale aj niečo navyše. V príklade sme naučili objekty triedy MojaTurtle novú metódu, ktorá nakreslila trojuholník:

import sk.upjs.jpaz2.Turtle;

public class MojaKorytnacka extends Turtle {

        public void trojuholnik() {
                this.step(100);
                this.turn(120);
                this.step(100);
                this.turn(120);
                this.step(100);
                this.turn(120);
        }       
}

Všimnime si, že v jednotlivých príkazoch používame slovíčko this. Toto slovíčko hovorí, že chceme volať metódu samého seba. This si môžeme predstaviť ako slovíčko "ja" (je to forma uvedomenia objektu). Pri písaní metód treba mať stále na zreteli, že to, čo programujeme, je šablóna "správania" pre všetky objekty vytváranej triedy. A práve slovíčko this reprezentuje ten objekt, ktorý sa v danom okamihu správa podľa tejto šablóny.

Aby sme naše "novo vyšľachtené plemeno" korytnačiek vyskúšali, musíme upraviť kód v triede Spustac. Pridáme teda pár už známych príkazov, ktoré vytvoria premennú referencujúcu objekt triedy MojaKorytnacka a vytvorený objekt nechajú skúmať ObjectInspector-om:

import sk.upjs.jpaz2.*;

public class Spustac {

        /**
         * @param args
         */

        public static void main(String[] args) {
                WinPane plocha = new WinPane();
                ObjectInspector oi = new ObjectInspector();
                oi.inspect(plocha);

                Turtle jozko = new Turtle();
                plocha.add(jozko);
                oi.inspect(jozko);

                jozko.setPosition(50, 50);

                MojaKorytnacka katka = new MojaKorytnacka();
                plocha.add(katka);
                oi.inspect(katka);

                katka.center();
                katka.trojuholnik();
        }
}

Po spustení programu môžeme v ObjectInspector-e vidieť, že objekt triedy MojaKorytnacka (katka) pozná naučenú metódu trojuholnik. Je dôležité si všimnúť, že v objektoch triedy Turtle (jozko) sa nič nezmenilo. Samozrejme aj v Java programe už môžeme volať novopridané metódy u objektov triedy MojaKorytnacka.

Pri programovaní nových metód môžeme využívať nielen metódy z triedy Turtle, ale aj novonaučené metódy z triedy MojaKorytnacka (viď metóda zahada):

import sk.upjs.jpaz2.Turtle;

public class MojaKorytnacka extends Turtle {

        public void trojuholnik() {
                this.step(100);
                this.turn(120);
                this.step(100);
                this.turn(120);
                this.step(100);
                this.turn(120);
        }

        public void zahada() {
                this.trojuholnik();
                this.turn(120);
                this.trojuholnik();
                this.turn(120);
                this.trojuholnik();
                this.turn(120);
        }
}

Poznámka: Pri programovaní vlastných "maľovacích" metód pre korytnačky je dobré dodržiavať pravidlo, že korytnačka je po skončení metódy na tej pozícii a v takom smere, ako bola pred vykonaním metódy.

Vlastné metódy s parametrom

Z experimentovania s ObjectInspector-om, či z písania kódu, vieme, že metódy môžu mať aj parametre. Tie do novopridaných metód definovaných v triede MojaKorytnacka pridáme veľmi jednoducho. Stačí medzi okrúhle zátvorky pri názve metódy pridať zoznam parametrov, ktoré má mať táto metóda. V tomto zozname sú informácie o jednotlivých parametroch oddelené čiarkou. Každý jeden parameter je definovaný dvojicou typ a názov parametra. Typ parametra je magické slovíčko, ktoré hovorí, aké sú povolené hodnoty pre parameter. Napríklad pre typ double je povolená hodnota ľubovoľné reálne číslo. Meno parametra je označenie parametra vo vnútri našej metódy. Vo všetkých príkazoch v metóde môžeme použiť namiesto konkrétnej hodnoty (100, 200, 3.4) aj parameter. Meno parametra vo vnútri metódy zastupuje konkrétnu hodnotu, ktorá bola zadaná pri volaní (spustení) tejto metódy.

Pozrime sa, ako bude vyzerať metóda trojuholník, ak ju zmeníme tak, že bude vyžadovať zadanie parametre určujúceho dĺžku strany kresleného rovnostranného trojuholníka.

import sk.upjs.jpaz2.Turtle;

public class MojaKorytnacka extends Turtle {

        public void trojuholnik(double dlzkaStrany) {
                this.step(dlzkaStrany);
                this.turn(120);
                this.step(dlzkaStrany);
                this.turn(120);
                this.step(dlzkaStrany);
                this.turn(120);
        }

        public void zahada() {
                this.trojuholnik(100);
                this.turn(120);
                this.trojuholnik(100);
                this.turn(120);
                this.trojuholnik(100);
                this.turn(120);
        }
}

A ešte metóda na nakreslenie obdĺžnika s parametrami určujúcimi jeho šírku a výšku.

public void obdlznik(double sirka, double vyska) {
        this.step(vyska);
        this.turn(90);
        this.step(sirka);
        this.turn(90);
        this.step(vyska);
        this.turn(90);
        this.step(sirka);
        this.turn(90);
}

Pravidlá pre pomenovania

Parametre, metódy a triedy si môžeme pomenovať skoro ľubovoľným spôsobom. Z dôvodu čitateľnosti však budeme používať tieto pravidlá:

  • Názvy tried: Názov triedy začína veľkým písmenom, všetky ďalšie písmena sú malými písmenami abecedy. V prípade, že chceme použiť viacslovný názov, tak názov zlepíme do jedného slova a každé písmeno, ktoré zodpovedá začiatku slova zapíšeme veľkým písmenom: MojaKorytnacka, MojaTurtle, MojaNajmudrejsiaKorytnacka.
  • Názvy metód a parametrov: úplne rovnaké pravidlá ako pre názvy tried s jedinou výnimkou - prvé písmeno názvu je vždy malé: setPenColor, width, dlzkaStrany.

<< Prvý projekt s JPAZ2 frameworkom | Obsah | Opakovanie skupiny príkazov (pevný počet opakovaní) >>