Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39



Podobné dokumenty
Generické programování

PREPROCESOR POKRAČOVÁNÍ

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

PŘETĚŽOVÁNÍ OPERÁTORŮ

IRAE 07/08 Přednáška č. 1

Osnova přednášky. Programové prostředky řízení Úvod do C# II. Přístup ke členům. Členy (Members)

Programování v C++ 1, 5. cvičení

Programování v C++ 2, 4. cvičení

Jazyk C# (seminář 3)

Programování v C++ 3, 3. cvičení

typová konverze typová inference

NPRG031 Programování II 1 / :25:46

NMIN201 Objektově orientované programování 1 / :36:09

Úvod do programovacích jazyků (Java)

8 Třídy, objekty, metody, předávání argumentů metod

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Programování v C++ 1, 6. cvičení

Abstraktní třída a rozhraní

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Zápis programu v jazyce C#

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

Základy objektové orientace I. Únor 2010

20. Projekt Domácí mediotéka

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object.

Dědění, polymorfismus

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Úvod Přetěžování Generika Kolekce Konec. Programování v C# Další jazykové konstrukce. Petr Vaněček 1 / 31

State. Známý jako. Účel. Použitelnost. Stav, Object for States. umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu

Konstruktory a destruktory

Výčtový typ strana 67

Dědičnost. seskupování tříd do hierarchie. potomek získá všechny vlastnosti a metody. provádí se pomocí dvojtečky za názvem třídy.

Dědičnost (inheritance)

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

Pokud neuvedeme override, vznikne v synu nová (nevirtuální) metoda (a pochopitelně se nezavolá, jak bychom

Virtuální metody - polymorfizmus

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Jazyk C# (seminář 6)

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

PB161 Programování v jazyce C++ Přednáška 7

PB161 Programování v jazyce C++ Přednáška 7

Teoretické minimum z PJV

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

PB161 Programování v jazyce C++ Přednáška 4

24. listopadu 2013, Brno Připravil: David Procházka

1. Dědičnost a polymorfismus

Objektové programování

Seminář Java II p.1/43

Chování konstruktorů a destruktorů při dědění

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

Více o konstruktorech a destruktorech

Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

PB161 Programování v jazyce C++ Přednáška 9

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Fakulta elektrotechniky a informatiky Univerzita Pardubice 2014/2015. poslední přednáška a materiál k samostudiu

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Principy objektově orientovaného programování

Úvod do programování - Java. Cvičení č.4

konstruktory a destruktory (o)

3. Třídy. Základní pojmy objektového programování. Třídy

Sdílení dat mezi podprogramy

Seminář Java IV p.1/38

Jazyk C# a platforma.net

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

IRAE 07/08 Přednáška č. 7. Začátek (head)

Programování II. Polymorfismus

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Programování v C++ 2, 7. cvičení

Ukazka knihy z internetoveho knihkupectvi

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

1. Programování proti rozhraní

Kolekce, cyklus foreach

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Mělká a hluboká kopie

Objektově orientované programování

URČITÝM ZPŮSOBEM PODOBNÉ

Java - řazení objektů

Objekt. základní prvek v OOP. má vlastnosti. má metody. vznikne vytvoření nové instance definován pomocí třídy

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

NPRG031 Programování II 1 / :47:55

PB161 Základy OOP. Tomáš Brukner

Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady

PB161 Programování v jazyce C++ Přednáška 4

10 Balíčky, grafické znázornění tříd, základy zapozdření

Polymorfismus. Porovnání jazyků z hlediska polymorfismu Jazyky C, C++, C# Jazyk Java PHP a jiné Na závěr souhrn vlastností jednotlivých jazyků

Transkript:

Programování v C# Hodnotové datové typy, řídící struktury Petr Vaněček 1 / 39

Obsah přednášky Referenční datové typy datové položky metody přístupové metody accessory, indexery Rozhraní Pole 2 / 39

Třídy Třídy je datový typ elementární prvek OOP zaveden na úrovni CIL Zapouzdření Sdružují v sobě funcionalitu a data Ke členům se přistupuje pomocí operátoru. Dědičnost Polymorfismus 3 / 39

Deklarace třídy Deklarace v C# class < identifikátor > [: <rodič, rozhraní >] { < datové položky, metody, vlastnosti, události, vnoř Příklad class MotorovéVozidlo : Vozidlo { Motor motor ; void Nastartuj () {... 4 / 39

Instance Pro identifikátory se používá PascalCasing Pro použití jednoho konkrétního objektu třídy nutno vytvořit instanci třídy operátor new vyvolání kosntruktoru alokace paměti pro data <Třída > < identifikátor >; < identifikátor > = new <Třída >( < parametry kosntruktoru >) 5 / 39

Dědičnost Umožňuje umístit obecná data a metody do společného předka rozšířit předka přidáním nových metod a položek nebo modifikací metod Není možná vícenásobná dědičnost částečně je tento problém řešen interfaci Specializovaná třída dědí všechny metody a položky rodičovských tříd metody tříd jsou v paměti pouze jednou! 6 / 39

Datové položky Reprezentují data Podobné jako proměnné Možno určit způsob přístupu pomocí modifikátorů private pouze pro danou třídu protected pro třídu a její potomky internal pro assembly obsahující třídu public přístupný všem pouze vyjímečně většinou se řeší pomocí vlastností a metod 7 / 39

Datové položky Možno určit způsob chování pomocí modifikátorů static položka třídy (nikoliv instance) readonly lze zapisovat pouze v inicializaci nebo v konstruktoru const lze zapisovat pouze v inicializaci 8 / 39

Metody Reprezentují funkcionalitu Mohou být s parametry Musí vracet hodnotu lze obejít typem void Syntax: [ modifikátory ] < návratový typ > < identifikátor > ( < parametry > { <tělo > return < hodnota >; za return se příkazy nikdy neprovedou return nemusí být pouze jeden (větvení programu) u návratového typu void se return nemusí uvádět Přístupové modifikátory stejné jako u datových položek 9 / 39

Statické a instanční metody Statické <Třída >. < Metoda >(...); volají se nad třídou nemají přístup k nestatickým členům Instanční <instance >. < Metoda >(...); volají se nad instancí možno použít indetifikátor this označuje instanci nad níž je zavolaná metoda členy přístupné i bez this musí se uvádět pokud by mohlo dojítk záměně např. s parametrem 10 / 39

Formální parametry V hlavičce metody seznam oddělený čárkami Modifikátory žádný předání hodnotou ref předání odkazem out obdoba ref params variabilní počet parametrů 11 / 39

Formální parametry Bez modifikátoru Parametr se předává hodnotou Např. vytvoří se paměťové místo, které se inicializuje hodnotou parametru změny se nedostanou mimo funkci v případě referenčního typu se vyrobí kopie reference změny se projeví i mimo funkci void Normalni ( int param ) { param = 5;... int i = 1; Normalni (i); Console. WriteLine (i); // 1 void Normalni ( MyInt param ) { param.i = 5;... MyInt j = new MyInt (1); Normalni (j); Console. WriteLine (j.i); // 5 12 / 39

Formální parametry ref Parametr se předává odkazem nevytváří se lokální paměťové místo změny se projeví i mimo metodu v místě volání musí mít parametr hodnotu Např. void Ref ( ref int param ) { param = 5;... int i = 1; Ref ( ref i); Console. WriteLine (i); // 5 void Ref ( ref MyInt param ) { param.i = 5;... MyInt j = new MyInt (1); Ref ( ref j); Console. WriteLine (j.i); // 5 13 / 39

Formální parametry out Parametr se předává odkazem nevytváří se lokální paměťové místo změny se projeví i mimo metodu v místě volání nemusí mít parametr hodnotu před opuštěním metody se musí přiřadit hodnota Např. void Ref ( out int param ) { param = 5;... int i; Ref ( out i); Console. WriteLine (i); // 5 void Ref ( out MyInt param ) { param.i = 5;... MyInt j = new MyInt (1); Ref ( out j); Console. WriteLine (j.i); // 5 14 / 39

Formální parametry params Parametry se předávají hodnotou umožnuje variabilní počet parametrů stejného typu musí být jednorozměrné pole pouze u posledního parametru Např. void Params ( params int [] param ) { foreach ( int p in param ) Console. Write (p); // 123... Params (1,2,3); 15 / 39

Virtuální metody Virtuální metody (označené virtual) mohou být v odděděné třídě překryty překrytí se označuje slovem override při volání překryté metody se volá metoda současného typu instance (i když se přetypuje na předka) při překrytí nelze měnit přístupová práva Při překrytí metod lze zabránít dalšímu překrývání modifkátor sealed Lze možno zrušit vztah s předkem pomocí modifikátoru new 16 / 39

Virtuální metody příklad class Rodic { public virtual void PisVirtual () { Console. WriteLine (" PisVirtual - rodic "); public void Pis () { Console. WriteLine (" Pis - rodic "); class Potomek : Rodic { public override void PisVirtual () { Console. WriteLine (" PisVirtual - potomek "); public void Pis () { Console. WriteLine (" Pis - potomek ");... Rodic m = new Potomek (); m. Pis (); // Pis - rodic m. PisVirtual (); // PisVirtual - potomek 17 / 39

Metody předka Pro volání metod předka nutno použít identifikátor base obdoba Javoského super Používá se hodně v konstruktorech V rodičovské třídě musí metoda být nesmí být private nesmí být abstrakt public void Tiskni () { base. Tiskni ();... 18 / 39

Abstraktní metody Metody, u kterých je znám prototyp (hlavička), ale ne funkčnost Tělo musí doplnit některá z odděděných tříd Abstraktní metoda je zároveň virtuální Třída obsahující abstraktní metody musí být označena jako abstraktní nemůže být isntanciována Třída může být abstraktní aniž by měla abstraktní metody Abstraktní se označuje modifikátorem abstract abstract class Abstraktni { public abstract void Metoda (); class Konkretni : Abstraktni { public override void Metoda () {... 19 / 39

Konstruktor Používá se k inicializaci instance Volá se automaticky při vytvoření instance V C# se zapisuje jako metoda bez návratového typu jméno shodné se jménem třídy Lze volat konstruktor předka Lze použít this pro přístup k vytvářené instanci public Potomek ( int i, int j) : base (i,5,8) { this.j = j;... Možnost vytvořit statický konstruktor modifikátor static bezparametrický volá se při prvním přístupu na třídu 20 / 39

(Bez)parametrické konstruktory Bezparametrický veřejný kosntruktor je automaticky doplněn kompilátorem Při volání konstruktoru potomka se automaticky volá bezparametrický konstruktor předka pokud není pomocí : base(...) určen jiný konstruktor platí i u parametrického konstruktoru Před voláním kódu konstruktor možno volat jiný kosntruktor stejné třídy public Trida ( int i, float f) : this ( f) {... 21 / 39

Destruktor Slouží k uvolnění zdrojů alokovaných instancí V C# se zapisuje jako metoda bez návratového typu jméno shodné se jménem třídy, uvozeno znakem Není zaručeno kdy destrukce proběhne (GC) používá se výjimečně pokud je to opravdu nutné, implementuje se rozhraní IDisposable 22 / 39

System.Object Všechny datové typy jsou potomkem i pokud se neuvede žádný předek Poskytuje statické metody bool Equals(object,object) určuje datovou rovnost vhodné upravit si pro konkrétní typy bool ReferenceEquals(object,object) určuje rovnost referencí (zda se jedná o stejnou instanci) není virtuální 23 / 39

System.Object Poskytuje instanční metody string ToString() vrací řetězec reprezentující třídu Type GetType() vrací typ objektu object MemberwiseClone() vytváří mělkou kopii objektu vytvoří instanci stejného typu překopíruje hodnotové typy u referečních typů nastaví referenci na původní objekt... 24 / 39

Vlastnosti Properties Bezpečnější přístup k datovým položkám třídy Obdoba Javovských get...() a set...() Pro přístup se používají přístupové metody accessory - get a set jméno většinou odpovídá datové položce, které náleží PascalCasing Property se chová jako datová položka Syntax: < modifikátor >< typ >< identifikátor > { [ get { <kód > ] [ set { <kód > ] 25 / 39

Accessory Nemusí být definovány oba get musí vracet hodnotu daného typu používá se return <hodnota> čtení z property se přeloží jako volání getteru není-li definován: write-only property (používá se výjimečně) set zpracuje vstupní hodnotu reprezentována identifikátorem value zápis do property se přeloží jako volání setteru není-li definován: read-only property V NET 2.0 mohou mít accessory nastavené různé přístupové modifikátory 26 / 39

Accessory příklad class Stamgast () { private int dennipridel ; public int DenniPridel { get { return dennipridel ; set { if( value <5) dennipridel = 5; else dennipridel = value ;... Stamgast pepa = new Stamgast (); pepa. DenniPridel = 1; Console. WriteLine (" Pepa pije {0 piv denne ",pepa. DenniPridel ); 27 / 39

Indexery Podobné jako vlastnosti Umožňují přistupovat k datovým položkám pomocí indexu Mohou být i vícerozměrné Příklad: class Bod () { int x; int y; public int this [ int index ] { get { switch ( index ) { case 0 : return x; case 1 : return y; default : return 0; 28 / 39

Rozhraní Umožňuje sjednocení komunikace heterogenních tříd Částčně řeší problém vícenásobné dědičnosti Omezení rozhraní nemůže obsahovat datové položky nemůže obsahovat těla metod a vlastností metody a vlastnosti nesmí mít nastavené přístupové modifikátory Třída/strutkura může rozhraní implementovat musí dodat těla všem metodám v rozhraní 29 / 39

Rozhraní Rozhraní se mohou oddědit od jiných rozhraní metody jsou automaticky virtuální Syntax: < modifikátor > interface < identifikátor > [: < předek >] { <tělo > Implementace rozhraní syntakticky stejné jako dědění class < identifikátor >: < interface >[, < interface >] {... V těle třídy/struktury musí být implementovány všechny položky možno použít abstraktní Třídu možno přetypovat na typ rozhraní možno použít is a as 30 / 39

Explicitní implementace rozhraní Implementace konkrátních členů může být provedena explicitně budou přítupní pouze z daného rozhraní (třída se musí přetypovat) nesmí mít žádné modifikátory Příklad (ne příliš šťastné): interface Bod { void Kresli () interface Platno { void Kresli () class Kresleni : Bod, Platno { void Bod. Kresli () {... void Platno. Kresli () {... (( Bod ) kresleni ). Kresli (); 31 / 39

Pole Homogenní struktura statického rozsahu Třída System.Array nutno vytvořit instanci Syntax: <typ >[] < indetifikátor > = new <typ >[ < velikost >] <typ >[] < indetifikátor > = new <typ >[] {< prvek >[,< prvek >]; Indexace od nuly Přístup pomocí indexeru [] 32 / 39

Vícerozměrná pole Možno definovat libovolný počet rozměrů Např: int [,] matice = new int [4,4]; Celé pole se vytváří najednou Všechny řádky stejně dlouhé 33 / 39

Zubatá pole Pole polí Např. int [][] matice = new int [4][]; matice [0] = new int [4]; Nelze konstruovat najednou Postupuje se od levého indexeru k pravému Každá řádka může být jinak dlouhá 34 / 39

Metody polí Statické metody volají se přes třídu Array Sort řazení pole BinarySearch hledání metodou půlení intervalu Resize změna velikosti pole... 35 / 39

Metody polí Instanční metody property Length velikost pole property Rank počet dimenzí GetLength(int dim) rozměr v dimenzi dim 36 / 39

Řazení polí Není nutno psát vlastní řazení Statická metoda Sort Řazené objekty musí implementovat IComparable poskytují metodu CompareTo(object) záporné číslo instance menší než parametr kladné číslo instance větší než parametr nula rovnost 37 / 39

Řazení polí Array.Sort Možno předat třídu implementující IComparer poskytuje metodu int Compare(object, object) Řazení části pole parametr index a rozsah Řazení dvou polí... pole klíčů a pole hodnot 38 / 39

Konec 39 / 39