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 Zapouzdření (public, private), dokumentační komentáře

  • 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 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ářů

4. cvičení

Třídy, objekty, rozhraní (interface), properties Porovnávání, třídění – rozhraní IComparable, IEquitable

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

5. cvičení

Dědičnost a kompozice
Diskrétní simulace

  • umět vysvětlit pojmy “dědičnost” a “kompozice” v objektově orientovaném programování
  • umět implementovat diskrétní simulaci (zatím bez událostí, jen diskrétní časové kroky) podle zadaného popisu
    • vytvořit model zadaného problému (jeho reprezentaci pomocí programu)

6. 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 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)

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

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í

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

11. cvičení

Procvičování na zápočtový test (žádná nová látka)

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

13. cvičení

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