2. diel - Prvý objektová aplikácie vo VB.NET - Hello object world
Minulá lekcie, Úvod do objektovo orientovaného programovania vo VB.NET , 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 VB.NET sme si vytvorili program Hello world. V dnešnom tutoriále si urobíme podobný program ako úvod do objektovo orientovaného programovania. Naprogramujte si Hello object world!
Založme si vo Visual Studiu novú konzolovú aplikáciu tak, ako sme to robili doteraz. V Solution Exploreri napravo klikneme pravým tlačidlom myši na náš projekt a vyberieme Add -> Class. Ide to aj klávesouvou skratkou Shift + Alt + C.
Class pomenujeme Zdravic.vb a potvrdíme. 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 max. Vnútri textových reťazcov, nie v identifikátoroch.
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 Solution Exploreri pribudne ďalší súbor .vb a VS nám ho otvorí. K pôvodnému Module1.vb s metódou Main () sa môžeme vrátiť pomocou záložky alebo cez Solution Explorer.
Pozrime sa, čo nám VS vygenerovalo a kód si popíšme. Následne si do triedy pridáme vlastnú metódu pre pozdravenie.
Public Class Zdravic End Class
Public Class nám označuje verejnú triedu. Ak chceme, aby bola naša trieda viditeľná aj v Module1.vb, musíme ju mať verejnú.
Všimnite si, že kód je takmer rovnaký, ako ten v Module1.vb, hoci tam to bol modul, ktorý funguje podobne ako trieda. Už teda rozumieme tomu, čo sme predtým ignorovali. Náš konzolový program bola vlastne trieda, ktorá obsahovala jednu metódu Main (). Vidíme, že vo VB.NET sa v podstate neobjektové programovať ani nedá, čo je len dobre
Teraz si do triedy Zdravice pridáme metódu Pozdrav (), bude verejne viditeľná a nebude mať žiadnu návratovú hodnotu ani atribúty.
Deklarácia metódy vo VB.NET je teda nasledovné:
[modifikátor přístupu] Sub [JmenoMetody]
Pred metódou bude tzv. Modifikátor prístupu, v našom prípade public (verejná). Keby sme modifikátor vynechali, VB.NET by ju chápal ako private (neverejné). Ďalej bude nasledovať samotný názov metódy, metódy píšeme rovnako ako triedy ťavej notáciou s veľkým poč. Písmenom. Prvé písmeno názvu je však na rozdiel od premenných veľké! Ako deklarovať metódy s parametrami si ukážeme za chvíľu.
Do tela metódy zapíšeme kód pre výpis na konzolu.
Naša trieda bude teraz vyzerať takto:
Public Class Zdravic Public Sub Pozdrav() Console.WriteLine("Hello object world!") End Sub End Class
Tu sme zatiaľ skončili, prejdeme do Module1.vb.
Teraz si v tele metódy Main () vytvoríme inštanciu triedy Zdravice. 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 Zdravice:
Dim zdravic As 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 Zdravice. 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, VB.NET si preto vytvoril tzv. Implicitné prázdny konštruktor. Vytvorenie inštancie objektu je teda podobné volanie metódy. Celý zápis môžeme samozrejme skrátiť na:
Dim zdravic As Zdravic = New Zdravic()
Keďže v premennej teraz máme naozaj inštanciu triedy Zdravice, môžeme inštanciu nechať pozdraviť. Zavoláme na ňu metódu Pozdrav a to ako zdravic.Pozdrav (). K aplikácii pridáme ešte Console.ReadKey (). Kód metódy Main () bude teda teraz vyzerať nasledovne:
{VBNET_CONSOLE} Dim zdravic As Zdravic = New Zdravic() zdravic.Pozdrav() Console.ReadKey() {/VBNET_CONSOLE}
Public Class Zdravic Public Sub Pozdrav() Console.WriteLine("Hello object world!") End Sub End Class
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:
Public Sub Pozdrav(jmeno As String) Console.WriteLine("Ahoj uživateli {0}", jmeno) End Sub
Vidíme, že syntax parametra metódy je rovnaká, ako syntaxe premenné, jenom vynecháme kľúčové slovo Dim. Keby sme chceli parametrov viac, oddeľujeme ich čiarkou. Upravíme teraz našu metódu Main ():
{VBNET_CONSOLE} Dim zdravic As Zdravic = New Zdravic() zdravic.Pozdrav("Karel") zdravic.Pozdrav("Petr") Console.ReadKey() {/VBNET_CONSOLE}
Public Class Zdravic Public Sub Pozdrav(jmeno As String) Console.WriteLine("Ahoj uživateli {0}", jmeno) End Sub End Class
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ý atribút, ponúka sa text, kde bude uložený text pozdravu. Atribúty sa definujú rovnako, ako premenné. Ako u metód platí, že pred nich píšeme modifikátor prístupu, bez neho je VB.NET berie ako private. Upravme našu triedu:
Public Class Zdravic Public text As String Public Sub Pozdrav(jmeno As String) Console.WriteLine("{0} {1}", text, jmeno) End Sub End Class
Text teraz musíme pochopiteľne nastaviť vytvorené inštanciu v Module1.vb:
{VBNET_CONSOLE} Dim zdravic As 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") Console.ReadKey() {/VBNET_CONSOLE}
Public Class Zdravic Public text As String Public Sub Pozdrav(jmeno As String) Console.WriteLine("{0} {1}", text, jmeno) End Sub End Class
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, zameníme kľúčové slovo Sub za Function a pridáme za okrúhle zátvorky As 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 obe triedy:
Metóda Pozdrav v Zdravic.vb:
Public Function Pozdrav(jmeno As String) As String Return String.Format("{0} {1}", text, jmeno) End Function
Telo metódy Main v Module1.vb:
{VBNET_CONSOLE} Dim zdravic As Zdravic = New Zdravic() zdravic.text = "Ahoj uživateli" Console.WriteLine(zdravic.Pozdrav("Karel")) Console.WriteLine(zdravic.Pozdrav("Petr")) zdravic.text = "Vítám tě tu programátore" Console.WriteLine(zdravic.Pozdrav("Richard")) Console.ReadKey() {/VBNET_CONSOLE}
Public Class Zdravic Public text As String Public Function Pozdrav(jmeno As String) As String Return String.Format("{0} {1}", text, jmeno) End Function End Class
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 trojapostrof " '' '", VS nám potom vygeneruje XML, do ktorého všetko popíšeme. 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č. Ak by nám komentáre v kóde vadili (zaberajú predsa len niekoľko riadkov), môžeme ich sklapnúť pomocou malých tlačidiel "-". Zdokumentovaná trieda môže vyzerať napr. Nasledovne:
''' <summary> ''' Třída reprezentuje zdravič, který slouží ke zdravení uživatelů ''' </summary> ''' <remarks></remarks> Public Class Zdravic ''' <summary> ''' Text pozdravu ''' </summary> ''' <remarks></remarks> Public text As String ''' <summary> ''' Pozdraví uživatele textem pozdravu a jeho jménem ''' </summary> ''' <param name="jmeno">Jméno uživatele</param> ''' <returns>Text s pozdravem</returns> Public Function Pozdrav(jmeno As String) As String Return String.Format("{0} {1}", text, jmeno) End Function End Class
Pozrieme sa, že nám VS naozaj popisky zobrazí:
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 VB .NET , 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 VB .NET, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.