460 likes | 600 Views
P V178 – Ú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 Šumavská 15, 602 00 BRNO Kanc.: G409, : +420 – 549 495 751 E-mail: pelikan@fi.muni.cz http://www.fi.muni.cz/usr/pelikan.
E N D
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 Šumavská 15, 602 00 BRNO Kanc.: G409, : +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í krokya 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
Organizace předmětu • Rozsah (hodinová dotace): 1/2 • Přednáška: • 2 hodiny týdně • první polovinu semestru (7 týdnů) • Cvičení: • 2 hodiny týdně • 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
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
Vstupní předpoklady • Znalost: • základů programování a algoritmizace • syntaxe programovacího jazykaC/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
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é
Osnova (2) • Typ třída a její členy: • 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
Osnova (3) • Předávání parametrů metodám: • 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)
Osnova (4) • Abstraktní metody a třídy • Rozhraní • Výjimky • Rozšiřující metody • Výčtové typy, flags • Pole: • jednorozměrná • vícerozměrná pravidelná • vícerozměrná nepravidelná
Osnova (5) • Řetězce • Struktury • Indexery • Generické datové typy • Kolekce: • negenerické • generické • Iterátory • Delegáty (anonymní metody, lambda výrazy)
Osnova (6) • Události • Práce se soubory (proudy): • textové soubory • binární soubory • práce se souborovým systémem • LINQ • Kolokvium, zápočet
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.
Ukončení předmětu (1) • V průběhu semestru je možné získat maxi-málně 100 bodů: • 56 bodů: domácí úkoly (8 × 7 bodů) • 24 bodů: projekt (nutné získat alespoň 12 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ů
Ukončení předmětu (2) • Domácí úkoly: • v průběhu semestru bude zadáno 8 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
Ukončení předmětu (3) • možné získat maximálně 24 bodů • nutné získat minimálně 12 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. 2014 • je možné navrhnout (zvolit si) vlastní projekt • v týdnu od 21. 4. 2014 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ý do6. 6. 2014
Ukončení předmětu (4) • Testy: • 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ů
.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.NETWeb Forms Web Services WindowsForms Architektura .NET Framework 2.0 Visual Studio .NET ADO.NET & XML Base ClassLibrary Common Language Runtime Operační systém
.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
.NET Framework (3) • BCL– Base Class Library: • 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
.NET Framework (4) • ASP.NET: • 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.)
.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)
.NET Framework (6) • 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
.NET Framework (7) • .NET Framework 4.0: • 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ňujepodporu pro: • aplikace typu Metro Style • asynchronní programování
Životní cyklus aplikace (1) CLI C# zdrojový kód Překladač VB zdrojový kód Překladač CIL CLR • 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 10111011001010 JIT J# zdrojový kód Překladač
Ž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
Ž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)
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ů
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
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)
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
Jmenné konvence (2) • 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
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
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);
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
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)
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 stringa 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í
Předdefinované datové typy (2) Typ 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
Předdefinované datové typy (3) Typ Popis Velikost Typový ekvivalent • Poznámka: • datové typy string a object jsou popsány jako třídy (nikoliv jako struktury) bool logický (booleovský) typ 8 b System.Boolean char znakový typ (Unicode) 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
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
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)
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;
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
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;
Null coalescing operator (1) • Nullcoalescing(null splývající) operátor je zapisovanývetvaru 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
Null coalescing operator (2) • Příklad:int? x = null;int? y = 10;int? z = x ??y;inti = z ??4;Console.WriteLine("z = {0}", z);Console.WriteLine("i = {0}", i); • Na výstupu bude vypsáno:z = 10i = 10
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: vardistance = 20;//int