Co bylo na mých přednáškách z NMIN201 Programování 3 ==================================================== 08.01.2020: Měření času * DateTime, TimeSpan, měření času * String vs StringBuilder Delegáty * definice * proměnná, dosazení, volání * parametr funkce ( Vypis(x,y,Funkce) ) Anonymní funkce * definice * proměnná, dosazení, volání Vlákna * VyrobNaplnASetridPole * using System.Threading; * Synchronizace, problémy Diskrétní simulace II * kdybychom měli modelovat něco jiného, co se změní?: - hlavní cyklus stejný - změní se: - data v modelu modelující společný svět - jaké procesy - jaké události - jak budou procesy zpracovávat události => když vyřešíme TOHLE, tak jsme udělali většinu práce, aniž bychom u toho napsali nějaký příkaz (a naopak podle toho popisu už to může naťukat kdokoliv * kulturně zadávaná vstupní data Hygiena programování 1. Oddělovat různé činnosti 2. Pracovní deník 3. ToDo-list, bug-list, issue tracker 4. Správa versí 5. Automatické testy, TDD 18.12.2018: Generické metody, generické třídy, List<> Programování pomocí testů - Příklad: funkce na určení podílu dvou čísel zadaných ve stringu - Testování – vstup ručně, kontrola očima = pracné, pomalé, nespolehlivé - Nahradit zadávání vstupu kódem - Nahradit kontrolu výsledků kódem - Funkce na otestování jednoho volání - Očekávaný výsledek - Funkce na otestování jednoho volání - Funkce na otestování funkce - Porovnání jednoho výsledku - Vracet chybový kód i výsledek - Tuple (C#7) - Přidávání testů (protože je to snadné) - Počítání chyb - unit-testy ve Visual Studiu Výjimky - výjimka - co se děje, když nastane výjimka (vynořování ze zásobníku volání) - try-catch - více catch-bloků - catcht – proměnná (lokální v except) - znovu-vyvolání: throw - vyvolání nové výjimky throw new ...Exception - finally 11. 12. 2019: Diskrétní simulace * úloha písek - 1 auto, vzoreček, 2 auta, 3 auta, jeden nakladač –vzoreček nestačí * model * (skoro) každý program modeluje svět, přenos zadáni TAM a výsledku ZPĚT * model nemusí být jen program, třeba rovnice / soustava rovnic * co teda s tím pískem - modelovat * modely "spojité x diskrétní" * událost, kalendář, proces * ručně modelovat – to by šlo naprogramovat * hodí se na to objekty, jaké objekty: - model: všechno zastřešuje - událost - proces - kalendář * kdo na co potřebuje odkaz, co objekty, počty instancí, co statické * POZOR: model obsahuje kalendář, ALE model má metodu naplánuj, která zavolá metodu kalendáře (příměr: prodavačka jízdenek má počítač, ale o jízdenku si říkáme prodavačce a nepůjčujeme si její klávesnici, abychom to sami naťukali do počítače) * jak vypadá "hlavní program" (hlavní výpočet modelu): cyklus * jak simulovat frontu čekajících na nakládání - tabule * nápad: dříve obsluhovat ty, kdo budou dříve hotovi - => POZOR: model nemá optimalizovat, model má odpovídat na otázku JAK BY TO DOPADLO ZA DANYCH PODMÍNEK!! * smysl modelování - NE konkrétní data, spíš sledovat chování systému (přesněji: jeho modelu) * rozšíření: model pro N aut, opakovat výpočet, .csv -> Excel => graf * Otázka zákazníka: 1. je lepší a. koupit auto a zaměstnat dalšího řidiče b. přidat dalšího chlápka s lopatou na nakládání c. koupit rychlejší auto 2. vyplatilo by se předbíhat ve frontě podle rychlosti nakládáni? a. ...při jakém počtu aut? (některé auto by mohlo pořád stát a čekat a být předbíháno) => na to může model odpovědět (za předpokladu, že modelujeme správně = dostatečně přesně, spoustu věcí vypouštíme (nehody, objížďky, nemoce/opilost nakladatele...) 4. 12. 2019: Grafika v C# (WinForms) - Graphics - Získání: - this.CreateGraphics() - Graphics.From… - Pen - Pens (properties) = příklad čára = příklad sinusoida - Color - Připravené (properties): Color.Red - Pero – caps = příklad měněná tloušťka - Problém: mizející obrázek - PictureBox a Bitmap - Refresh() = příklad Lissajouss - DrawRectangle - FillRectangle = příklad Lissajouss – obdélníky - Štětec - Brushes (properties) - new SolidBrush() - Color – FromARGB, RGB = vypočítaná barva = příklad tabulka barev - BitMap - GetPixel, setPixel = příklad kopie = příklad barevna slozka = příklad světlost – převod na šedou 0,2989 / 0,5866 / zbytek = práh - metoda Distribuce chyby - Změna souřadnic - Překlopení x,y - Zvětšení - Deformace - DrawString - Font - výběr obdélníka 27. 11. 2019: Programování řízené událostmi - princip - dosud „program provádí algoritmus“ - událost - zpracování - hierarchie - polymorfismus Visual Studio - Designer, ToolBox, Property editor - Druhy properties - Oddělení properties a funkčního kódu - Syntaxe: partial class Příklady - Prázdná aplikace - Tlačítko, nadpis - MessageBox - Nastavování vlastností - Unikající tlačítko Sdílení obslužných metod - Sender - Přetypování - …is… Příklad: Kalkulačka Příklad: Kalkulačka s páskou 20. 11. 2019: Objekty: - spojení dat a kódu - třída x object - Pes - deklarace, členské proměnné, inicializace 0 - konstruktor, this - více konstruktorů - výchozí konstruktor bez parametrů - //vygenerování konstruktoru ve VS2017.. dědičnost - co to je, co se dědí - private-(protected)-public - : base v konstruktoru - new při přepisování metody virtuální metody - proč - ne-virtuální x virtuální, určování, jakou metodu volat - tabulka virtuálních metod, ukazatel na ni (konstruktor!) - virtual-override 13.11.2019: jazyk – C#, MS Visual Studio objekty a OOP: - způsob uvažování o částech programu - CO x JAK - Uvažování v problémové doméně - spojení dat a funkcí - zapouzdření = ukrývání vnitřku, díky tomu konsistentní stav - typ x instance: třída x objekt (formička x bábovička) - i formička může mít své vlastnosti = statické členy (funkce i data) - příklad: komplexní čísla C# a Microsoft Visual Studio - 1995 Java, bytecode - 2002 C#, .NET - Anders Hejlsberg - PolyPascal -> Turbo Pascal - 1989 Borland - Borland Delphi chief architect - 1996 Microsoft - 2000- C# lead architekt - program = sbírka tříd - metoda Main() - žádné “globální” metody ani proměnné, všechno patří nějaké třídě - trochu syntaxe jazyka C#