Jazyk C# (seminář 6)

Podobné dokumenty
Generické programování

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

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

Jazyk C# (seminář 3)

PREPROCESOR POKRAČOVÁNÍ

Jazyk C# (seminář 5)

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

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

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Principy objektově orientovaného programování

Úvod do programovacích jazyků (Java)

Teoretické minimum z PJV

Nové prvky v C# 3.0. David Keprt

Jazyk C# (seminář 3)

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

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

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

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

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

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

Pavel Procházka. 3. prosince 2014

Zápis programu v jazyce C#

Abstraktní třída a rozhraní

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

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

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

typová konverze typová inference

Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín

Programování v Javě I. Únor 2009

Jazyk C++ I. Šablony 2

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Konstruktory a destruktory

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

Programování v Javě I. Leden 2008

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

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

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

Výčtový typ strana 67

Jazyk C# (seminář 9)

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

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

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

Lambda funkce Novinky v interfaces Streamy Optional - aneb zbavujeme se null. Java 8. Ondřej Hrstka

URČITÝM ZPŮSOBEM PODOBNÉ

Projekty pro výuku programování v jazyce Java

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.

Jazyk C# přednáška 01. Fakulta elektrotechniky a informatiky Univerzita Pardubice 2014/2015

Vláknové programování část V

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

přetížení operátorů (o)

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

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

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

Seminář Java II p.1/43

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

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

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

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.

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

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

C++ přetěžování funkcí a operátorů. Jan Hnilica Počítačové modelování 19

OOPR_05. Případové studie

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

JAVA. Další jazyky kompilovatelné do Java byte-code

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

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

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

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

1. Téma 12 - Textové soubory a výjimky

Programovací jazyk Java

7. Datové typy v Javě

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

Generické typy. Podrobněji: The Java Language Specification ( Third Edition ) , 18

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

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci

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

20. Projekt Domácí mediotéka

1. Programování proti rozhraní

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

NMIN201 Objektově orientované programování 2016/17 1 / :03:29

přetížení operátorů (o)

Dynamika objektů. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze

1 - Úvod do platformy.net. IW5 - Programování v.net a C#

Iterator & for cyklus

Komponenty v.net. Obsah přednášky

Hrátky s funkcemi. PV173 Programování v C++11. Vladimír Štill, Jiří Weiser. Fakulta Informatiky, Masarykova Univerzita. 29.

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/

Objektově orientované programování

Úvod do programovacích jazyků (Java)

Jakub Čermák Microsoft Student Partner

Základy objektové orientace I. Únor 2010

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

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

Dědění, polymorfismus

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

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

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

Seminář Java IV p.1/38

Transkript:

Jazyk C# (seminář 6) Pavel Procházka KMI 29. října 2014

Delegát motivace Delegáty a události Jak docílit v C# funkcionální práce s metodami v C je to pomocí pointerů na funkce. Proč to v C# nejde pomocí pointerů na funkce která vlastnost jazyka by se tím zbořila? Přitom takovou funkcionalitu ale nutně potřebujeme kvůli GUI callbackům neboli událostem Události ve smyslu GUI knihoven jsou reakce na vstupy uživatele (například kliknutí, stistknutí klávesy) Knihovny jsou obvykle asynchronní a běh vykreslování si řídí samy (v hlavní smyčce) je proto nutné deklarovat reakce dopředu při vytvoření grafického objektu

Delegáty řešení pomocí interface První možnost je obalením každé funkce pomocí předdefinovaným interfacem Docela zdlouhavé (Java style) interface IMyCallableFunc void SampleCall(); class MyCallable : IMyCallableFunc public void SampleCall() Console.WriteLine( "Hello World!" );... MyCallable c = new MyCallable(); for( int x = 0 ; x < 10 ; x++ ) c.samplecall();

Delegáty řešení od Microsoftu Nové klíčové slovo delegate Postup 1. deklarace delegátu pomocí klíčového slova delegate, 2. Vytvoření objektu tohoto typu (pomocí new) a inicializace pomocí nějaké metody, 3. zavolání pomocí () delegate void MyDelegate( int i ); class MainClass public static void MyFunc( int i ) Console.WriteLine( "Hello World 0", i ); public static void Main (string[] args) MyDelegate md = new MyDelegate( MyFunc ); for (int i = 0; i < 10; i++) md (i);

Indexery Další způsob, jak umožnit, aby se objekt choval jako pole šel indexovat pomocí [] Už známe způsob pomocí iterátorů (týká se foreach) a pomocí přetížení operátoru [] Existuje způsob pomocí indexeru, což je speciální nová syntaxe, podobná get, set public class Stack private Node GetNode(int index)... public object this[int index] get return GetNode(index).Value; set GetNode(index).Value = value;... s[0] = 33 Console.WriteLine( "0", s[0] ); // => 33

Finalizery Využití se nachází v případě, když chceme něco provést při uvolnění objektu garbage collectorem Tzn. jedná se o opak ke konstruktoru ten objekt zakládá řízeným způsobem, finalizer ho řízeně ruší Typické použití, pokud používáme nativní knihovnu, která je napsána například v C a potřebujeme, nějak sdělit knihovně, že jí zabraný prostředek je potřeba uvolnit Využití také v GUI Syntaxe je podobná jako u konstruktoru je to metoda, která se jmenuje jako třída a má prefix, nesmí brát žádný argument (protože je volaná garbage collectorem), nesmí být explicitně volána uživatelem ClassName() /* implementation*/

Finalizer demo Delegáty a události class Point public double x, y; public Point(double x, double y) this.x = x; this.y = y; Point() Console.WriteLine("Finalized 0", this); public override string ToString() return string.format("(0, 1)", x, y);

Statické členské proměnné a metod Pomocí klíčového slova static můžeme deklarovat členské proměnné a metody, aniž by existovala instance objektu dané třídy (jedná se tedy vpodstatě o globální proměnné a funkce) public class Automobile public static int NumberOfWheels = 4; public static int SizeOfGasTank get return 15; public static void Drive() Automobile.Drive(); int i = Automobile.NumberOfWheels;

Anonymní metody Delegáty a události Podobné funkcionálnímu lambda z jazyka scheme Problém se statickým typováním, je potřeba vždy dopředu říci, jak ten callback bude vypadat... delegate bool Action(Node n); static void Walk(Node n, Action a) while (n!= null && a(n)) n = n.next;... Walk(list, delegate(node n) Console.WriteLine(n.Name); return true; );

Klíčové slovo var Delegáty a události Pokud se nechceme vypisovat s potenciálně dlouhým typem proměnné nebo si nepamatujeme přesné znění, můžeme použít klíčové slovo var Typické použití ve foreach string[] words = "apple", "strawberry", "grape", "peach", "banana" ; foreach (var s in words) Console.WriteLine(s);

Klíčové slovo const Delegáty a události Klíčové slovo const slouží k deklaraci konstanty Používá se na (členské) proměnné Nelze za běhu měnit, je totiž odvozena už při kompilaci a neleží na žádné adrese public const int c1 = 5; public const int c2 = c1 + 5;... Console.WriteLine( c2 ); // => 10

A ted vy Napište funcionální třídu Cons, která se chová jako cons ve scheme Vytvořte seznam List, který využívá třídy Cons, stejně jak je tomu ve Scheme Implementujte metodu Map, která se chová stejně jako map Implementujte metodu Filter, která se chová stejně jako map Nakonec můžete implementovat Foldr, Foldl,...