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

Podobné dokumenty
Kolekce, cyklus foreach

Generické programování

Datové struktury. alg12 1

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

Dynamické datové struktury I.

Abstraktní datové typy

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

Základní datové struktury

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

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

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

Konstruktory a destruktory

Abstraktní datové typy: zásobník

1. Programování proti rozhraní

ADT/ADS = abstraktní datové typy / struktury

PREPROCESOR POKRAČOVÁNÍ

Dědičnost (inheritance)

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

IW5 - Programování v.net a C# 4 Pokročilé konstrukce C#

Lineární datové struktury

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

Programování v Javě I. Leden 2008

Úvod do programovacích jazyků (Java)

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

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

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

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

Jazyk C# (seminář 6)

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

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

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

Zápis programu v jazyce C#

17. Projekt Trojúhelníky

Dynamické datové struktury IV.

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

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

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

Abstraktní třída a rozhraní

Výčtový typ strana 67

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

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

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

Principy objektově orientovaného programování

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

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

KTE / ZPE Informační technologie

RMI Remote Method Invocation

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

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

Jazyk C# (seminář 3)

Soubor jako posloupnost bytů

Znaky. IAJCE Přednáška č. 10. každému znaku je nutné přiřadit nějaké číslo (nezáporné přímé mapování znak <->

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

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

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

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

Šablony, kontejnery a iterátory

ABSTRAKTNÍ DATOVÉ TYPY (ADT)

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

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/

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

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

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

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

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

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

Šablony, kontejnery a iterátory

20. Projekt Domácí mediotéka

Programovací jazyk Java

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

Datové struktury obsah přednášky 1. Úvod 2. Třídy Type-wrapper (obalový typ) pro primitivní typy automatické převody 3. Automatické převody mezi

15. Projekt Kalkulačka

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

Ošetřování chyb v programech

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

Objektově orientované programování

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

Lineární datové struktury

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.

Připravil: David Procházka. Programovací jazyk C++

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

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# (seminář 5)

Jazyk C# (seminář 3)

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

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

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.

IB015 Neimperativní programování. Časová složitost, Typové třídy, Moduly. Jiří Barnat Libor Škarvada

OOPR_05. Případové studie

typová konverze typová inference

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

Část I Spojové struktury

7. Datové typy v Javě

10. března 2015, Brno Připravil: David Procházka. Programovací jazyk C++

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Spojové struktury. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 10 A0B36PR1 Programování 1

Java a XML. 10/26/09 1/7 Java a XML

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

Jazyk C++ I. Šablony 2

Transkript:

Fronta (Queue) FIFO First In First Out (první dovnitř první ven) Vložení položky (Enqueue) Vyjmutí položky (Dequeue) Přidávání prvků Konec (Tail) Začátek (head) na jedné straně (konec) Odebírání prvků o na opačné straně (začátek) o ve stejném pořadí jako byly vloženy použití: Vyrovnávací paměť dvou spolupracujících objektů Implementace o dva nezávislé objekty díky dvěma ukazatelům o první objekt plní frontu, druhý prvky odebírá Přes pole nutno pamatovat konec i začátek o Většinou nelze běžně nutná tzv. kruhová fronta (cyclic queue) pole Q[0,1,,n-1], po Q[n-1] následuje Q[0] [n-1] [0] Začátek (head) [1] [2] [3] [4] Spojový (dopředný) seznam neomezená délka Prioritní fronta fronta s předbíháním každý prvek různá priorita 1 Konec (Tail) přednostně jsou odebírány prvky s vyšší prioritou nutno projít celou frontu Fronta v BCL.NET Třída Queue<T> = cyklická fronta, data v poli, schopnost automaticky růst ( ale jako u Stack) Konstruktory:

o Queue() vytvoří frontu o kapacitě 4 prvky o Queue(int capacity) vytvoří frontu o kapacitě capacity prvků Vkládání: o void Enqueue(T item) vloží item na konec fronty (plná fronta = autozvětšení) Vyjímání: o T Dequeue() vrací prvek ze začátku fronty o T Peek() jako Dequeue(), ale prvek ve frontě zůstává o void Clear() vymaže všechny prvky z fronty (kapacita se nemění) Převody na pole: o Jako u Stack Vlastnosti jen pro čtení: o Int Count počet prvků ve frontě (ne kapacita!) Příklad použití: Queue<int> q = new Queue<int>(5); q.enqueue(1); q.enqueue(2); q.enqueue(3); q.enqueue(4); int a = q.dequeue(); a = q.dequeue(); q.enqueue(31); q.enqueue(41); Negenerické varianty Původně v.net 1.0 I v.net 2.0 a novější jmenný prostor System.Collection Pracují pouze s prvky typu object o vkládání: Hodnotové typy boxing Odkazové typy dědičnost (předek zastupuje potomka) o Vyjímání: nutno přetypovat Pomalejší, nebezpečnější než generické varianty Příklad: Zásobník typu double Stack s = new Stack(); s.push(10.3); double x = (double)s.pop(); Delegáty (Delegate) // void Stack.Push(object obj) -> boxing // object Stack.Push() -> unboxing = způsob, jak prostřednictvím jedné metody spustit metodu jinou o Chová se jako zástupce pro jinou metodu Příklad delegát pro metody typu double (double): class Program delegate double Zastupce(double param); // prototyp metod 2

static double Metoda(double x) return 10 * x; static void Main(string[] args) Zastupce d; d = new Zastupce(Math.Sin); // d je ted Math.Sin() double prom = d(math.pi / 2); // = 1.0 d = new Zastupce(Metoda); // d je ted Metoda() prom = d(5); // = 50.0 Delegát statut třídy, lze definice: o Jako člen jiné třídy (lze public, private,, static) viz příklad výše o Mimo třídu Na úrovni.net potomek třídy Delegate skrytý za syntaktický cukr (viz pole a Array) Požadavky na parametry žádné: o Počet parametrů: 0 až o Typy návratové hodnoty a parametrů: libovolné instance delegáta se může odkazovat na libovolnou instanční či statickou metodu libovolného objektu jakékoli třídy. Jediná podmínka o Příklad chyby: 3 hlavička metody = delegát. delegate double Zastupce(double param) static void Metoda(string text) Console.WriteLine(text); Zastupce = new Zastupce(Metoda); // ERROR: No overload for 'Metoda' matches delegate 'Zastupce' Využití: o událostmi řízené programování (typicky GUI ve Windows) o paralelní programování (vlákna) o spouštění metod, které nejsou známy v době psaní programu (viz cvičení) Bubble srt tak, aby uměla setřídit cokoli. Vícenásobný delegát (Multicast Delegate) Jeden delegát = může být zástupce pro více metod (spouští se postupně) o Návratová hodnota jedině void (jak uložit do jedné proměnné výsledky více metod?) o Počet neomezen o Pořadí spuštění není definováno.net: potomek třídy MulticastDelegate Příklad: class Program

delegate void Zastupce(double param); static void Metoda(double x) Console.WriteLine(10 * x); static void JinaMetoda(double x) Console.WriteLine(Math.Sin(x)); static void Main(string[] args) Zastupce d = new Zastupce(Metoda); d += new Zastupce(JinaMetoda); d(10); o Lze i: Zastupce d1 = new Zastupce(Metoda); Zastupce d2 = new Zastupce(JinaMetoda); Zastupce d = d1 + d2; d(10); Odebrání metody z delegáta: d -= JinaMetoda; Události (Events) Jak napsat program, který je ovládán klávesami (tlačítky)? o Konzolová aplikace START Klávesa 1 Stisklá? ANO Akce1() Klávesa 2 Stisklá? ANO Akce2() Nevýhoda: spotřeba 100% výkonu procesoru (OS Windows obrazně, MS-DOS skutečně) o GUI aplikace (OS Windows, Linux, apod.) událostmi řízené programování (event based programming) 4

Princip: Akce1() Akce2() Klik C# event Program nelze popsat spojitým vývojovým diagramem Čekání realizuje OS (0% spotřeba výkonu) Stisk tlačítka (= událost) OS spustí určenou metodu (programátorem) ošetření události o netýká se jen programování GUI, určeno pro komunikaci mezi objekty o jakákoli třída může generovat události, např. Sklenice: události přetekla, je prázdná apod. princip a základní pojmy: o až bude ráno, tak mě vzbuť" Konzument Události Metoda Události Registrace události Odpálení události Generátor události o konzument, generátor = objekty o Metoda události event handler o Odpálení události firing event Příklad: class Trida // generátor public delegate void PrototypHandleru(); public event PrototypHandleru Udalost; private int prom; public void InkrementProm() prom++; if (prom == 2) Udalost(); // odpálení prom = 0; 5

class Program // konzument static void Main(string[] args) Trida objekt = new Trida(); objekt.udalost += Handler; // registrace for (int i = 0; i < 5; i++) Console.WriteLine(i); objekt.inkrementprom(); // Event Handler static void Handler() Console.WriteLine("Nastala udalost"); Pokus o odpálení nezaregistrované události ošetřit // jinak stejné public void InkrementProm() prom++; if (prom == 2) if (Udalost!= null) Udalost(); prom = 0; založeno na multicast delegates: o registrace +=, odregistrace = o návratová hodnota event handleru vždy void výjimka, nutno v generátoru vždy události mohou být řetězeny v handleru jedné události odpálíme jinou Události dle.net Framework Guidelines http://msdn2.microsoft.com/en-us/library/w369ty8x(vs.80).aspx Jen doporučení (použito ve Winforms) delegát: delegate void EventHandler(object sender, EventArgs e) 6

o sender informace o generátoru (např. více generátorů je zaregistrováno na jeden handler a tam je nutné generátory rozlišit) o e argumenty události žádné požadavky na argumenty EventArgs vlastní parametry události potomek EventArgs (viz dále) o není nutné deklarovat v BCL je již obsažen předchozí příklad (jen změny) class Program // Main() je stejny static void Handler(object sender, EventArgs e) Console.WriteLine("Nastala udalost"); class Trida // gelegata EventHandler nedeklarovat public event EventHandler Udalost; // v public void InkrementProm(): if (Udalost!= null) Udalost(this, new EventArgs()); definice a použití vlastního argumentu události: o třída, podědit od EventArgs, název by měl končit na EventArgs o nutno definovat vlastního delegáta (název by měl končit na Handler) o upravený min. příklad: class TridaEventArgs: EventArgs private string zprava; public string Zprava get return zprava; public TridaEventArgs(string text) this.zprava = text; class Trida public delegate void TridaEventHandler(object sender, TridaEventArgs e); public event TridaEventHandler Udalost; // v public void InkrementProm(): if (Udalost!= null) Udalost(this, new TridaEventArgs("Ahoj")); class Program // Main() je stejny 7

static void Handler(object sender, TridaEventArgs e) Console.WriteLine("Nastala udalost, zprava: 0", e.zprava); nutnost definice vlastního delegáta lze obejít pomocí generické verze public event EventHandler<TridaEventArgs> Udalost; 8