+ All Categories
Home > Documents > P V178 – Úvod do vývoje v C # /.NET

P V178 – Úvod do vývoje v C # /.NET

Date post: 05-Jan-2016
Category:
Upload: dory
View: 55 times
Download: 6 times
Share this document with a friend
Description:
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: [email protected] http://www.fi.muni.cz/usr/pelikan. - PowerPoint PPT Presentation
73
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
Transcript
Page 1: P V178  – Úvod do vývoje  v C # /.NET

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

Page 2: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 2

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– znát hlavní rysy a programové konstrukce pro-

gramovacího jazyka C#– být schopen psát kvalitní objektový kód

Page 3: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 3

Organizace předmětu• Rozsah (hodinová dotace): 1/2• Přednáška:

– 2 hodiny týdně– prvních 7 týdnů

• Cvičení:– 2 hodiny týdně– celý semestr

Page 4: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 4

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:

• studenti Fakulty informatiky mohou získat Visual Studio Community 2015 prostřednictvímMicrosoft Imagine(přístup přes Autentizované služby na stránce http://fadmin.fi.muni.cz/ a odkaz MSDN AA)

Page 5: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 5

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

Page 6: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 6

Osnova (1)• Úvod do C#/.NET:

– architektura .NET Frameworku– charakteristika jazyka C#, program v jazyce C#– typový systém– třída a její členy– předávání parametrů metodám– vlastnosti (properties)– rozhraní– struktury– jmenné prostory

• Výčtové datové typy, indexery, pole

Page 7: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 7

Osnova (2)• Generické datové typy, kolekce• Řetězce, iterátory, výjimky• Delegáty, anonymní metody, lambda výrazy,

události• LINQ – jednotný přístup k datům a jejich

zpracování• Práce se soubory a proudy• Práce s daty (XML, JSON):

– serializace/deserializace tříd– ADO.NET

Page 8: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 8

Osnova (3)• Reflexe – získávání typových informací

v době běhu programu• Regulární výrazy – třída Regex• Paralelní zpracování (multithreading)• Asynchronní programování

Page 9: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 9

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.

Page 10: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 10

Ukončení předmětu• V průběhu semestru je možné získat maxi-

málně 100 bodů:– 54 bodů: domácí úkoly– 16 bodů: testy na cvičeních– 30 bodů: závěrečný test

• Při ukončení předmětu:– kolokviem je zapotřebí získat min. 70 bodů– zápočtem je zapotřebí získat min. 60 bodů

• Poznámka:– docházka na cvičení nebude kontrolována– neúčastí na cvičeních přicházíte o možnost bodů

z testů

Page 11: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 11

.NET Framework (1)• Softwarová platforma vyvinutá firmou Micro-

soft, která podporuje vytváření a spouštění aplikací a webových služeb

Operační systém

Common Language Runtime

Base Class Library

ADO.NET & XML

ASP.NETWeb Forms Web Services

WindowsForms

Common Language Specification

VB C++ C# J# …

Vis

ual S

tudi

o .N

ET

Arc

hite

ktur

a .N

ET

F

ram

ewor

k 2.

0

Page 12: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 12

.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

Page 13: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 13

.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

Page 14: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 14

.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.)

Page 15: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 15

.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)

Page 16: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 16

.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

Page 17: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 17

.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ňuje podporu pro:

• aplikace typu Metro Style• asynchronní programování

Page 18: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 18

Životní cyklus aplikace (1)

• 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

C#zdrojový kód

VBzdrojový kód

J#zdrojový kód

Překladač

Překladač

Překladač

CIL CLR

1011

1011

0010

10

CLI

JIT

Page 19: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 19

Ž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

Page 20: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 20

Ž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)

Page 21: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 21

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ů

Page 22: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 22

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

Page 23: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 23

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)

Page 24: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 24

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

Page 25: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 25

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);

Page 26: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 26

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

Page 27: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 27

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)

Page 28: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 28

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

Page 29: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 29

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)

Page 30: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 30

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á vrací řetězec reprezen-tující současný objekt

Page 31: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 31

Předdefinované datové typy (2)Typ Popis Velikost Typový ekvivalent

sbyte celočíselný typ 8 b System.SByte

double reálný typ (s dvojitou přesností) 64 b System.Double

float reálný typ (s jednoduchou přesností) 32 b System.Single

int celočíselný typ 32 b System.Int32

long celočíselný typ 64 b System.Int64

byte celočíselný typ 8 b System.Byte

short celočíselný typ 16 b System.Int16

uint celočíselný typ 32 b System.UInt32

ushort celočíselný typ 16 b System.UInt16

ulong celočíselný typ 64 b System.UInt64

se znaménkem

bez znaménka

Page 32: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 32

Předdefinované datové typy (3)

Typ Popis Velikost Typový ekvivalent

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)

decimal peněžní hodnoty (28 platných číslic) 128 b System.Decimal

char znakový typ (Unicode, UTF-16) 16 b System.Char

bool logický (booleovský) typ 8 b System.Boolean

object kořen objektové hierarchie System.Object

Page 33: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 33

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;

Page 34: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 34

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

Page 35: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 35

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;

Page 36: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 36

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

Page 37: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 37

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 = 10i = 10

Page 38: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 38

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

Page 39: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 39

Datový typ třída – class (1)• Datový typ definovaný uživatelem

• Poskytuje mechanismus pro modelování entit, s nimiž manipulují aplikace

• Charakterizuje vlastnosti a chování objektů

• Je možné ji definovat pomocí klíčového slova class

• Může obsahovat následující členy:– konstanty (constants)– datové položky (fields)

Page 40: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 40

Datový typ třída – class (2)– metody (methods)– konstruktory instance (instance constructors)– statické konstruktory (static constructors)– finalizery (finalizers)– vlastnosti (properties)– události (events)– indexery (indexers)– operátory (operators)– vnořené deklarace typů (nested type declarations)

Page 41: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 41

Datový typ třída – class (3)• Každý člen uvnitř třídy má svoji tzv. přístup-

nost (accessibility) určující, jakým způsobem je nebo není přístupný (viditelný) zvenčí

• Nejčastěji se používá přístupnost:– public (veřejná):

• přístup k danému členu není nijak omezován

• člen je přístupný uvnitř i vně dané třídy

– private (privátní, soukromá):• daný člen je přístupný pouze uvnitř třídy, v níž je defi-

nován

• jedná se o implicitní přístupnost k členu

Page 42: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 42

Datový typ třída – class (4)• Datové položky (fields):

– reprezentují proměnné spojené s objektem nebos třídou

– slouží k uchování informací• Metody (methods):

– funkce definované uvnitř třídy– implementují výpočet (akci), který může být pro-

veden objektem nebo třídou– obsahují:

• seznam formálních parametrů (může být i prázdný)• návratovou hodnotu (je-li návratovým typem metody

typ void, pak metoda nevrací žádnou hodnotu)

Page 43: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 43

Datový typ třída – class (5)• Konstruktory instancí (instance constructors):

– speciální typy metod– slouží k vytvoření instance třídy (objektu)– mají stejný název jako třída– mohou obsahovat formální parametry– nemohou vracet žádnou hodnotu (ani void)

v jejich hlavičce není uvedený žádný návratový typ– jedna třída může obsahovat více konstruktorů (pře-

těžování – overloading)– není-li definován žádný konstruktor, pak překladač

automaticky vygeneruje konstruktor implicitní, kte-rý neobsahuje žádné parametry

Page 44: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 44

Datový typ třída – class (6)• Příklad třídy:class Square{

private int side;

public Square(int initialSide){

side = initialSide;}public int GetArea(){ return side*side;}

}

Page 45: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 45

Datový typ třída – class (7)• Na základě datového typu třída lze vytvořit

její instanci • Instanci typu třída označujeme jako objekt• Objekt je vytvářen pomocí klíčového slova new (způsobí vyvolání konstruktoru)

• Příklad:Square sq;sq = new Square(5);neboSquare sq = new Square(5);

Page 46: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 46

Datový typ třída – class (8)• Proměnná sq bude obsahovat odkaz, kde je

v paměti uložený objekt (třída je referenční datový typ)

• Poznámka:– každá instance třídy je objektem, který zabírá

svůj vlastní prostor v paměti a běží nezávisle na všech ostatních instancích

• Pro zpřístupnění členů třídy se používá tečko-vá notace:– identifikátor proměnné typu třída nebo typu třída– symbol tečka– identifikátor označující člen třídy

Page 47: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 47

Datový typ třída – class (9)• Příklad:int s;Square sq = new Square(5);

s = sq.GetArea();• Metody i datové položky mohou být deklaro-

vány jako statické (static):– zpřístupňovány prostřednictvím třídy– před jejich zpřístupněním není nutné vytvářet in-

stanci třídy (objekt)– nezávislé na konkrétní instanci třídy

Page 48: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 48

Datový typ třída – class (10)

• Poznámka:– metoda Main musí být statická, protože před je-

jím voláním se nevytváří instance třídy, v níž je definována

• Statické třídy:– deklarovány s použitím klíčového slova static– může obsahovat pouze statické členy– nemůže obsahovat žádná data ani metody instancí– příklad: třídy Math, Convert, Console

Page 49: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 49

Předávání parametrů metodám (1)• Parametry předávané hodnotou:

– deklarovány bez použití modifikátoru ref nebo out

– u hodnotových typů:• dochází k předání kopie dat ze skutečného parametru

do parametru formálního• změny provedené uvnitř metody nad formálním para-

metrem nijak neovlivňují hodnotu parametru skuteč-ného

– u referenčních typů:• dochází pouze k předání odkazu• jestliže metoda hodnotu přijatého objektu změní, pak

se změna projeví i v původním objektu– skutečný parametr musí být v době volání inicia-

lizovaný, tj. musí mít přiřazenou hodnotu

Page 50: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 50

Předávání parametrů metodám (2)• Parametry předávané odkazem:

– před formálním i skutečným parametrem musí být uveden modifikátor ref

– nedochází k vytvoření nového paměťového místa pro formální parametr

– formální parametr reprezentuje stejné paměťové místo, které náleží parametru skutečnému

– všechny změny provedené nad formálním para-metrem se promítají do parametru skutečného

– skutečný parametr musí být v době volání inicia-lizovaný, tj. musí mít přiřazenou hodnotu

Page 51: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 51

Předávání parametrů metodám (3)• Parametry výstupní:

– před formálním i skutečným parametrem musí být uveden modifikátor out

– podobné chování jako u parametrů předávaných odkazem

– všechny změny provedené nad formálním para-metrem se promítají do parametru skutečného

– skutečný parametr nemusí být v době volání ini-cializovaný, tj. nemusí mít přiřazenou hodnotu

– v průběhu metody mu musí být přiřazena hodnota

Page 52: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 52

Vlastnosti (1)• Členy třídy umožňující přístup k charakteris-

tickým atributům objektu nebo třídy, např.:– délka řetězce– velikost fontu– titulek okna– jméno zákazníka– apod.

• Představují rozšíření datových položek:– pojmenované členy s daným datovým typem– používají stejnou syntaxi pro své zpřístupnění

Page 53: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 53

Vlastnosti (2)

• Na rozdíl od datových položek nereprezentují paměťové místo pro uložení hodnoty

• Překladač automaticky převádí zpřístupnění vlastností na volání přístupových metod

• Přístupové metody specifikují příkazy, jež mají být provedeny při:– čtení hodnoty vlastnosti– změně hodnoty vlastnosti (zápisu)

Page 54: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 54

Vlastnosti (3)• Přístupové metody jsou zapisovány pomocí

klíčových slov: – get: uvozuje přístupovou metodu pro čtení– set: uvozuje přístupovou metodu pro zápis

• Zapisovaná data jsou přístupovým metodám (set) předávána pomocí vestavěného (skry-tého) parametru value

• Konvence:– soukromé datové položky jsou psány s malým po-

čátečním písmenem, zatímco veřejné vlastnosti s počátečním písmenem velkým

Page 55: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 55

Vlastnosti (4)• Příklad:class Square{

private int side;public int Side{

get { return side;

} set {

side = value;}

}

}

Page 56: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 56

Vlastnosti (5)• Nechť je dána deklarace:int s;Square sq = new Square(5);

• Vlastnost Side lze zpřístupnit:– pro čtení – např.:s = sq.Side; (volá sq.Side.get)

– pro zápis – např.:sq.Side = 2*s; (volá sq.Side.set)

• Vlastnost může obsahovat pouze metodu:– get: vlastnost určena jen pro čtení– set: vlastnost určena jen pro zápis

Page 57: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 57

Vlastnosti (6)• Omezení vlastnosti:

– vlastnost nelze použít jako parametr s modifiká-torem ref nebo out (za vlastností se skrývá pří-stupová metoda nikoliv paměťové místo)

– vlastnost může obsahovat jednu přístupovou me-todu get a jednu přístupovou metodu set (ne-smí obsahovat žádné jiné metody, datové polož-ky nebo vlastnosti)

– přístupové metody nesmí přijímat žádné paramet-ry (zapisovaná data jsou u metody set předává-na prostřednictvím value)

– u vlastností nelze používat modifikátor const

Page 58: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 58

Vlastnosti (7)• Jestliže metody get, resp. set provádějí

pouze operace, které slouží k přečtení, resp. přiřazení do datové položky, pak je možné jejich příkazovou část vynechat

• Příklad:class Square{

public int Side { get; set; }

}

Page 59: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 59

Vlastnosti (8)• Překladač automaticky vygeneruje odpovída-

jící programový kód:class Square{

private int _side;public int Side{

get { return _side; } set { _side = value;}

}

}

Page 60: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 60

Rozhraní (1)• Rozhraní (interface) definuje kontrakt s třídou

nebo strukturou, která je následně od tohoto rozhraní odvozena

• Představuje seznam členů, které se odvozená třída nebo struktura zavazuje implementovat

• Platí, že:– jedno rozhraní může dědit od jednoho nebo více

jiných rozhraní– jedna třída může implementovat jedno nebo více

rozhraní (může dědit pouze od jedné třídy)

• Dovoluje „nahradit“ vícenásobnou dědičnost

Page 61: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 61

Rozhraní (2)• Umožňují třídám přidávat charakteristiky

nebo schopnosti nezávisle na hierarchii tříd• Rozhraní může obsahovat:

– metody– události– vlastnosti– indexery

• Definice rozhraní:– začíná klíčovým slovem interface, za nímž

následuje jméno rozhraní– obsahuje pouze signatury členů (nikoliv jejich

implementace)

Page 62: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 62

Rozhraní (3)• Všechny členy jsou automaticky veřejné (ma-

jí přístupnost public):– klíčové slovo public se neuvádí– rozhraní udává, jak s objektem zvenku pracovat

• Jméno implementovaného rozhraní se zapisu-je za jméno třídy oddělené dvojtečkou

• Konvence:– jména rozhraní se zapisují s počátečním velkým

písmenem I

• Poznámka:– od rozhraní nelze vytvořit instanci

Page 63: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 63

Rozhraní (4)• Příklad:interface IPoint{

int X { get; set; }int Y { get; set; }void WritePointCoords();

}class MyPoint : IPoint{

public int X { get; set; }public int Y { get; set; }public MyPoint(int x, int y){ X = x; Y = y; }public void WritePointCoords(){ Console.WriteLine

(”[{0}, {1}]”, X, Y);}

}

Page 64: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 64

Struktury (1)• Hodnotové typy, které definujeme pomocí

klíčového slova struct• Mohou obsahovat stejné členy jako třídy• Na rozdíl od tříd mají následující omezení,

která vyplývají z podstaty hodnotových typů:– vždy mají výchozí konstruktor (bez parametrů),

který: • nelze předefinovat• nastaví všechny datové položky (členské proměnné):

– hodnotových typů na implicitní (defaultní) hodnotu: • 0, 0.0 pro číselné typy• false pro typ bool• ’\0’ pro typ char

– referenčních typů na hodnotu null

Page 65: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 65

Struktury (2)– libovolný jiný konstruktor, který nezabezpečuje

inicializaci (nastavení) všech členských proměn-ných musí volat konstruktor bezparametrický (po-mocí this())poznámka:

• použití this() je nutné i v případě, že konstruktor inicializuje členské proměnné pomocí vlastností

– nelze v době definice inicializovat členské pro-měnné (vyjma statických)

– nemohou dědit, ale mohou implementovat rozhra-ní

Page 66: P V178  – Úvod do vývoje  v C # /.NET

Struktury (3)• Příklad:struct Point {

public int X { get; set; }public int Y { get; set; }public Point(int x, int y) : this(){ X = x; Y = y; }

}class Dog{

public Color Color { get; set; }public Dog(Color color){ Color = color; }

}6623-04-20

Page 67: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 67

Struktury (4)

[4, 3]

[0, 0]

pt1

pt2

dog1

dog2 N/A

pt1 = new Point(4, 3);pt2 = new Point()dog1 = new Dog(Color.White);

N/A

N/A

pt1

pt2

dog1

dog2

N/A

N/A

Point pt1;Point pt2;Dog dog1;Dog dog2;

Page 68: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 68

Struktury (5)

[4, 3]

[9, 1]

pt1

pt2

dog1

dog2

pt2.X = 9;pt2.Y = 1; dog2.Color = Color.Gray;

[4, 3]

[4, 3]

pt1

pt2

dog1

dog2

pt2 = pt1;dog2 = dog1;

Page 69: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 69

Jmenný prostor (1)• Jmenný prostor (namespace) představuje po-

jmenovaný kontejner pro další identifikátory (např. třídy)

• Používán k seskupení a k rozlišení identifiká-torů

• Různé jmenné prostory mohou obsahovat stejné identifikátory

• Dva identifikátory se stejným názvem nelze zaměnit, pokud se nacházejí v různých jmen-ných prostorech

Page 70: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 70

Jmenný prostor (2)• V rámci jednoho souboru může být defino-

váno více jmenných prostorů

• Více souborů může zahrnovat jeden jmenný prostor

• Jmenné prostory mohou být do sebe vzájemně vnořovány

• Jmenný prostor je možné definovat pomocí klíčového slova namespace

• Každý jmenný prostor má přístup typu public(nelze změnit)

Page 71: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 71

Jmenný prostor (3)• Příklad:

public class ClassA{}

namespace NamespaceY{ public class ClassB { }}

public class ClassC{}

namespace NamespaceY{ public class ClassA { }}

namespace NamespaceZ{ public class ClassB { }}

Soubor1.cs Soubor2.cs

Page 72: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 72

Jmenný prostor (4)• Je-li identifikátor deklarovaný (definovaný)

bez specifikovaného jmenného prostoru, pak jej automaticky překladač zařadí do globál-ního jmenného prostoru (global namespace)

• Identifikátor lze zpřístupnit pomocí označení jmenného prostoru (jmenných prostorů), např.:System.Console.WriteLine(…);kde:– System – jmenný prostor– Console – třída– WriteLine – metoda

Page 73: P V178  – Úvod do vývoje  v C # /.NET

23-04-20 73

Jmenný prostor (5)

• Pomocí klíčového slova using je možné da-ný jmenný prostor zařadit do aktuálního obo-ru platnosti

• Pro zpřístupnění identifikátoru pak není nutné uvádět označení jmenného prostoru

• Příklad:using System;

Console.WriteLine(…);


Recommended