IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

2. diel - Prvý objektová aplikácie v Kotlin - Hello object world

Minulá lekcie, Úvod do objektovo orientovaného programovania v Kotlin , nás uviedla do objektovo orientovaného programovania. Už vieme, že objekty majú atribúty a metódy. Tiež vieme, že na vytvorenie objektu vytvoríme najprv triedu. Tá je vzorom, podľa ktorého následne tvoríme jej inštancie.

Na začiatku kurzu so základnými štruktúrami jazyka Javy sme si vytvorili program Hello world. Urobme si teraz podobný program ako úvod do objektovo orientovaného programovania. Naprogramujte si Hello object world!

Založme si v IntelliJ novú Kotlin aplikáciu tak, ako sme to robili doteraz. Keďže triedy sa v objektových aplikáciách organizujú do balíčkov, pridáme si do aplikácie najprv nový package (balík). Klikneme pravým tlačidlom myši na priečinok src v našom projekte a vyberieme New -> Package. Balíček si môžete pomenovať akokoľvek, ale je zvykom, že sa zvyčajne volá podľa nejaké domény, ktorú vlastníte (napr. Ja ho pomenujem ako cz.itnetwork, pretože je to balíček od itnetwork.cz). O balíčkoch sa toho dozvieme viac v ďalších lekciách :)

Nový balíček v Kotlin - Objektovo orientované programovanie v Kotlin

Ďalej si založme súbor v našom novovytvorenom balíka, ktorý bude obsahovať našej main() metódu (Postup je takmer rovnaký ako v prvej lekcii. Miesto zložky src, ale klikneme pravým tlačidlom myši na náš balíček).

Nový súbor v Kotlin - Objektovo orientované programovanie v Kotlin

V našom novo vytvorenom súbore Main.kt si definujeme main() metódu, ako sme už zvyknutí z predchádzajúcich lekcií.

package cz.itnetwork

fun main(args: Array<String>) {

}

Konečne si môžeme založiť našu novú triedu. Klikneme pravým tlačidlom myši v priečinku src na náš balíček a vyberieme New -> Kotlin File/Class

Nová trieda v Kotlin - Objektovo orientované programovanie v Kotlin

Class pomenujeme Zdravic a potvrdíme. Pod názvom v dropdown vyberieme "Class". Názov triedy píšeme vždy ťavie notáciou bez medzier a na rozdiel od premenných má každé slovo veľké prvé písmeno, teda aj prvé. Názov je samozrejme tiež bez diakritiky, tú v programe používame maximálne vnútri textových reťazcov, nie v identifikátoroch.

Názov novej triedy v Kotlin - Objektovo orientované programovanie v Kotlin

Podľa tejto triedy neskôr vytvoríme objekt Zdravice, ktorý nás bude vedieť pozdraviť. Vidíme, že sa na program už pozeráme úplne inak, za každú akciu je zodpovedný nejaký objekt, nestačí iba niečo "nabušit" do main(). V našom prípade vám to môže prísť zbytočné, pri zložitejších aplikácií si to budete pochvaľovať :)

V našom package pribudne ďalší súbor .kt a IntelliJ nám ho otvorí. K pôvodnému Main.kt s metódou main() sa môžeme vrátiť pomocou záložky alebo cez ľavú záložku Project. Ak chceme, aby bola naša nová trieda Zdravic viditeľná aj v predvolenom súbore, kde máme metódu main(), musíme ju mať v rovnakom balíčku. To naše aplikácie teraz spĺňa.

Pozrime sa, čo nám IntelliJ vygeneroval a kód si popíšme. Následne si do triedy pridáme vlastnú metódu pre pozdravenie.

package cz.itnetwork

class Zdravic {
}

V package je teda umiestnená samotná trieda, ktorá sa deklaruje kľúčovým slovom class. Trieda sa volá Zdravic a je prázdna.

Teraz si do triedy Zdravic pridáme metódu pozdrav(), bude verejne viditeľná a nebude mať žiadnu návratovú hodnotu ani atribúty.

Deklarácia metódy v Kotlin je nasledovné:

[modifikátor přístupu] [jmenoMetody]([parametry]) : [návratový typ]

Pred metódou môže byť tzv. Modifikátor prístupu, v našom prípade public (verejná). Metóda nebude vracať žiadnu hodnotu, toho docielime tým, že návratový typ nenapíšeme. Ďalej bude nasledovať samotný názov metódy. Metódy pomenovávame rovnako ako premenné ťavej notáciou s malým začiatočným písmenom. Zátvorka s parametrami je povinná, my ju necháme prázdnu, pretože metóda žiadne parametre mať nebude. Do tela metódy zapíšeme kód pre výpis na konzolu.

Naša trieda bude teraz vyzerať takto:

package cz.itnetwork

class Zdravic {

    fun pozdrav() {
        println("Hello object world!")
    }

}

Ak nenapíšeme modifikátor pred metódu, Kotlin pochopí, že metóda má byť public, teda verejne viditeľná. Väčšinou sa tento modifikátor v Kotlin vynecháva.

Tu sme zatiaľ skončili, prejdeme do Main.kt.

Teraz si v tele metódy main() vytvoríme inštanciu triedy Zdravic. Bude to teda ten objekt Zdravice, s ktorým budeme pracovať. Objekty sa ukladajú do premenných, názov triedy slúži ako dátový typ. Inštancia má spravidla názov triedy, len má prvé písmeno malé. Vyhlásiť si premennú a následne v nej založme novú inštanciu triedy Zdravic:

val zdravic = Zdravic()

Všimnime si, že jazyk Kotlin nemá kľúčové slovo new, ako je tomu napríklad v Jave.

Riadok hovorí: "Chcem premennú zdravic, v ktorej bude inštancie triedy Zdravic " a túto inštanciu vytvoríme a následne priradíme do našej premennej. S premennými sme vlastne už takto pracovali.

Pri vytvorení novej inštancie sa zavolá tzv. Konštruktor. To je špeciálna metóda na triede, preto pri vytvorení inštancie píšeme tie prázdne zátvorky, keďže voláme túto "vytvárajúci" metódu. Konštruktor spravidla obsahuje nejakú inicializáciu vnútorného stavu inštancie (napr. Dosadí východiskové hodnoty do premenných). My sme v kóde žiadny konštruktor nedeklaroval, Kotlin si preto vytvoril tzv. Implicitné bezparametrický konštruktor. Vytvorenie inštancie objektu je teda podobné volanie metódy.

Keďže v premennej teraz máme naozaj inštanciu triedy Zdravic, môžeme inštanciu nechať pozdraviť. Zavoláme na ňu metódu pozdrav() a to ako zdravic.pozdrav(). Kód metódy main() bude teda teraz vyzerať nasledovne:

val zdravic = Zdravic()
zdravic.pozdrav()

Program spustíme. Výstup bude nasledujúci:

Hello object world!

Máme teda svoju prvú objektovú aplikáciu v Kotlin!

Dajme teraz našej metóde pozdrav() parameter jmeno, aby dokázala pozdraviť konkrétneho užívateľa:

fun pozdrav(jmeno: String) {
        println("Ahoj uživateli $jmeno")
}

Vidíme, že syntax parametra metódy je rovnaká, ako syntaxe premenné. Keby sme chceli parametrov viac, oddeľujeme ich čiarkou. Upravíme teraz našu metódu main():

val zdravic = Zdravic()
zdravic.pozdrav("Karel")
zdravic.pozdrav("Petr")

Náš kód je teraz v metóde a my ho môžeme jednoducho pomocou parametrov volať znova s rôznymi parametrami. Nemusíme 2x opisovať "Ahoj užívateľovi ...". Kód budeme odteraz deliť logicky do metód.

výstup:

Ahoj uživateli Karel
Ahoj uživateli Petr

Triede pridáme nejaký atribút, ponúka sa text, kde bude uložený text pozdravu. Atribúty sa definujú rovnako, ako premenné. Rovnako ako u metód platí, že pred atribúty môžeme písať modifikátor prístupu, bez neho je Kotlin berie ako public. Upravme našu triedu:

package cz.itnetwork

class Zdravic {
    var text: String = ""

    fun pozdrav(jmeno: String) {
        println("$text $jmeno")
    }

}

Text teraz musíme pochopiteľne nastaviť vytvorené inštanciu v Main.kt:

val zdravic = Zdravic()
zdravic.text = "Ahoj uživateli"
zdravic.pozdrav("Karel")
zdravic.pozdrav("Petr")
zdravic.text = "Vítám tě tu programátore"
zdravic.pozdrav("Richard")

výsledok:

Ahoj uživateli Karel
Ahoj uživateli Petr
Vítám tě tu programátore Richard

Vzhľadom k objektovému návrhu nie je najvhodnejšie, aby si každý objekt ovplyvňoval vstup a výstup, ako sa mu zachce. Pochopiteľne narážam na naše vypisovanie do konzoly. Každý objekt by mal mať určitú kompetenciu a tú by nemal prekračovať. Povera náš objekt iba zostavením pozdravu a jeho výpis si spracujeme už mimo, v našom prípade v metóde main(). Výhodou takto navrhnutého objektu je vysoká univerzálnosť a znovupoužitelnost. Objekt doposiaľ vie len písať do konzoly, my ho však prispôsobíme tak, aby daná metóda text iba vracala a bolo na jeho príjemcovi, ako s ním naloží. Takto môžeme pozdravy ukladať do súborov, písať na webové stránky alebo ďalej spracovávať.

Keďže chceme, aby metóda vracala hodnotu a to String, pridáme jej dátový typ String. K návratu hodnoty použijeme príkaz return. Ten metódu ukončí a navráti hodnotu, akýkoľvek kód v tele metódy po return sa už nevykoná! Upravme obe triedy:

Metóda pozdrav() v Zdravic.kt:

fun pozdrav(jmeno: String): String {
    return "$text $jmeno"
}

Telo metódy main() v Main.kt:

val zdravic = Zdravic()
zdravic.text = "Ahoj uživateli"
println(zdravic.pozdrav("Karel"))
println(zdravic.pozdrav("Petr"))
zdravic.text = "Vítám tě tu programátore"
println(zdravic.pozdrav("Richard"))

Teraz je náš kód podľa dobrých praktík. Ešte našu triedu Okomentujte, ako sa sluší a patrí. Komentáre budeme písať nad názov triedy a nad názov každého atribútu a metódy. K ich zápisu použijeme /** Popisek */. Oplatí sa nám to vo chvíli, keď na triede používame nejakú metódu, jej popis sa nám zobrazí v našepkávač. Zdokumentovaná trieda môže vyzerať napr. Nasledovne:

package cz.itnetwork

/** Třída reprezentuje zdravič, který slouží ke zdravení uživatelů */
class Zdravic {
    /** Text pozdravu */
    var text: String = ""

    /**
     * Pozdraví uživatele textem pozdravu a jeho jménem
     * @param  jmeno  Jméno uživatele
     * @return      Text s pozdravem
     */
    fun pozdrav(jmeno: String): String {
        return "$text $jmeno"
    }

}

/** */ je viacriadkový komentár, syntaxe popiskov sa nazýva Javadoc. Ak budete svoje triedy dobre popisovať, programátorskú dokumentáciu k aplikácii vytvoríte potom jediným kliknutím.

Pozrieme sa, že nám IntelliJ naozaj popisky zobrazí:

našepkávač IntelliJ - Objektovo orientované programovanie v Kotlin

A sme u konca. Nami napísaný program má už nejakú úroveň, aj keď vlastne nič nerobí. Za úlohu máte prerobiť si našu konzolovú kalkulačku do objektov. V budúcej lekcii, Riešené úlohy k 1.-2. lekciu OOP v Kotlin , si urobíme takú jednoduchú hračku, necháme dva objekty (bojovníkmi) súperiť v aréne (tiež objektu). Máte sa na čo tešiť ;-)

V nasledujúcom cvičení, Riešené úlohy k 1.-2. lekciu OOP v Kotlin, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 568x (10.51 kB)

 

Predchádzajúci článok
Úvod do objektovo orientovaného programovania v Kotlin
Všetky články v sekcii
Objektovo orientované programovanie v Kotlin
Preskočiť článok
(neodporúčame)
Riešené úlohy k 1.-2. lekciu OOP v Kotlin
Článok pre vás napísal Samuel Kodytek
Avatar
Užívateľské hodnotenie:
1 hlasov
Autor se věnuje všem jazykům okolo JVM. Rád pomáhá lidem, kteří se zajímají o programování. Věří, že všichni mají šanci se naučit programovat, jen je potřeba prorazit tu bariéru, který se říká lenost.
Aktivity