Na pisemku byly 3 hodiny casu, prvni odchazeli po cca hodine. Odpoledne probihaly ustni zkousky (teoreticky kazda na 15 minut, ale trvaly v rozmezi 10 - 30 minut). Ty probihaly tak, ze pan Jezek pred nami kontroloval nase reseni a kdyz mu nebylo neco z reseni jasne, tak se ptal k reseni (popr. nejake doplnujici otazky, jestli danou vec opravdu chapeme).
Hodnoceni:
Bodovy zaklad cinil 10 bodu. Za kazdou otazku ale bylo mozne ziskat az 1,25 bodu, pokud se Jezkovi reseni opravdu hodne libilo. Bonusove body ze cviceni se prepocitavaly takto (ze stareho systemu):
-2 silne body (za 100 bodu) -> +1.25 silneho bodu
-1 silny bod (za 120 bodu) -> +0.75 silneho bodu
-1 slaby bod (za 150 bodu) -> +0.5 slabeho bodu
-1 slaby bod (za 200 bodu) -> +0.5 slabeho bodu
Bylo tedy mozne ziskat 2 silne a 1 slaby bonusovy bod.
Znamky: (x je ziskany pocet bodu)
1 <=> x >= 8.5
2 <=> 8.5 > x >= 6.5
3 <=> 6.5 > x >= 4.5
4 <=> 4.5 > x
Otazka c. 1:
Predpokladejte, ze v ramci velkeho projektu si potrebujeme udrzovat jeden spolecny sdileny stav mezi ruznymi instancemi vetsiho mnozstvi trid. Tento spolecny stav nam reprezentuje nasledujici trida GlobalState:
Kód: Vybrat vše
public class GlobalState
{
private static int state = 0;
public static int State => state;
public static void AddToState(int a, int b)
{
state = MagicOMatic(a, b, state);
}
private static int MagicOMatic(int a, int b, int state)
{...}
}
Kód: Vybrat vše
public class A
{
public int Value {get; private set;}
public void Method(int x)
{
if (Value > 10)
{
GlobalState.AddToState(x, 0);
}
}
}
(Poznamka: pozdeji bylo dovysvetleno, ze klicove slovo static neni v tomto reseni uplne zakazano, takze bylo mozne uzit napr. navrhovy vzor singleton)
B) Pokud jste v bode (A) odpovedeli ne, tak napiste priklad kodu, ktery by mel k reseni se statickymi prvky nejblize, ale prsto mel nejake zasadni problemy - ty popiste a vysvetlete. Pokud jste v bode (A) odpovedeli ano, tak vysvetlete, jake vsechny vyhody by vase reseni z bodu (A) melo oproti reseni puvodnimu. (1 bod)
Otazka c. 2
Predpokladejte, ze programujeme informacni system pro mezinarodni retezec materskych skolek, kde v ramci jeho implementace budeme pracovat s desitkami tisic instanci tridy, ktera reprezentuje jedno dite. Vysvetlete, zda je v dane situaci a pro nize uvedenou tridu implementace metody GetHashCode vhodna.
Kód: Vybrat vše
public class Child
{
public string FirstName {get; set;}
public string LastName {get; set;}
public int Age {get; set;}
public override int GetHashCode()
{
return Age;
}
}
Otazka c. 3
Predpokladejte nasledujici dve ruzne implementace vracejici cas za pet minut:
Kód: Vybrat vše
public class TimeUtilsA
{
public static DateTime InFiveMinutes => DateTime.Now.AddMinutes(5);
}
public class TimeUtilsB
{
public static DateTime InFiveMinutes {get; } = DateTime.Now.AddMinutes(5);
}
B) U struktury DateTime jsme si vsimli, ze metody jako vyse pouzita AddMinutes vzdy vraceji novou instanci teto struktury jako navratovou hodnotu, a nikdy nemodifikuji stavajici. Stejne tak vlastnosti jako Minute nebo Second maji na strukture pouze getter. Vysvetlete, zda to je jen opomenuti autoru standardni knihovny .NET, nebo zda ma tento zpusob implementace nejake vyhody (a rozvedte jake). (1 bod)
Otazka c. 4
Co vypise nasledujici program na standardni vystup? Detailne vysvetlete proc. (1 bod)
Kód: Vybrat vše
class Prg4
{
static void Func<X>(X v)
{
Console.WriteLine("1");
}
static void Func(int i)
{
Console.WriteLine("2");
}
public static void SafeFunc<X>(X value)
{
if (value == null)
{
throw new ArgumentNullException(nameof(value));
}
Func(value);
}
public static void Main(string[] args)
{
SafeFunc(123);
SafeFunc(3.14);
}
}
Otazka c. 5
Vysvetlete v kontextu jazyka C# a platformy .NET terminy verifiable code, unverifiable code, a unsafe code. Jaky je mezi nimi vztah? (1 bod)
Otazka c. 6
Predpokladejme nasledujici program:
Kód: Vybrat vše
class A
{
public virtual int m(int x)
{
return x - 10;
}
}
class B : A
{
public virtual int m(int x)
{
return x + 10;
}
}
class C : B
{
public override int m(int x)
{
return base.m(x) * 2;
}
}
class Prg6
{
public static void Main()
{
A a = new C();
Console.WriteLine($"{a.m(1)}");
}
}
B) Lisilo by se nejak chovani programu, kdyby ve tride B byla metoda m uvozena klicovym slovem override misto virtual? Pokud ano, tak vysvetlete, proc jazyk C# umoznuje v teto situaci volbu mezi temito moznostmi. Pokud ne, tak vysvetlete, proc jsou v jazyce C# obe klicova slova override i virtual, a zda by v jine situaci byl mezi nimi nejaky rozdil. (1 bod)
Otazka c. 7
Co vypise nasledujici program na standardni vystup? Detailne vysvetlete proc. (1 bod
Kód: Vybrat vše
class Prg7
{
public static void Main()
{
int a = 5;
var x = $"a is {a}";
a++;
Console.WriteLine(x);
}
}