Úlohy na procvičení

Virtuální metody

Co vypíše následující program? Jaké jsou typy proměnných b, d a d2?

namespace dedicnost;

class Base
{
    public void A() { Console.WriteLine("Base.A"); }
    public virtual void B() { Console.WriteLine("Base.B"); }
    public virtual void C() { Console.WriteLine("Base.C"); }
}

class Derived : Base
{
    public new void A() { Console.WriteLine("Derived.A"); }
    public override void B() { Console.WriteLine("Derived.B"); }
    public new void C() { Console.WriteLine("Derived.C"); }
}

class Program
{
    static void Main(string[] args)
    {
        var b = new Base();
        var d = new Derived();

        b.A();
        b.B();
        b.C();

        d.A();
        d.B();
        d.C();

        var d2 = (Base)d;
        d2.A();
        d2.B();
        d2.C();
    }
}

Diskrétní simulace pošty

Máme poštu s jednou přepážkou. První zákazník přijde 1 minutu po otevření a další přicházejí v náhodných intervalech (0 až 6 minut) a řadí se do fronty (berou si pořadová čísla). Obsloužení jednoho zákazníka u přepážky trvá 1 až 4 minuty (náhodně). Pošta zavírá 30 minut po otevření, nicméně obslouží ještě všechny zákazníky, kteří už jsou ve frontě. Simulace by měla průběžně vypisovat všechny důležité události, vždy s aktuálním časem (v minutách).

Učební výstupy

Učební výstupy podávají zhuštěný souhrn základních konceptů a dovedností, které byste měli umět vysvětlit a/nebo použít po každém cvičení.

  • chápat význam klíčových slov virtual a override v kontextu virtuálních metod
    • umět vysvětlit, jak jsou virtuální metody implementované pomocí tabulky virtuálních metod (VMT)
  • umět vysvětlit pojmy “dědičnost” a “kompozice” v objektově orientovaném programování
  • umět implementovat diskrétní simulaci (discrete event simulation) podle zadaného popisu
    • vhodně reprezentovat události a jejich kalendář
    • vytvořit model zadaného problému (jeho reprezentaci pomocí programu)