Chci geek triko! Chci geek triko!
Extra 10 % bodů navíc a tričko zdarma při zadání kódu "TRIKO10"

Cvičení k 19. lekci OOP v C# .NET

C# .NET Objektově orientované programování Cvičení k 19. lekci OOP v C# .NET American English version English version

Unicorn College ONEbit hosting Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Následující 3 cvičení vám pomohou procvičit znalosti objektově orientovaného programování v C# .NET z minulé lekce. Ve vlastním zájmu se je pokuste vyřešit sami. Pod článkem máte pro kontrolu řešení ke stažení. Ale pozor, jakmile se na něj podíváte bez vyřešení příkladů, ztrácí pro vás cvičení smysl a nic se nenaučíte :)

Pokud si opravdu nebudete vědět rady, podívejte se raději znovu do minulého tutoriálu a pokuste se na to přijít.

Jednoduchý příklad

Naprogramujte aplikaci, ve které figurují objekty člověk a budík. Člověku vytvořte metodu VzbudSe(), která vypíše "Jsem vzhůru". Budíku vytvořte událost Zvoneni, do které tuto metodu člověka později přihlásíte. Při deklaraci události použijte vlastní delegát. Vytvořte instance budíku a člověka, metodu VzbudSe() člověka přihlaste na událost budíku. Vypište "Budík zvoní" a nechte jej zazvonit, na což člověk zareaguje vzbuzením.

Ukázka obrazovky programu:

Konzolová aplikace
Budík zvoní
Jsem vzhůru

    class Budik
    {
    }
    class Clovek
    {
    }

Středně pokročilý příklad

Naprogramujte aplikaci, ve které figuruje auto a semafor. Auto má uloženou svou aktuální rychlost (např. 100 km/h) a reaguje na změnu barvy semaforu tím, že vypíše "Jedu" nebo "Stojím". Pokud je po změně semaforu barva červená, auto se zastaví. Semafor je samozřejmě řešený pomocí objektu s událostí změny barvy, k její deklaraci využijte delegát EventHandler.

  • Vytvořte instanci semaforu, který zpočátku svítí zeleně. O této skutečnosti informujte výpisem "Svítí zelená" do konzole.
  • Vytvořte auto, přihlaste ho k události změny barvy semaforu a nechte jej jet, o čemž opět informuje do konzole, viz výpis níže.
  • Následně na semaforu rozsviťte oranžovou.
  • A dále červenou.

Ukázka obrazovky programu:

Konzolová aplikace
Svítí zelená
Jedu
Rozsvítila se oranžová
Jedu
Rozsvítila se červená
Stojím

    class Auto
    {
    }
    class Semafor
    {
    }

K načtení barvy semaforu v autě použijte parametr sender.

Pokročilý příklad

Naprogramujte aplikaci, ve které figurují 4 objekty: budík, člověk, digibudík a babička. Babička je potomkem člověka, digibudík je potomkem budíku. Asi vás nepřekvapí, že instanci babičky a člověka přihlásíme k události zvonění obou budíků.

Událost budíku používá delegát EventHandler, ve kterém jsou zadané generické argumenty události události zvonění. To je objekt poděděný ze třídy EventArgs, která obsahuje vlastnost Hlasitost, ta udává hlasitost zvonění. Deklarace události vypadá tedy asi takto:

public event EventHandler<ParametryUdalostiZvoneni> Zvoneni;

Protože je babička nahluchlá, slyší pouze digibudík, který vyvolává událost s vyšší hlasitostí. Nechte oba budíky zazvonit. O celé situaci informujte výpisy do konzole, viz níže.

Ukázka obrazovky programu:

Konzolová aplikace
Budík zvoní
Člověk vstává
Digibudík zvoní
Člověk vstává
Babička vstává

    class Babicka: Clovek
    {
    }
    class Budik
    {
    }
    class Clovek
    {
    }
    class DigiBudik: Budik
    {
    }
    class ParametryUdalostiZvoneni: EventArgs
    {
    }

 

Stáhnout

Staženo 368x (137.92 kB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

 

Článek pro vás napsal David Čápka
Avatar
Jak se ti líbí článek?
3 hlasů
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor sítě se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.
Miniatura
Předchozí článek
Události
Aktivity (8)

 

 

Komentáře

Avatar
Andrej Farkaš:28.11.2013 9:26

Je tam tuším nejaký zlý príklad na stiahnutie ;-)

Odpovědět 28.11.2013 9:26
Live. Love. Learn.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Andrej Farkaš
David Čápka:28.11.2013 10:08

Díky, opraveno.

Odpovědět 28.11.2013 10:08
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Michal Gros
Redaktor
Avatar
Michal Gros :13.12.2015 15:34

Musím se přiznat , že poslední příklad jsem nedal vůbec snadno - chtělo by to trochu rozepsat v učebnici nenapadlo mě že ty parametry jsou normální třída a je potřeba ji vyrobit parametrem new s konstruktorem.

Pro ty co budou tápat jak se používají argumenty je to kouzelně jednoduché

protected void zvonim(int hlasitost)
        {
            if (Zvoneni!=null)
                { Zvoneni(this, new paramertyUdalostiZvoneni(hlasitost,JmenoBudiku)); }
        }
Odpovědět 13.12.2015 15:34
Jestli jste dobří nahrnou na Vás spoustu práce. Jestli jste sakra dobří, tak se jí dokážete zbavit.
Avatar
Ondřej Krsička
Redaktor
Avatar
Ondřej Krsička:27.4.2016 16:52

Ten pokročilý jde udělat i bez toho ParametryUdalos­tiZvoneni, ale v konstruktoru babičky prostě zajistím, aby se její vzbuzení přidalo jen na digibudík.

 
Odpovědět 27.4.2016 16:52
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.