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í.

Lekce 2 - První objektová aplikace ve VB.NET - Hello object world

Minulá lekce, Úvod do objektově orientovaného programování ve VB.NET, nás uvedla do objektově orientovaného programování.

Již víme, že objekty mají atributy a metody. Také víme, že k vytvoření objektu vytvoříme nejprve třídu. Ta je vzorem, podle kterého následně tvoříme její instance.

Na začátku kurzu se základními strukturami jazyka VB.NET jsme si vytvořili program Hello world. V dnešním tutoriálu si uděláme podobný program jako úvod do objektově orientovaného programování. Naprogramujme si Hello object world!

Založme si ve Visual Studiu novou konzolovou aplikaci tak, jak jsme to dělali doposud. V Solution Exploreru napravo klikneme pravým tlačítkem myši na náš projekt a vybereme Add -> Class. Jde to i klávesouvou zkratkou Shift + Alt + C.

Přidání nové třídy class k Visual Basic projektu ve Visual Studio - Objektově orientované programování ve Visual Basic .NET

Class pojmenujeme Zdravic.vb a potvrdíme. Název třídy píšeme vždy velbloudí notací bez mezer a na rozdíl od proměnných má každé slovo velké první písmeno, tedy i první. Název je samozřejmě také bez diakritiky, tu v programu používáme max. uvnitř textových řetězců, nikoli v identifikátorech.

Vytvoření nové třídy v Visual Basic ve Visual Studio - Objektově orientované programování ve Visual Basic .NET

Podle této třídy později vytvoříme objekt zdravič, který nás bude umět pozdravit. Vidíme, že se na program již díváme úplně jinak, za každou akci je zodpovědný nějaký objekt, nestačí pouze něco "nabušit" do Main(). V našem případě vám to může přijít zbytečné, u složitějších aplikací si to budete pochvalovat :)

V našem Solution Exploreru přibude další soubor .vb a VS nám ho otevře. K původnímu Module1.vb s metodou Main() se můžeme vrátit pomocí záložky nebo přes Solution Explorer.

Podívejme se, co nám VS vygenerovalo a kód si popišme. Následně si do třídy přidáme vlastní metodu pro pozdravení.

Public Class Zdravic

End Class

Public Class nám označuje veřejnou třídu. Pokud chceme, aby byla naše třída viditelná i v Module1.vb, musíme ji mít veřejnou.

Všimněte si, že kód je téměř stejný, jako ten v Module1.vb, ačkoli tam to byl modul, který funguje podobně jako třída. Již tedy rozumíme tomu, co jsme předtím ignorovali. Náš konzolový program byla vlastně třída, která obsahovala jednu metodu Main(). Vidíme, že ve VB.NET se v podstatě neobjektově programovat ani nedá, což je jen dobře :)

Nyní si do třídy Zdravic přidáme metodu Pozdrav(), bude veřejně viditelná a nebude mít žádnou návratovou hodnotu ani atributy.

Deklarace metody ve VB.NET je tedy následující:

[modifikátor přístupu] Sub [JmenoMetody]

Před metodou bude tzv. modifikátor přístupu, v našem případě public (veřejná). Kdybychom modifikátor vynechali, VB.NET by ji chápal jako private (neveřejná). Dále bude následovat samotný název metody, metody píšeme stejně jako třídy velbloudí notací s velkým poč. písmenem. První písmeno názvu je však na rozdíl od proměnných velké! Jak deklarovat metody s parametry si ukážeme za chvíli.

Do těla metody zapíšeme kód pro výpis na konzoli.

Naše třída bude nyní vypadat takto:

Public Class Zdravic
    Public Sub Pozdrav()
        Console.WriteLine("Hello object world!")
    End Sub
End Class

Zde jsme prozatím skončili, přejdeme do Module1.vb.

Nyní si v těle metody Main() vytvoříme instanci třídy Zdravic. Bude to tedy ten objekt zdravič, se kterým budeme pracovat. Objekty se ukládají do proměnných, název třídy slouží jako datový typ. Instance má zpravidla název třídy, jen má první písmeno malé. Deklarujme si proměnnou a následně v ní založme novou instanci třídy Zdravic:

Dim zdravic As Zdravic
zdravic = New Zdravic()

První řádek říká: "Chci proměnnou zdravic, ve které bude instance třídy Zdravic". S proměnnými jsme vlastně již takto pracovali.

Na druhém řádku je klíčové slovo New, které nám založí novou instanci třídy Zdravic. Tuto instanci přiřadíme do naší proměnné.

Při vytvoření nové instance se zavolá tzv. konstruktor. To je speciální metoda na třídě, proto při vytvoření instance píšeme ty prázdné závorky, jelikož voláme tuto "vytvářecí" metodu. Konstruktor zpravidla obsahuje nějakou inicializaci vnitřního stavu instance (např. dosadí výchozí hodnoty do proměnných). My jsme v kódu žádný konstruktor nedeklarovali, VB.NET si proto vytvořil tzv. implicitní prázdný konstruktor. Vytvoření instance objektu je tedy podobné volání metody. Celý zápis můžeme samozřejmě zkrátit na:

Dim zdravic As Zdravic = New Zdravic()

Jelikož v proměnné nyní máme opravdu instanci třídy Zdravic, můžeme instanci nechat pozdravit. Zavoláme na ni metodu Pozdrav() a to jako zdravic.Pozdrav(). K aplikaci přidáme ještě Console.ReadKey(). Kód metody Main() bude tedy nyní vypadat následovně:

Dim zdravic As Zdravic = New Zdravic()
zdravic.Pozdrav()
Console.ReadKey()

Program spustíme.

Konzolová aplikace
Hello object world!

Máme tedy svou první objektovou aplikaci!

Dejme nyní naší metodě Pozdrav() parametr jmeno, aby dokázala pozdravit konkrétního uživatele:

Public Sub Pozdrav(jmeno As String)
    Console.WriteLine("Ahoj uživateli {0}", jmeno)
End Sub

Vidíme, že syntaxe parametru metody je stejná, jako syntaxe proměnné, jenom vynecháme klíčové slovo Dim. Kdybychom chtěli parametrů více, oddělujeme je čárkou. Upravíme nyní naši metodu Main():

Dim zdravic As Zdravic = New Zdravic()
zdravic.Pozdrav("Karel")
zdravic.Pozdrav("Petr")
Console.ReadKey()

Náš kód je nyní v metodě a my ho můžeme jednoduše pomocí parametrů volat znovu s různými parametry. Nemusíme 2x opisovat "Ahoj uživateli...". Kód budeme odteď dělit logicky do metod.

Konzolová aplikace
Ahoj uživateli Karel
Ahoj uživateli Petr

Třídě přidáme nějaký atribut, nabízí se text, kde bude uložen text pozdravu. Atributy se definují stejně, jako proměnné. Jako u metod platí, že před ně píšeme modifikátor přístupu, bez něj je VB.NET bere jako private. Upravme naši třídu:

Public Class Zdravic
    Public text As String

    Public Sub Pozdrav(jmeno As String)
        Console.WriteLine("{0} {1}", text, jmeno)
    End Sub
End Class

Text nyní musíme pochopitelně nastavit vytvořené instanci v Module1.vb:

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

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

Vzhledem k objektovému návrhu není nejvhodnější, aby si každý objekt ovlivňoval vstup a výstup, jak se mu zachce. Pochopitelně narážím na naše vypisování do konzole. Každý objekt by měl mít určitou kompetenci a tu by neměl překračovat. Pověřme náš objekt pouze sestavením pozdravu a jeho výpis si zpracujeme již mimo, v našem případě v metodě Main(). Výhodou takto navrženého objektu je vysoká univerzálnost a znovupoužitelnost. Objekt doposud umí jen psát do konzole, my ho však přizpůsobíme tak, aby daná metoda text pouze vracela a bylo na jeho příjemci, jak s ním naloží. Takto můžeme pozdravy ukládat do souborů, psát na webové stránky nebo dále zpracovávat.

Jelikož chceme, aby metoda vracela hodnotu a to String, zaměníme klíčové slovo Sub za Function a přidáme za kulaté závorky As String. K návratu hodnoty použijeme příkaz Return. Return metodu ukončí a navrátí hodnotu, jakýkoli kód v těle metody po Return se již neprovede! Upravme obě třídy:

Metoda Pozdrav() v Zdravic.vb:

Public Function Pozdrav(jmeno As String) As String
    Return String.Format("{0} {1}", text, jmeno)
End Function

Tělo metody Main() v Module1.vb:

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

Nyní je náš kód dle dobrých praktik. Ještě naši třídu okomentujme, jak se sluší a patří. Komentáře budeme psát nad název třídy a nad název každého atributu a metody. K jejich zápisu použijeme trojapostrof "'''", VS nám poté vygeneruje XML, do kterého vše popíšeme. Vyplatí se nám to ve chvíli, když na třídě používáme nějakou metodu, její popis se nám zobrazí v našeptávači. Pokud by nám komentáře v kódu vadily (zabírají přeci jen několik řádek), můžeme je sklapnout pomocí malých tlačítek "-". Zdokumentovaná třída může vypadat např. takto:

''' <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

Podíváme se, že nám VS opravdu popisky zobrazí:

Metody objektu zdravic ve Visual Studio - Objektově orientované programování ve Visual Basic .NET

A jsme u konce. Námi napsaný program má již nějakou úroveň, i když vlastně nic nedělá. Za úkol máte předělat si naši konzolovou kalkulačku do objektů.

V následujícím cvičení, Řešené úlohy k 1.-2. lekci OOP ve VB.NET, si procvičíme nabyté zkušenosti z předchozích lekcí.


 

Předchozí článek
Úvod do objektově orientovaného programování ve VB.NET
Všechny články v sekci
Objektově orientované programování ve Visual Basic .NET
Přeskočit článek
(nedoporučujeme)
Řešené úlohy k 1.-2. lekci OOP ve VB.NET
Článek pro vás napsal Michal Žůrek - misaz
Avatar
Uživatelské hodnocení:
20 hlasů
Autor se věnuje tvorbě aplikací pro počítače, mobilní telefony, mikroprocesory a tvorbě webových stránek a webových aplikací. Nejraději programuje ve Visual Basicu a TypeScript. Ovládá HTML, CSS, JavaScript, TypeScript, C# a Visual Basic.
Aktivity