Zkouska 20.1.2016

Cílem semináře je seznámit posluchače s jazykem C#, prostředím platformy .NET a tvorbou aplikací s grafickým uživatelským rozhraním. Předpokládají se znalosti objektově orientovaného programování.
Quarwen
Matfyz(ák|ačka) level I
Příspěvky: 7
Registrován: 8. 1. 2016 17:31
Typ studia: Informatika Bc.

Zkouska 20.1.2016

Příspěvek od Quarwen »

Prubeh zkousky:
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) 
  {...}
}
Nasledujici trida A je ukazkou jedne z mnoha trid naseho projektu, ktere budou sdileny stav vyuzivat:

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);
    }
  }
}
A) Bylo by mozne v C# misto GlobalState zapsat tridu s ekvivalentnimi vlastnostmi, ale bez pouziti statickych datovych polozek a metod? Pokud ne, vysvetlete proc. Pokud ano, tak priklad takove implementace napiste (zaroven uprave kod tridy A, aby bylo zrejme, jak budete novou implementaci GlobalState pouzivat). (1 bod)
(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);
}
A) Jsou obe implementace funkce ekvivalentni nebo jsou mezi nimi nejake rozdily? Vysvetlete a zhodnotte, ktera je vhodnejsi. (1 bod)

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)}");
  }
}
A) Co tento program vypise na standardni vystup? Vysvetlete proc. (1 bod)

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);
  }
}
Odpovědět

Zpět na „NPRG035 Jazyk C# a platforma .NET“