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í.

1. cvičení

Základy C#: proměnné, podmínky, cykly

  • vytvořit nový projekt v C#
    • za použití vámi zvoleného editoru (Visual Studio, VS Code, Rider, …)
    • z příkazové řádky (příkaz dotnet new)
  • spustit program v C#
    • za použití vámi zvoleného editoru (Visual Studio, VS Code, Rider, …)
    • z příkazové řádky (příkaz dotnet run)
  • umět definovat proměnnou
    • uvědomovat si, že C# je staticky typovaný (každá proměnná má určený datový typ)
  • umět definovat pole (seznam hodnot) a nastavit jeho velikost (počet prvků)
  • zapsat v jazyce C# základní operace, které už znáte z Pythonu
    • načíst řádek vstupu (Console.ReadLine())
    • vypsat hodnotu proměnné nebo výsledek výpočtu na výstup (Console.WriteLine())
    • umět převést textový řetězec na číslo (int.Parse)
  • zapsat v C# základní řídící struktury
    • podmínky (if, else)
    • cykly (for, foreach, while)
  • umět definovat funkci (včetně parametrů a návratové hodnoty)

2. cvičení

C#: textové řetězce (string), základní datové struktury (List, Dictionary)

  • pracovat v C# s textovými řetězci (string)
    • znát základní metody (např. IndexOf, Split)
  • pracovat v C# s poli (Array)
    • projít pole po prvcích
    • zjistit délku pole
    • znát základní metody (např. Array.IndexOf, Array.Sort)
    • umět definovat vícerozměrné pole (např. int[,])
  • použít v C# základní datové struktury, které už znáte z Pythonu
    • List – seznam (list)
    • Dictionary – slovník (dict)
    • Stack – zásobník
    • Queue – fronta

3. cvičení

Kvalita a čitelnost kódu – refaktorování, DRY
Třídy, objekty, rozhraní (interface)

  • uvědomovat si, že napsaný program má být pochopitelný nejen pro počítač, ale i pro člověka, který ho bude číst po nás, a tedy záleží na čitelnosti kódu
    • pojmenovávat proměnné a funkce co nejpřesněji
    • dodržovat zásadu DRY: snažit se zbytečně neopakovat stejný kód
    • …
  • umět refaktorovat kód; je vhodné využívat k tomu funkce vašeho IDE (znát klávesové zkratky)
    • přejmenovat proměnnou
    • extrahovat část kódu do funkce
    • …
  • používat třídy a objekty pro seskupení souvisejících dat (a operací s nimi)
  • chápat význam rozhraní (interface)
    • pomocí rozhraní definujeme funkcionalitu ("co má třída dělat"), konkrétní implementace ("jak to dělá") pak může být v každé třídě jiná
    • umět v jazyce C# zapsat, že třída implementuje rozhraní (class ImplementationClass : ISampleInterface)

4. cvičení

Zapouzdření (public, private), dokumentační komentáře, properties
Porovnávání, třídění – rozhraní IComparable, IEquitable

  • používat třídy a objekty pro omezení přístupu k datům a povolení jen vybraných operací – rozlišovat veřejné (public) a privátní (private) datové položky a metody
  • umět zdokumentovat třídy, funkce a jejich parametry pomocí dokumentačních komentářů
  • chápat význam klíčového slova static pro označení metod a dat, které patří přímo typu (třídě) a ne konkrétním instancím (objektům)
  • pro vlastní třídy umět definovat rovnost (IEquatable) – návod
  • pro vlastní třídy umět definovat porovnání (IComparable); umět definovat i více způsobů porovnávání (pomocí porovnávacích funkcí nebo rozhraní IComparer)
  • uvědomovat si, že některé operace můžou záviset na jazykovém prostředí (např. porovnávání textových řetězců, formát desetinných čísel), a umět nastavit jazykové prostředí (viz výše)

5. cvičení

Soubory

  • Číst a zapisovat textové soubory pomocí StreamReader a StreamWriter
    • Použít konstrukci using pro automatické zavření souboru
    • Při práci se soubory využít try/catch blok pro odchycení výjimek
  • Vědět, že různé způsoby spuštění programu můžou pracovat s různou “working directory” – pak se může lišit relativní cesta k souborům
    • Umět ve vašem IDE nastavit “working directory”
  • Umět číst argumenty předané programu při spuštění (args v Main metodě)
    • Umět na příkazové řádce a ve vašem IDE nastavit argumenty programu

6. cvičení

Grafické uživatelské rozhraní – WinForms

  • Vytvořit v C# aplikaci s uživatelským rozhraním.
    • Vytvořit ovládací prvky UI (tlačítka, …) a nastavit jejich pozici a vlastnosti.
    • Zpracovávat události ovládacích prvků (kliknutí na tlačítko).

7. cvičení

Dědičnost, virtuální metody
Diskrétní simulace

  • 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)

8. cvičení

Generické typy (typové parametry)
Úvod do funkcionálního programování
Enumerátory (generátory)

9. cvičení

Dynamické programování

  • pomocí memoizace (cache) zrychlit výpočet rekurzivních funkcí (neopakovat víckrát stejný výpočet)
  • využít techniku dynamické programování pro odstranění rekurze (vyplňovat cache popořadě pomocí cyklu)

10. cvičení

Objektová dekompozice
Unit testy

  • dekompozice úlohy do objektů (tříd) a jejich metod
  • chápat význam testů pro ověření funkčnosti programu
  • umět napsat testy v C# pomocí vhodného frameworku (např. xUnit, MSTest)
  • umět spustit existující unit testy a z výstupu poznat, které testy prošly a které ne

11. cvičení

ukázková zkoušková úloha (žádná nová látka)

12. cvičení

zápočtový test (žádná nová látka)