Prezent - Fakulta informatiky

Download Report

Transcript Prezent - Fakulta informatiky

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: [email protected]
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 programovacího jazyka C#
– být schopen psát kvalitní objektový kód
08/04/2015
2
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
08/04/2015
3
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
08/04/2015
4
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
08/04/2015
5
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é
08/04/2015
6
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
08/04/2015
7
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)
08/04/2015
8
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á
08/04/2015
9
Osnova (5)
•
•
•
•
•
Řetězce
Struktury
Indexery
Generické datové typy
Kolekce:
– negenerické
– generické
• Iterátory
• Delegáty (anonymní metody, lambda výrazy)
08/04/2015
10
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
08/04/2015
11
Literatura
• Pelikán, Jaroslav: Prezentace k přednáškám z předmě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.
08/04/2015
12
Ukončení předmětu (1)
• V průběhu semestru je možné získat maximá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ů
08/04/2015
13
Ukončení předmětu (2)
• Domácí úkoly:
– 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
08/04/2015
14
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 nejpozději do 31. 3. 2015
– je možné navrhnout (zvolit si) vlastní projekt
– v týdnu od 20. 4. 2015 proběhne kontrola projektů 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
08/04/2015
15
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řednáš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ů
08/04/2015
16
.NET Framework (1)
• Softwarová platforma vyvinutá firmou Microsoft, která podporuje vytváření a spouštění
aplikací a webových služeb
C++
C#
J#
…
Common Language Specification
ASP.NET
Windows
Web Forms Web Services
Forms
ADO.NET & XML
Base Class Library
Common Language Runtime
Visual Studio .NET
Architektura .NET
Framework 2.0
VB
Operační systém
08/04/2015
17
.NET Framework (2)
• CLR – Common Language Runtime:
– běhové prostředí realizující základní infrastrukturu, 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 collection), výpočetních vláken (threads), výjimek
• typovou bezpečnost
08/04/2015
18
.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
08/04/2015
19
.NET Framework (4)
• ASP.NET:
– soubor technologií pro tvorbu webových aplikací a webových služeb
• Windows Forms:
– programové rozhraní pro vývoj grafických desktopových aplikací
– poskytuje sadu tříd umožňujících přístup ke
standardním ovládacím prvkům operačního systému MS Windows (okno, tlačítko, menu,
editační prvek atd.)
08/04/2015
20
.NET Framework (5)
• CLS – Common Language Specification:
– definuje základní vlastnosti programovacích jazyků 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živatelský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)
08/04/2015
21
.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 zpracování deklarativním a funkcionálním způsobem
08/04/2015
22
.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žitím všech dostupných jader procesoru
• .NET Framework 4.5:
– doplňuje podporu pro:
• aplikace typu Metro Style
• asynchronní programování
08/04/2015
23
CLI
C#
zdrojový kód
Překladač
VB
zdrojový kód
Překladač
J#
zdrojový kód
Překladač
CIL
CLR
JIT
10111011001010
Životní cyklus aplikace (1)
• CIL – Common Intermediate Language:
– dříve nazývaný jako MSIL – Microsoft Intermediate Language
– jazyk nezávislý na platformě, do něhož jsou překládány programy napsané v jazycích kompatibilních s .NET Frameworkem
08/04/2015
24
Životní cyklus aplikace (2)
• CLI – Common Language Infrastructure:
– otevřená a standardizovaná specifikace
– popisuje vlastnosti spustitelného kódu a prostředí 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
08/04/2015
25
Ž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)
08/04/2015
26
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ů
08/04/2015
27
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 mohou 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
08/04/2015
28
Program v jazyce C# (2)
• Metoda Main může mít jednu z následujících
signatur:
– static
– static
– static
– static
void Main()
void Main(string[] args)
int Main()
int Main(string[] args)
• Poznámka:
– jazyk C# podobně jako jazyk C/C++ rozlišuje
velká a malá písmena (jazyk case sensitive)
08/04/2015
29
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ů, datových typů (tříd, struktur, výčtových typů, …), rozhraní, metod, vlastností, událostí, hodnot výčtových typů
• příklad: ThisIsPascalCase
08/04/2015
30
Jmenné konvence (2)
– Camel Case:
• podobně jako Pascal Case, ale první písmeno identifiká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
Slovesa v rozkazovacím tvaru a slovesné
Metody
fráze (sloveso + předmět)
Vlastnosti,
Podstatné jméno nebo jmenná fráze
proměnné
08/04/2015
31
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
08/04/2015
32
Standardní výstup (2)
• Prvním parametrem uvedených metod může
být řetězec obsahující (kromě textu) specifikace, které určují místa, na nichž mají být vypsány hodnoty dalších parametrů
• Specifikace se zapisují ve složených závorkách, jež obsahují pořadové číslo vypisovaného parametru
• Příklad:
Console.Write("a = {0}, b = {1}", a, b);
08/04/2015
33
Standardní výstup (3)
• Poznámky:
– součástí specifikace mohou být i informace
o tom, jakým způsobem má být hodnota odpovídajícího parametru formátována
– je-li zapotřebí vypsat hodnotu pouze jednoho
parametru, je možné řetězec (jako první parametr) vynechat
08/04/2015
34
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 (definována ve jmenném prostoru System)
08/04/2015
35
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ř. metodu ToString, která umožňuje převést
číselnou hodnotu na její textové vyjádření
08/04/2015
36
Předdefinované datové typy (2)
Typ
Popis
Velikost
Typový ekvivalent
sbyte
celočíselný typ
8b
System.SByte
short
celočíselný typ
16 b
System.Int16
32 b
System.Int32
se znaménkem
int
celočíselný typ
long
celočíselný typ
64 b
System.Int64
byte
celočíselný typ
8b
System.Byte
ushort
celočíselný typ
16 b
System.UInt16
32 b
System.UInt32
bez znaménka
uint
celočíselný typ
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
08/04/2015
37
Předdefinované datové typy (3)
Typ
Popis
Velikost
Typový ekvivalent
bool
logický (booleovský) typ
8b
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)
08/04/2015
38
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
08/04/2015
39
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)
08/04/2015
40
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;
08/04/2015
41
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
08/04/2015
42
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;
08/04/2015
43
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
08/04/2015
44
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
08/04/2015
45
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
08/04/2015
46