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

14. diel - Rozhranie (interface) vo Visual Basic .NET

V predchádzajúcom cvičení, Riešené úlohy k 12.-13. lekciu OOP vo Visual Basic .NET, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.

V minulej lekcii, Riešené úlohy k 12.-13. lekciu OOP vo Visual Basic .NET , sme si precvičili prácu s kolekciou List pri tvorbe elektronického diára. V dnešnom VB.NET tutoriále to bude opäť trochu teoretické, objavíme ďalšie topí objektovo orientovaného programovania, uvedieme si totiž rozhrania.

Rozhranie

Rozhraním objektu sa myslí to, ako je objekt viditeľný zvonku. Už vieme, že objekt obsahuje nejaké metódy, tie môžu byť privátne alebo verejné. Rozhranie objektu tvorí práve jeho verejné metódy, je to spôsob, akým s určitým typom objektu môžeme komunikovať. Už sme sa s ním niekoľkokrát stretli, napr. U nášho bojovníka do arény. Trieda Bojovnik mala nasledujúce verejné metódy:

  • Sub Útočia (souper As Bojovnik)
  • Sub BRANS (uder As Integer)
  • Function nažive () As Boolean
  • Sub NastavZpravu (sprava As String)
  • Function VratPosledniZpravu () As String
  • Function GrafickyZivot () As String

Pokiaľ si do nejakej úproměnné uložíme inštanciu bojovníka, môžeme na ňu volať metódy ako útočí () alebo BRANS (). To stále nie je nič nové, že?

My si však rozhrania môžeme deklarovať zvlášť a to podobným spôsobom ako napríklad triedu. Toto rozhranie potom použijeme ako dátový typ.

Všetko si vyskúšame, ale na niečom jednoduchším, než je bojovník. Vytvorme si nový projekt, konzolovú aplikáciu a nazvime ho Rozhranie. Pridáme si nejakú jednoduchú triedu. Pretože by sa podľa môjho názoru mala teórie vysvetľovať na niečom odľahčujúcim, urobíme si Vtáka. Bude vedieť pípať, dýchať a jednoduchú recykláciu. Pridajme si triedu Ptak, bude vyzerať takto:

Public Class Ptak
    Public Sub Pipni()
        Console.WriteLine("♫ ♫ ♫")
    End Sub

    Public Sub Dychej()
        Console.WriteLine("Dýchám...")
    End Sub

    Public Sub Klovni()
        Console.WriteLine("Klov, klov!")
    End Sub
End Class

Trieda je naozaj triviálne. Prejdime do Module1.vb a vytvorme si inštanciu vtáka:

Dim ptak As Ptak = New Ptak()

Teraz napíšeme ptak. a necháme Visual Studio, aby nám zobrazilo metódy na triede (možno tiež vyvolať stlačením ctrl + space):

metódy vtáka - Objektovo orientované programovanie vo Visual Basic .NET

Vidíme, čo na vtákovi môžeme všetko volať, sú tam samozrejme tie 3 metódy, čo sme v triede implementovali (plus ďalšie, ktoré majú objekty v základe).

Teraz vtákovi vytvoríme rozhranie. Využijeme na to kľúčového slova Interface (anglicky rozhranie). Je dobrým zvykom, že rozhranie začína vždy na písmeno I (ako Interface). Vytvorme teda interface IPtak. Pravým tlačidlom klikneme na projekt, a pridáme nový item - Interface.

Nový interface vo Visual Studiu - Objektovo orientované programovanie vo Visual Basic .NET

K projektu sa nám pridá prázdny interface. Do neho pridáme hlavičky metód, ktoré má dané rozhranie obsahovať. Samotnú implementáciu (kód metód) uvedieme až v triede, ktorá bude toto rozhranie implementovať (viď ďalej).

Do rozhrania IPtak teda pridáme hlavičky metód, schválne jednu vynecháme a pridáme iba Pípanie a Dýchanie:

Public Interface IPtak
    Sub Pipni()
    Sub Dychej()
End Interface

Modifikátor Public neuvádzame, pretože rozhranie obsahuje vždy len verejné metódy (inak by nemalo zmysel, udáva, ako s objektom zvonku pracovať).

Vráťme sa do Module1.vb a zmeňme riadok s premennou vtak tak, aby už nebola typu Ptak, ale IPtak:

Dim ptak As IPtak = New Ptak()

Kódom vyššie hovoríme, že v premennej typu IPtak očakávame objekt, ktorý obsahuje tie metódy, čo sú v rozhraní. Visual Studio nám vynadá, pretože trieda Ptak zatiaľ rozhranie IPtak neobsahuje, aj keď potrebné metódy má, nevie, že rozhranie poskytuje. Presunieme sa do triedy Ptak a nastavíme jej, že implementuje interface IPtak. Robí sa to rovnako, ako keď trieda od inej dedí, len použijeme kľúčové slovo Implements.

Public Class Ptak
    Implements IPtak
    ...

Ďalej potom musíme povedať, že sa jedná o metódu z rozhrania, za názov metódy, prípadne až za návratovú hodnotu doplníme znovu kľúčové slovo Implements a definíciu z rozhrania, trieda Ptak bude vyzerať nasledovne

Public Class Ptak
    Implements IPtak
    Public Sub Pipni() Implements IPtak.Pipni
        Console.WriteLine("♫ ♫ ♫")
    End Sub

    Public Sub Dychej() Implements IPtak.Dychej
        Console.WriteLine("Dýchám...")
    End Sub

    Public Sub Klovni()
        Console.WriteLine("Klov, klov!")
    End Sub
End Class

Keď sa teraz vrátime do Module1.vb, riadok s premennou typu IPtak je už v poriadku, trieda Ptak korektne implementuje rozhranie IPtak a jej inštancie môže byť do premennej tohto typu uložená.

Skúsme teraz vymazať z triedy nejakú metódu, ktorú rozhranie udáva, treba pípne (). Visual Studio nás upozorní, že implementácia nie je kompletný. Vráťme ju zas späť.

Opäť pridáme riadok ptak., Visual Studio nám ponúkne nasledujúce metódy:

Metódy vtáka s rozhraním IPtak - Objektovo orientované programovanie vo Visual Basic .NET

Vidíme, že od inštancie môžeme teraz očakávať iba to, čo poskytuje rozhranie. To preto, že premenná ptak je už typu IPtak, nie Ptak. Metóda Klovni () úplne chýba.

K čomu je to dobré? Výhod a využitie je viac, na prvý sme už prišli. Pomocou rozhrania dokážeme zjednodušiť rozhranie nejakého zložitého objektu a vystaviť len tú časť, ktorá sa nám v tú dobu hodí.

Ešte dodám, že nemôžeme vytvoriť inštanciu z rozhrania, tento kód nebude fungovať:

' tento kód nebude fungovat
Dim ptak As IPtak = New IPtak()

Viacnásobná dedičnosť

Visual Basic .NET (rovnako ako väčšina jazykov) nepodporuje viacnásobnú dedičnosť. Nemôžeme teda jednu triedu oddědit z niekoľkých iných tried. Je to hlavne z toho dôvodu, že môže vzniknúť problém kolízie názvov metód v rôznych triedach, z ktorých dedíme. Viacnásobná dedičnosť sa často obchádza práve cez interface, pretože tých môžeme v triede implementovať koľko chceme. Umožňuje nám to s inštanciou potom pracovať určitým spôsobom a vôbec nás nezaujíma, akého typu objekt v skutočnosti je a čo všetko navyše obsahuje.

Pridajme si k projektu interface IJester. Bude to interface jaštera. Ten bude vedieť tiež dýchať a ešte sa plaziť:

Public Interface IJester
    Sub PlazSe()
    Sub Dychej()
End Interface

Vyskúšajme si "viacnásobnú dedičnosť", presnejšie implementáciu viac rozhraní v jednej triede. Urobme si ptakoještěr. Pridajme k projektu triedu PtakoJester.cs. Bude implementovať rozhranie IPtak a IJester:

Public Class PtakoJester
    Implements IJester, IPtak
End Class

Potom, čo vypíšete všetky rozhrania a zakončíte riadok, Visual Studio vygeneruje potrebné metódy. Všimnite si metódy Dychej1 (). Metóda Dýchajte je totiž v rozhraní IPtak aj IJester, preto nám Visual Studio vygenerovalo 2.

Po implementácii oboch rozhranie vyzerá kód triedy takto:

Public Class PtakoJester
    Implements IJester, IPtak

    Public Sub Dychej() Implements IJester.Dychej
        Throw New NotImplementedException()
    End Sub

    Public Sub PlazSe() Implements IJester.PlazSe
        Throw New NotImplementedException()
    End Sub

    Public Sub IPtak_Dychej() Implements IPtak.Dychej
        Throw New NotImplementedException()
    End Sub

    Public Sub Pipni() Implements IPtak.Pipni
        Throw New NotImplementedException()
    End Sub
End Class

Keďže dýchanie bude rovnaké, metódu IPtak_Dychej () odstránime au metódy dýchajte () pridáme za Implements aj IPtak.Dychej. Metódy ďalej doimplementujeme:

Public Sub Dychej() Implements IJester.Dychej, IPtak.Dychej
    Console.WriteLine("Dýchám...")
End Sub

Public Sub PlazSe() Implements IJester.PlazSe
    Console.WriteLine("Plazím se...")
End Sub

Public Sub Pipni() Implements IPtak.Pipni
    Console.WriteLine("♫ ♫ ♫")
End Sub

Presuňme sa do Module1.vb a vytvorme si inštanciu ptakoještěr:

Dim ptak As PtakoJester = New PtakoJester()

Uistime sa, že má metódy ako vtáka, tak jaštera:

Metódy vtáka a jaštera - Objektovo orientované programovanie vo Visual Basic .NET

V budúcej lekcii, Pretypovania a hierarchie objektov , budeme pokračovať v podobnom duchu. Rozhranie ešte neopustíme a naučíme sa ďalšie pokročilé techniky objektovo orientovaného programovania.


 

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é 192x (74.09 kB)
Aplikácia je vrátane zdrojových kódov v jazyku VB

 

Predchádzajúci článok
Riešené úlohy k 12.-13. lekciu OOP vo Visual Basic .NET
Všetky články v sekcii
Objektovo orientované programovanie vo Visual Basic .NET
Preskočiť článok
(neodporúčame)
Pretypovania a hierarchie objektov
Článok pre vás napísal Michal Žůrek - misaz
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
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