PV178 – Úvod do vývoje v C#/.NET RNDr. Jaroslav PELIKÁN, Ph.D. katedra počítačových systémů a komunikací Fakulta informatiky Masarykovy univerzity Botanická 68a, 602 00 BRNO Kanc.: A209, : +420 – 549 495 751 E-mail: pelikan@fi.muni.cz http://www.fi.muni.cz/usr/pelikan
Cíle předmětu Osvojit si základní návyky tvorby kvalitního kódu v jazyce C# Po absolvování tohoto předmětu by student měl: znát základní kroky a techniky doprovázející proces vývoje aplikací v C#/.NET ovládat prostředí Visual Studio 2013 znát hlavní rysy a programové konstrukce pro-gramovacího jazyka C# být schopen psát kvalitní objektový kód 10/04/2017
Organizace předmětu Rozsah (hodinová dotace): 1/2 Přednáška: Cvičení: 2 hodiny týdně první polovinu semestru (7 týdnů) Cvičení: celý semestr Ve druhé polovině semestru jsou plánovány přednášky (vedené dalšími vyučujícími) pro zájemce na vybraná témata 10/04/2017
Používané technologie Výuka probíhá s využitím: programovacího jazyka C# platformy MS .NET Framework vývojového prostředí MS Visual Studio 2013 studenti Fakulty informatiky mohou některou z plných verzí (Professional, Premium, Ultimate) získat přes MSDN Academic Alliance 10/04/2017
Vstupní předpoklady Znalost: základů programování a algoritmizace syntaxe programovacího jazyka C/C++ nebo Java základů objektově orientovaného programování – na úrovni předmětu: PB161 Programování v jazyce C++ nebo PB162 Programování v jazyce Java 10/04/2017
Osnova (1) .NET Framework a jeho architektura Charakteristika jazyka C# Typový systém v .NET: předdefinované typy hodnotové typy referenční typy nulovatelné typy (null coalescing operator) implicitně typované proměnné 10/04/2017
Osnova (2) Typ třída a její členy: Jmenné prostory přístupnost ke členům třídy datové položky metody konstruktory instancí – vytvoření objektu destruktory konstanty statické členy třídy (metody) a statické třídy vlastnosti Jmenné prostory 10/04/2017
Osnova (3) Předávání parametrů metodám: Přetěžování metod parametry předávané hodnotou parametry předávané odkazem výstupní parametry Přetěžování metod Metody s proměnným počtem parametrů Principy OOP: zapouzdření dědičnost (skrývání metod) polymorfismus (virtuální metody, předefinování metody) 10/04/2017
Osnova (4) Abstraktní metody a třídy Rozhraní Výjimky Rozšiřující metody Výčtové typy Pole: jednorozměrná vícerozměrná pravidelná vícerozměrná nepravidelná 10/04/2017
Osnova (5) Řetězce Struktury Indexery Generické datové typy Kolekce: negenerické generické Iterátory Delegáty (anonymní metody, lambda výrazy) 10/04/2017
Osnova (6) Události Práce se soubory (proudy): LINQ Kolokvium, zápočet textové soubory binární soubory práce se souborovým systémem LINQ Kolokvium, zápočet 10/04/2017
Literatura Pelikán, Jaroslav: Prezentace k přednáškám z před-mětu PV178 Úvod do vývoje v C#/.NET, http://www.fi.muni.cz/usr/pelikan Richter, Jeffrey: CLR via C#, 3rd ed. Redmond: Microsoft Press, 2010, ISBN: 9780735627048. Skeet, Jon: C# in depth, 2nd ed. Stamford: Manning, 2011, ISBN: 9781935182474. Marguerie, Fabrice, Steve Eichert, Jim Wooley: Linq in action, Edited by Matt Warren, Greenwich: Manning, 2008, ISBN: 9781933988160. Sharp, John: Microsoft Visual C# 2010, Computer Press 2010, ISBN: 978-80-251-3147-3. 10/04/2017
Ukončení předmětu (1) V průběhu semestru je možné získat maxi-málně 100 bodů: 42 bodů: domácí úkoly (6 úkolů po 7 bodech) 38 bodů: projekt (nutné získat alespoň 20 bodů) 20 bodů: testy na cvičeních Při ukončení předmětu: kolokviem je zapotřebí získat min. 60 bodů zápočtem je zapotřebí získat min. 50 bodů 10/04/2017
Ukončení předmětu (2) Domácí úkoly: Projekt: v průběhu semestru bude zadáno 6 domácích úkolů z probraných okruhů (po 7 bodech) o zadání prvního úkolu a způsobu zveřejňování dalších budete informováni e-mailem na vypracování budete mít vždy alespoň 7 dní od zveřejnění Projekt: nutno odevzdat samostatný projekt prokazující vaši schopnost vytvořit funkční a použitelnou aplikaci 10/04/2017
Ukončení předmětu (3) možné získat maximálně 38 bodů nutné získat minimálně 20 bodů projekty budou vypsány jako tematický balík v ISu k vybranému projektu se musíte přihlásit nejpoz-ději do 31. 3. 2015 je možné navrhnout (zvolit si) vlastní projekt v týdnu od 20. 4. 2015 proběhne kontrola projek-tů odevzdáním návrhu struktury: typicky ve formě UML diagramu tříd (pokud se u studenta předpokládá znalost UML) vyhotovený projekt musí být odevzdaný do 5. 6. 2015 10/04/2017
Ukončení předmětu (4) Testy: Cvičení: na začátku většiny cvičení formou odpovědníku v ISu, který je zaměřený na téma poslední (popř. předposlední) před-nášky za správné vyplnění odpovědníků je možné získat celkem maximálně 20 bodů Cvičení: docházka na cvičení nebude kontrolována neúčastí na cvičeních přicházíte o možnost bodů z testů 10/04/2017
.NET Framework (1) Softwarová platforma vyvinutá firmou Micro-soft, která podporuje vytváření a spouštění aplikací a webových služeb VB C++ C# J# … Common Language Specification ASP.NET Web Forms Web Services Windows Forms Architektura .NET Framework 2.0 Visual Studio .NET ADO.NET & XML Base Class Library Common Language Runtime Operační systém 10/04/2017
.NET Framework (2) CLR – Common Language Runtime: běhové prostředí realizující základní infrastruk-turu, nad kterou je celý framework vybudován provádí spouštění všech programů napsaných pro .NET Framework (nezávisle na použitém programovacím jazyku) lze přirovnat k virtuálnímu stroji u jazyka Java zajišťuje např.: spouštění programů správu paměti (včetně automatické garbage collec-tion), výpočetních vláken (threads), výjimek typovou bezpečnost 10/04/2017
.NET Framework (3) BCL – Base Class Library: ADO.NET & XML: knihovna dodávaná s .NET Frameworkem obsahuje třídy sloužící pro práci např. s: grafikou soubory databází počítačovou sítí ADO.NET & XML: knihovna pro přístup k datům a pro práci s XML soubory 10/04/2017
.NET Framework (4) ASP.NET: Windows Forms: soubor technologií pro tvorbu webových aplika-cí a webových služeb Windows Forms: programové rozhraní pro vývoj grafických desk-topových aplikací poskytuje sadu tříd umožňujících přístup ke standardním ovládacím prvkům operačního sys-tému MS Windows (okno, tlačítko, menu, editační prvek atd.) 10/04/2017
.NET Framework (5) CLS – Common Language Specification: definuje základní vlastnosti programovacích ja-zyků podporované běhovým prostředím CLR .NET Framework 3.0: přináší čtyři hlavní nové komponenty: WPF – Windows Presentation Foundation: rozhraní pro vytváření grafických aplikací a jejich uživatel-ských rozhraní založeno na XML a vektorové grafice při své činnosti využívá Direct3D WCF – Windows Communication Foundation: technologie pro vývoj webových služeb a komunikační infrastruktury aplikací umožňuje vytváření aplikací orientovaných na služby (SOA – Service Oriented Application) 10/04/2017
.NET Framework (6) .NET Framework 3.5: WF – Windows Workflow Foundation: technologie pro definování (modelování) heterogenních sekvenčních procesů Windows CardSpace: programová komponenta, která bezpečně ukládá digitální identity a poskytuje jednotné rozhraní pro volbu identity k určité transakci .NET Framework 3.5: přidává dvě komponenty pro datové služby: ADO.NET Entity Framework ADO.NET Data Services poskytuje LINQ: komponenta umožňující jednotný přístup k datům a jejich zpra-cování deklarativním a funkcionálním způsobem 10/04/2017
.NET Framework (7) .NET Framework 4.0: .NET Framework 4.5: přináší zejména Parallel Extensions zlepšující podporu paralelních výpočtů u vícejádrových a distribuovaných systémů: PLINQ: paralelní implementace technologie LINQ Task Parallel Library: množina tříd umožňující efektivní zpracování úloh s využi-tím všech dostupných jader procesoru .NET Framework 4.5: doplňuje podporu pro: aplikace typu Metro Style asynchronní programování 10/04/2017
Životní cyklus aplikace (1) CLI C# zdrojový kód Překladač VB zdrojový kód Překladač CIL CLR 10111011001010 JIT J# zdrojový kód Překladač CIL – Common Intermediate Language: dříve nazývaný jako MSIL – Microsoft Interme-diate Language jazyk nezávislý na platformě, do něhož jsou pře-kládány programy napsané v jazycích kompati-bilních s .NET Frameworkem 10/04/2017
Životní cyklus aplikace (2) CLI – Common Language Infrastructure: otevřená a standardizovaná specifikace popisuje vlastnosti spustitelného kódu a prostře-dí pro jeho běh umožňuje, aby aplikace byly napsány v různých vyšších programovacích jazycích a následně spouštěny v rozličných prostředích součástí CLI je i CTS – Common Type System popisující datové typy a typový systém mezi implementace CLI patří CLR a Mono 10/04/2017
Životní cyklus aplikace (3) JIT – Just-In-Time compilation: realizována JIT překladačem, který je součástí CLR provedena v okamžiku, kdy systém detekuje, že dochází ke spuštění aplikace v CIL během ní dochází k vygenerování strojového kódu, který může být spuštěn na aktuálně použí-vané platformě výsledný kód běží ve virtuálním stroji .NET Frameworku jedná se o řízený kód (managed code) 10/04/2017
Programovací jazyk C# Vyvinutý v rámci platformy MS .NET Jedná se o objektově orientovaný jazyk Založen na jazycích C++ a Java Syntaxe C# je podobná syntaxi jazyka C (Java) Lze jej využít k tvorbě např.: desktopových aplikací webových aplikací, webových služeb a stránek programů pro mobilní zařízení (PDA, mobilní telefony) databázových programů 10/04/2017
Program v jazyce C# (1) Tvořen třídami a jejich členy (members) Třídy a další datové typy jsou organizovány ve jmenných prostorech (namespace) a mo-hou být vnořovány do jiných tříd Vstupním bodem každého programu v C# je metoda (funkce obsažená v typu třída) Main: může být v programu pouze jedna jedná se o statickou metodu návratovým typem může být void nebo int může přijímat parametry z příkazové řádky OS 10/04/2017
Program v jazyce C# (2) Metoda Main může mít jednu z následujících signatur: static void Main() static void Main(string[] args) static int Main() static int Main(string[] args) Poznámka: jazyk C# podobně jako jazyk C/C++ rozlišuje velká a malá písmena (jazyk case sensitive) 10/04/2017
Jmenné konvence (1) Dovolují rychlejší čtení a porozumění kódu Poskytují dodatečné informace o kódu Velikost písmen – kapitalizace: Pascal Case: konvence, u níž jsou víceslovné identifikátory psány dohromady (bez mezer a podtržítek mezi slovy) každé slovo začíná velkým písmenem používá se např. pro názvy jmenných prostorů, dato-vých typů (tříd, struktur, výčtových typů, …), rozhra-ní, metod, vlastností, událostí, hodnot výčtových typů příklad: ThisIsPascalCase 10/04/2017
Jmenné konvence (2) Volba jmen: Camel Case: podobně jako Pascal Case, ale první písmeno identifi-kátoru je malé používá se např. pro lokální proměnné, parametry metod, soukromé datové položky třídy příklad: thisIsCamelCase Volba jmen: Třídy, struktury Podstatné jméno nebo jmenná fráze Metody Slovesa v rozkazovacím tvaru a slovesné fráze (sloveso + předmět) Vlastnosti, proměnné Podstatné jméno nebo jmenná fráze 10/04/2017
Standardní výstup (1) Pro zobrazení hodnot na standardní výstup je možné použít statické metody definované ve statické třídě Console: Write: po vypsání posledního znaku neprovádí odřádkování WriteLine: po vypsání posledního znaku provádí odřádkování Poznámka: třída Console je definována ve jmenném prostoru System 10/04/2017
Standardní výstup (2) Prvním parametrem uvedených metod může být řetězec obsahující (kromě textu) specifi-kace, které určují místa, na nichž mají být vy-psány hodnoty dalších parametrů Specifikace se zapisují ve složených závor-kách, jež obsahují pořadové číslo vypisova-ného parametru Příklad: Console.Write("a = {0}, b = {1}", a, b); 10/04/2017
Standardní výstup (3) Poznámky: součástí specifikace mohou být i informace o tom, jakým způsobem má být hodnota odpo-vídajícího parametru formátována je-li zapotřebí vypsat hodnotu pouze jednoho parametru, je možné řetězec (jako první para-metr) vynechat 10/04/2017
Standardní vstup Pro načtení hodnoty ze standardního vstupu jsou ve třídě Console definovány statické metody: Read: načítá ze standardního vstupu jeden znak vrácená hodnota je typu int ReadLine: načítá ze standardního vstupu celý řádek vrácená hodnota je typu string Poznámka: pro převody mezi různými datovými typy lze použít metody statické třídy Convert (defi- nována ve jmenném prostoru System) 10/04/2017
Předdefinované datové typy (1) Jazyk C# poskytuje sadu předdefinovaných datových typů, které se nachází ve jmenném prostoru System Jednotlivé datové typy (vyjma typu string a object) jsou synonymy struktur, které obsahují metody tyto metody lze pomocí tečkové notace volat Všechny tyto struktury poskytují např. meto-du ToString, která umožňuje převést číselnou hodnotu na její textové vyjádření 10/04/2017
Předdefinované datové typy (2) Popis Velikost Typový ekvivalent sbyte celočíselný typ se znaménkem 8 b System.SByte short celočíselný typ 16 b System.Int16 int celočíselný typ 32 b System.Int32 long celočíselný typ 64 b System.Int64 byte celočíselný typ bez znaménka 8 b System.Byte ushort celočíselný typ 16 b System.UInt16 uint celočíselný typ 32 b System.UInt32 ulong celočíselný typ 64 b System.UInt64 float reálný typ (s jednoduchou přesností) 32 b System.Single double reálný typ (s dvojitou přesností) 64 b System.Double 10/04/2017
Předdefinované datové typy (3) Popis Velikost Typový ekvivalent bool logický (booleovský) typ 8 b System.Boolean char znakový typ (Unicode, UTF-16) 16 b System.Char decimal peněžní hodnoty (28 platných číslic) 128 b System.Decimal object kořen objektové hierarchie System.Object string posloupnost znaků (řetězec) 16 b / znak System.String Poznámka: datové typy string a object jsou popsány jako třídy (nikoliv jako struktury) 10/04/2017
Hodnotové a referenční typy (1) Každý typ v jazyce C# je přímo nebo nepří-mo odvozen od třídy object Hodnotové typy (value types): jejich proměnné přímo nesou (obsahují) svá data každá proměnná má svou vlastní kopii dat změna hodnoty jedné proměnné neovlivňuje hodnotu proměnné jiné jsou ukládány na zásobníku patří mezi ně většina předdefinovaných typů (vyjma object a string) a výčtové typy pro vytvoření vlastních hodnotových typů slouží struktury 10/04/2017
Hodnotové a referenční typy (2) Referenční (odkazové) typy (reference types): jejich proměnné ukládají odkaz (referenci) na data (objekty) pokud dojde k přiřazení proměnné, tak dojde ke zkopírování odkazu je možné, aby dvě proměnné obsahovaly odkaz na stejný objekt operace nad jednou proměnnou může ovlivnit objekt, na nějž se odkazuje proměnná jiná v paměti jsou ukládány na spravované haldě (managed heap) 10/04/2017
Nulovatelné typy (1) Nulovatelné (nullable) typy představují rozší-ření, jež umožňuje přiřazovat hodnotu null do proměnných všech hodnotových typů Hodnota null vyjadřuje, že proměnná nemá žádnou hodnotu Vhodné zejména pro pohodlnou práci s SQL a s relačními databázemi (ve sloupci databáze může být hodnota NULL) Zapisovány pomocí otazníku za názvem typu Příklad: int? x; 10/04/2017
Nulovatelné typy (2) Poskytují vlastnosti (určené pouze pro čtení): Value: obsahuje hodnotu dané proměnné je-li hodnota proměnné null, pak způsobí výjimku pro změnu hodnoty se používá přiřazení přímo do proměnné HasValue: booleovská vlastnost: false: vyjadřuje, že proměnná nemá žádnou hodnotu nastaví se automaticky, je-li do proměnné přiřazena hodnota null true: vyjadřuje, že proměnná má určitou hodnotu nastaví se automaticky, je-li do proměnné přiřazena jiná hodnota než null 10/04/2017
Nulovatelné typy (3) Konverze: nenulovatelného typu na nulovatelný je provádě-na implicitně nulovatelného typy na nenulovatelný musí být provedena explicitně Příklad: int? age1 = 30; int? age2 = null; int age3 = 0; age3 = (int)age1; age2 = age3; 10/04/2017
Null coalescing operator (1) Null coalescing (null splývající) operátor je zapisovaný ve tvaru výrazu: A ?? B Výsledek výrazu je: A: jestliže A neobsahuje hodnotu null B: v opačném případě Jestliže A obsahuje hodnotu null, pak B poskytne hodnotu k použití Používaný k definici implicitní hodnoty pro nulovatelné hodnotové nebo referenční typy 10/04/2017
Null coalescing operator (2) Příklad: int? x = null; int? y = 10; int? z = x ?? y; int i = z ?? 4; Console.WriteLine("z = {0}", z); Console.WriteLine("i = {0}", i); Na výstupu bude vypsáno: z = 10 i = 10 10/04/2017
Implicitně typované proměnné Definované pomocí klíčového slova var (bez použití identifikátoru označujícího datový typ) V době definice musí být provedena i jejich inicializace Představují silně typované proměnné Jejich typ je určen z pravé strany inicializace Příklad: var distance = 20; //int 10/04/2017