IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

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

Minulá lekcie, Úvod do objektovo orientovaného programovania v Dart , nás uviedla do objektovo orientovaného programovania v jazyku Dart. Už vieme, že objekty majú vlastnosti 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 konštrukciami jazyka Dart 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 IDEA novú konzolovú aplikáciu tak, ako sme to robili doteraz. Do zložky lib/src/ si pridáme nový súbor zdravic.dart. Pripomenieme si, že názov súboru vždy píšeme malými písmenami sa slovami oddelenými podčiarknikom. Názov triedy je naopak 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 max. Vnútri textových reťazcov, nie v identifikátoroch.

Podľa tejto triedy neskôr vytvoríme objekt zdravic, 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". 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ť.:)

class Zdravic {

}

Pripomeniem, že v priečinku bin/ potrebujeme náš spustiteľný súbor, napríklad main.dart, v ktorom budeme mať metódu main().

void main() {

}

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

Deklarácia metódy v Dart je teda nasledovné:

[návratový typ] [[_]jmenoMetody]([parametry])

Metóda nebude vracať žiadnu hodnotu, toho docielime kľúčovým slovom void. Ďalej bude nasledovať samotný názov metódy, metódy píšeme rovnako ako triedy ťavej notáciou s malým poč. Písmenom. Ak je prvý znak názvu podčiarkovník, taká metóda nie je verejne viditeľná. 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:

class Zdravic {
    void pozdrav() {
        print('Hello object world!');
    }
}

Tu sme zatiaľ skončili, prejdeme do main.dart.

Importujeme si našu triedu Zdravic. Pre ukážku budeme predpokladať, že sa náš balíček volá prvni_oop_aplikace, prípadne si názov upravte podľa svojho projektu:

import 'package:prvni_oop_aplikace/src/zdravic.dart';

Teraz si v tele metódy main() vytvoríme inštanciu triedy Zdravic. Bude to teda ten objekt zdravic, 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.

Zdravic zdravic;
zdravic = new Zdravic();

Prvý riadok hovorí: "Chcem premennú Zdravice, v ktorej bude inštancie triedy Zdravice". S premennými sme vlastne už takto pracovali.

Na druhom riadku je kľúčové slovo new, ktoré nám založia novú inštanciu triedy Zdravic. Túto inštanciu priradíme do našej premennej.

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, Dart si preto vytvoril tzv. Implicitné bezparametrický konštruktor. Vytvorenie inštancie objektu je teda podobné volanie metódy. Celý zápis môžeme samozrejme skrátiť na:

Zdravic zdravic = new Zdravic();

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:

Zdravic zdravic = new Zdravic();
zdravic.pozdrav();

Program spustíme.

Konzolová aplikácia
Hello object world!

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

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

void pozdrav(String jmeno) {
    print('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():

Zdravic zdravic = new 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.

Konzolová aplikácia
Ahoj uživateli Karel
Ahoj uživateli Petr

Triede pridáme nejakú vlastnosť, ponúka sa text, kde bude uložený text pozdravu. Vlastnosti sa definujú rovnako, ako premenné. Ako u metód platí, že ak je prvý znak podčiarknutia, vlastnosť nie je verejne prístupná, bez neho jej Dart berie ako verejne prístupnú. Upravme našu triedu:

class Zdravic {
    String text;

    void pozdrav(String jmeno) {
        print('$text $jmeno');
    }
}

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

Zdravic zdravic = new 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ýstup programu:

Konzolová aplikácia
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, zmeníme jej doterajší typ void na String. K návratu hodnoty použijeme príkaz return. Return metódu ukončí a navráti hodnotu, akýkoľvek kód v tele metódy po return sa už nevykoná! Upravme obidva súbory:

Metóda pozdrav() v zdravic.dart:

String pozdrav(String jmeno) {
    return '$text $jmeno';
}

Telo metódy main() v main.dart:

Zdravic zdravic = new Zdravic();
zdravic.text = 'Ahoj uživateli';
print(zdravic.pozdrav('Karel'));
print(zdravic.pozdrav('Petr'));
zdravic.text = 'Vítám tě tu, programátore';
print(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ždej vlastnosti a metódy. Tieto komentáre pre dokumentáciu píšeme za trojlomítko ///. Komentáre lokálnych premenných a lokálneho kódu píšeme za dvojlomítko //. Ak by sme chceli dočasne zakomentovat časť kódu, môžeme použiť blokové komentáre /* */. Všetky komentáre píšeme prózou a výrazy (premenné, metódy, triedy atp.) Zvýrazníme do hranatých zátvoriek.

Zdokumentovaná trieda môže vyzerať napr. Nasledovne:

/// Třída reprezentuje zdravič, který slouží ke zdravení uživatelů.
class Zdravic {
    /// Text pozdravu.
    String text;

    /// Pozdraví uživatele textem pozdravu [text] a jeho jménem [jmeno].
    ///
    /// Vrací text s pozdravem.
    String pozdrav(String jmeno) {
        return '$text $jmeno';
    }
}

Pozrieme sa, že nám IDEA skutočne popisky zobrazí (popisky sa dajú vyžiadať skratkou CTRL + Q):

Napovedanie kódu v Dart - Objektovo orientované programovanie v Dart

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 Dart , 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 Dart, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

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

Stiahnuté 8x (2.45 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Dart

 

Predchádzajúci článok
Úvod do objektovo orientovaného programovania v Dart
Všetky články v sekcii
Objektovo orientované programovanie v Dart
Preskočiť článok
(neodporúčame)
Riešené úlohy k 1.-2. lekciu OOP v Dart
Článok pre vás napísal Honza Bittner
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Aktivity