Programování v C# Úvodní slovo 1 / 25
Obsah přednášky Seznámení s předmětem Co je.net Vlastnosti.NET 2 / 25
Kdo je kdo Petr Vaněček vanecek@pf.jcu.cz J 502 Václav Novák vacnovak@pf.jcu.cz?? Při komunikaci uvádějte do e-mailu předmět ve tvaru: [PJC1] +důvod 3 / 25
Plán semestru 1. Úvodní slovo 2. Struktura.NET aplikace 3. Zvyklosti a vývojová prostředí 4. Datové typy 5. Třídy, rozhraní a jmenné prostory 6. Operátory, kolekce a generika 7. Výjimky, vlákna, události 8. Souborový vstup/výstup 9. XML 10. Síťová komunikace 11. Reflexe 12. Ladění 4 / 25
Požadavky na zápočet Vypracování krátkých úložek v průběhu semestru Malé úložky min. 25 bodů z celkových 50 bodů Samostatná práce!!! Vypracování semestrální práce Získání min. 25 bodů z celkových 50 bodů Funkční program Programátorská dokumentace Uživatelská příručka Zadání práce v průběhu 2. týdne 5 / 25
Doporučená literatura Web předmětu home.pf.jcu.cz/ vanecek/education/pjc1 např. J. Sharp: Microsoft Visual C#.NET Step by Step 6 / 25
Cíle.NET Problémy při běžném programování Jazyková nekompatibilita Platformová nekompatibilita Nekonzistentní knihovny Problémy s pamětí Nedůsledný objektové programování Cíle Odstranit/omezit výše popsané problémy Řešení??? 7 / 25
Požadavky na platformu Interoperabilita možnost spolupráce s hotovými knihovnami (většinou COM technologie) Jednotný Runtime podobně jako u JAVy využít mezijazyk (Common Intermediate Language CIL) Jazyková nezávislost jednotný typový systém definující datové typy a programové konstrukty (Common Type System) Knihovna základních tříd knihovny pro často používané funkce (Base Class Library) Jednoduchá instalace a údržba problémy s registry, umístěním souborů a DLL hell Bezpečnost bezpečnostní mechanismy součástí Runtimu (trust levels) 8 / 25
Platforma.NET Principy známé s JAVy Jednotné běhové prostředí (Virtual Machine) Optimalizace kódu pro konkrétní procesor (Just-In-Time kompilace) Zjednodušení zprávy paměti (Garbage Collector) Knihovny často používaných (Class Library).NET navíc přináší Jazyková nezávislost Nový jazyk plně využívající možnosti.net (C#) 9 / 25
Standardizované řešení Zahájení projektu r. 2000 Microsoft Hewlett-Packard Intel Standard ECMA r. 2001 CLI - Common Language Infrastructure C# Standard ISO r. 2003 Podmínka Standard musí být volně k dispozici 10 / 25
Microsoft a jiní.net Framework dnes již součástí MS OS Nyní ve verzi 2.0 (ve Vista 3.0) Obsahuje i překladače pro C#, J#, Visual Basic.NET %systemdir%/microsoft.net/framework/verze.net Framework SDK na stránkách MS Debugger s GUI IL Disassembler Dokumentace 11 / 25
Microsoft a jiní Shared Source Common Language Infrastructure Zdrojové kódy k MS implementaci CLI Pro systémy Windows, FreeBSD, Mac OS X.NET Compact Framework Windows CE Mono Open source project Linux, Solaris, Mac OS X, Windows, Unix DotGNU GNU náhrada MS.NET Frameworku Linux, *BSD, Mac OS X, Solaris, Windows,... 12 / 25
Common Intermediate Language (CIL) mezijazyk do kterého se kompilují všechny programy Obdoba Javovského bytecodu Objektový Není interpretovaný Just In Time kompilace Probíhá inkrementálně Překládá se jen to co je třeba Možno naprogramovat vlastní JITer Kompilace pro libovolnou platformu Microsoftí CIL MSIL C# code J# code VB.NET code compiler compiler compiler CIL JIT 1001 1110 0010 1101 1111 0001 1101 1001 13 / 25
Common Intermediate Language (CIL) Zdrojový kód Překlad a spuštění 14 / 25
Common Intermediate Language (CIL) Disassembler 15 / 25
Common Language Runtime (CLR) Řízené prostředí pro běh programů v CIL Nahrávání tříd JIT kompilátor Správa paměti Správa vláken Správa výjimek Typová kontrola Zabezpečení Ladění Spolupráce s Base Class Library 16 / 25
Common Language Runtime (CLR) 17 / 25
Common Type System (CTS) Umožňuje spolupráci mezi různými jazyky Obdobné datové typy ve všech jazycích možno sdílet data Možnosti Instanciování třídy napsané v jiném jazyce Přístup k veřejným členům třídy v jiném jazyce Dědění třídy od třídy v jiném jazyce 18 / 25
Common Type System (CTS) Typy Hodnotové Referenční Systémové hodnotové typy Výčty Uživatelské hodnotové typy Ukazatele Samopopisné typy Rozhraní Třídy Pole Delegáti Uživatelské referenční typy Boxované hodnotové typy 19 / 25
Common Type System (CTS) Hodnotové typy Alokují se na zásobníku Systémové hodnotové typy čísla, znaky řetězce Uživatelské struktury Referenční typy Odkaz na zásobníku, data na heapu Rozhraní typ na který lze přetypovat instance tříd implementující dané rozhraní Samopopisné typy Typy, které poskytují informace garbage collectoru Delegáti typy odkazující na metodu Boxované typy hodnotové typy zabalené tak, aby s nimi šlo zacházet jako s referenčními 20 / 25
Garbage Collector (GC) Problémy se správou paměti Nutno alokovat paměť na společné hromadě Nutno uvolnit paměť, když se přestane používat Problematické odhalování potíží s alokací/dealokací paměti Řešení ponechat na systému garbage collector Součást runtimu Kontroluje zda existuje reference na instanci Odstraňuje instance bez referencí 21 / 25
Garbage Collector (GC) Spouštění GC je nedeterministické Spouští se v okamžiku kdy na heapu dochází místo Jak se ale zjistí na který objekt vede reference? Problémy s cyklickými referencemi A B C B b C c B b 22 / 25
Garbage Collector (GC) Každá aplikace má množinu kořenových objektů (např. globální a statické objekty) Všechny instance se označí jako nedosažitelné Prochází se od kořenů a staví se graf Pokud je instance nedosažitelná, přidá se do grafu a nastaví se jako dosažitelná Pokud je instance dosažitelná, může se prohledávání této cesty ukončit Dosažitelné objekty jsou setřeseny na začátek heapu Ukazatele na dosažitelné objekty se opraví D ROOT C objekty B A D ROOT C objekty B A F E D C B A F D C A 23 / 25
Base Class Library (BCL) Rozsáhlá knihovna tříd, rozhraní a hodnotových typů Zajišťuje např. Kolekce Souborové vstupy/výstupy Práce s XML Přístup k DB Práce s komunikačními protokoly Tvorba GUI Spolupráce s neřízeným kódem Web services Podporu národních zvyklostí 24 / 25
Konec 25 / 25