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):
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