Úlohy na procvičení
Virtuální metody
Co vypíše následující program? Jaké jsou typy proměnných b, d, d2 a d3?
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();
Base d2 = d;
d2.A();
d2.B();
d2.C();
var d3 = (Base)d;
d3.A();
d3.B();
d3.C();
}
}Diskrétní simulace pošty
Máme poštu s jednou přepážkou, kde se dají vyzvedávat balíky. Pošta nabízí dvě služby: vyzvednutí balíku a vyzvednutí s kódem. Vyzvednutí balíku trvá náhodně 2 až 4 minuty. Vyzvednutí s kódem je rychlejší, protože zaměstnanci pošty začnou balík připravovat hned po zadání kódu do vyvolávacího systému, takže trvá jen 1 až 2 minuty. Jednu minutu po otevření pošty přijdou první dva zákazníci, jeden bez kódu a jeden z kódem. Další zákazníci bez kódu přicházejí v náhodných intervalech 1 až 5 minut a zákazníci s kódem přicházejí také v náhodných intervalech 1 až 5 minut. Pošta zavírá 30 minut po otevření, nicméně obslouží ještě všechny zákazníky, kteří už jsou ve frontě.
Naprogramujte simulaci pošty a porovnejte několik způsobů vyvolávacího systému (fronty):
- Všichni zákazníci se řadí podle času příchodu a čekají ve společné frontě.
- Zákazníci s kódem mají přednost a oddělenou frontu (pokud je někdo ve frontě s kódem, tak se obslouží dřív než kdokoliv bez kódu, i když přišel později).
- Zkuste vymyslet vlastní způsob vyvolávacího systému, který preferuje rychlé vyzvednutí s kódem, ale zároveň neblokuje úplně zákazníky bez kódu.
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). Na konci simulace vypište průměrnou dobu čekání pro zákazníky s kódem a bez kódu.
Zkuste se zamyslet, jaké události budou nastávat. Jaké entity (lidi, věci, …) potřebujeme v programu reprezentovat?
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
virtualaoverridev kontextu virtuálních metod- umět vysvětlit, jak jsou virtuální metody implementované pomocí tabulky virtuálních metod (VMT)
- 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)