Delegáty (1) Delegát (delegate) je datový typ, který definuje signaturu metody Delegáty bývají rovněž označovány jako typo-vě bezpečné ukazatele na funkce.

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

(instance konkrétní třídy)
Tomáš Petříček Microsoft C# MVP
Vlastní skript může být umístěn: v hlavičce stránky v těle stránky
Seminář C++ 5. cvičení Dědičnost Ing. Jan Mikulka.
Programovací jazyk C++
Třída SIMSET je druhou standardní systémovou třídou, která obsahuje prostředky pro práci se spojovými seznamy. KRUHOVÉ SPOJOVÉ SEZNAMY Spojový seznam –
Fakulta elektrotechniky a informatiky
Pole, ukazatele a odkazy
ÚVOD DO CPP 7 Dědičnost - pokračování
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
C# pro začátečníky Mgr. Jaromír Osčádal
Další dotazy SQL Structured Query Language. Některé SQL příkazy mohou mít v sobě obsaženy další kompletní příkazy SELECT. Využijeme je tam, kde potřebujeme.
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Programování v C++ Cvičení.
PROGRAMOVACÍ JAZYKY (c) Tralvex Yeap. All Rights Reserved.
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
Algoritmy a programovací techniky
Objektové programování
Algoritmy vyhledávání a řazení
08/04/20151 Delegáty (1) Delegát (delegate) je datový typ, který definuje signaturu metody Delegáty bývají rovněž označovány jako typo- vě bezpečné ukazatele.
08/04/20151 Události (1) Členy třídy umožňující objektu nebo třídě rea- govat na zprávy (události) Dovolují třídě nebo objektu informovat jinou třídu nebo.
6. cvičení Polymorfismus
SQL – základní pojmy Ing. Roman Danel, Ph.D.
Počítače a programování 1
JavaScript Podmínky, cykly a pole.
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Architektury a techniky DS Cvičení č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
12/04/20151 Kolekce (1) Kolekce (collection) představují standardní datové struktury (seskupení) prvků (objektů) Jsou definovány ve jmenném prostoru System.Collections.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
13/04/20151 Indexery (1) Členy třídy (struktury) umožňující třídě (struk- tuře) používat hranaté závorky a pracovat s ní podobně jako s polem (používat.
13/04/20151 Datový typ třída – class (1) Datový typ definovaný uživatelem Poskytuje mechanismus pro modelování entit, s nimiž manipulují aplikace Charakterizuje.
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
Principy OOP Objektově orientované programování vychá-zí ze třech základních principů (rysů): zapouzdření (encapsulation) dědičnost (inheritance) polymorfismus.
Aplikační a programové vybavení
XQuery Dotazovací jazyk XML Daniel Privalenkov. O čem bude prezentace Nutnost dotazovacího jazyku v XML Rychlý přehled XQuery Několik příkladů.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Kam se ubírá jazyk C#? Dr. Ing. Dalibor Kačmář Academic Developer Evangelist Developer & Platform Evangelist Group Microsoft Czech & Slovakia Anders Hejlsberg.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
23/04/20151 LINQ (1) LINQ (Language Integrated Query) je součást MS.NET Frameworku umožňující jednotný přístup k datům a jejich zpracování deklarativ-
Podprogramy (subroutines) Pojmenované kousky programu, které –tvoří logicky ucelené části –se v programu opakují Jsou zapsány na jednom místě a v případě.
YOUR LOGO C# ADO.NET. YOUR LOGO Úvod – ADO.NET  ADO.NET zajišťuje přístup k databázím  2 koncepčně jedinečné styly -Připojeně -Odpojeně přechodné (offline)
Programování v jazyce C++ Speciality jazyka C++, úvod do OOP.
NÁZEV ŠKOLY:SOŠ Net Office, spol. s r.o. Orlová Lutyně
Typ struktura (1) Datový typ struktura (struct) je agrego-vaný heterogenní datový typ Jedná se o skupinu několika proměnných, které mohou mít různé datové.
Y36PJC Programování v jazyce C/C++
Úvod do C# - OOP Jaroslav BURDYS 4IT.
SQL – příkaz SELECT Ing. Roman Danel, Ph.D.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Návrhový vzor Flyweight
Programování v jazyce C++
TNPW1 JavaScript Ing. Jiří Štěpánek.
Příkazy cyklu (1) Umožňují vícekrát (nebo ani jednou) pro-vést určitý příkaz Jazyk C rozlišuje příkaz cyklu: s podmínkou na začátku: obecný tvar: while.
Databázové systémy a SQL
Dynamické proměnné (1) Proměnné, jejichž počet a (nebo) velikost pa-měti využívané těmito proměnnými se v prů-běhu programu mění Dynamické proměnné lze.
Oblast platnosti identifikátoru (1)
Typ pole (1) Proměnná typu pole představuje kolekci proměnných stejného datového typu, které mohou být označovány společným jménem (identifikátorem) Pole.
Název školy: Střední odborná škola stavební Karlovy Vary
C# přehled vlastností.
Typ ukazatel (1) Proměnné typu ukazatel (pointer) uchovávají paměťovou adresu Hodnota ukazatele říká, kde (na jaké adrese) se v paměti nachází nějaký objekt.
Přednáška 9 Triggery.
Cyklus for (1) Obecný tvar: for (výraz1; výraz2; výraz3) příkaz
ZAL – 7. cvičení 2016.
Transkript prezentace:

Delegáty (1) Delegát (delegate) je datový typ, který definuje signaturu metody Delegáty bývají rovněž označovány jako typo-vě bezpečné ukazatele na funkce Deklarace delegáta definuje třídu, jež je odvo-zena z třídy System.Delegate Instance delegáta: slouží k reprezentaci odkazu (reference) na metodu (instanční i statickou) může být asociována s libovolnou metodou, která má kompatibilní signaturu (stejný návratový typ a stejné parametry) 06/05/2018

Delegáty (2) Umožňují předávat metody jako parametry ji-ným metodám Delegát se deklaruje s: použitím klíčového slova delegate popisem návratového typu popisem parametrů Příklad: public delegate int BinOpDel(int op1, int op2); Před použitím delegáta je zapotřebí vytvořit jeho instanci, čímž dojde k asociování s kon-krétní metodou 06/05/2018

Delegáty (3) Poznámka: jazyk C# také povoluje přiřadit do delegáta pouze název metody Příklad: public static int Add(int op1, int op2) { return op1 + op2; } static void Main() { BinOpDel delVar = new BinOpDel(Add); // BinOpDel delVar = Add; int sum = delVar(1, 2); Console.WriteLine(sum); } 06/05/2018

Delegáty (4) Není-li delegátu přiřazena žádná hodnota (tzv. prázdný delegát), pak má hodnotu null Vyvolání prázdného delegáta způsobí výjimku NullReferenceException Při práci s delegáty je možné použít také tzv. anonymní metody Anonymní metody: umožňují psát kód delegátů přímo „in-line“ vytváří se klíčovým slovem delegate, za kterým následuje definice anonymní funkce 06/05/2018

Delegáty (5) Příklad: public delegate int BinOpDel(int op1, int op2); static void Main() { int sum; BinOpDel add = delegate(int op1, int op2) { return op1 + op2; }; sum = add(1, 2); Console.WriteLine(sum); } 06/05/2018

Delegáty (6) Knihovna dodávaná s .NET Frameworkem (BCL – Base Class Library) poskytuje také ge-nerické delegáty: Action: delegát pro funkce bez návratové hodnoty existuje 17 různých delegátů Action s různým počtem generických parametrů: Action, Action<T>, Action<T1, T2>, … Func: podobně jako Action existuje v 17 různých verzích, např. Func<T, TResult> poslední generický parametr udává typ návratové hod-noty 06/05/2018

Lambda výrazy (1) Lambda výrazy jsou anonymní funkce, jež je možné přiřadit do delegáta (vznikly jako zjed-nodušení anonymních metod) Umožňují psát lokální funkce, které mohou být předány jako parametry nebo vráceny jako hodnota volání funkce Často používány při psaní výrazů LINQ Zapisovány pomocí operátoru => „přechází v“ Lambda výraz specifikuje: seznam vstupních parametrů (může být i prázdný) na levé straně operátoru => výraz nebo příkazový blok na straně pravé 06/05/2018

Lambda výrazy (2) Příklad: (int a, int b) => { return a + b; } Typy parametrů si dokáže překladač odvodit a mohou být vynechány Jestliže má tělo výrazu na pravé straně jenom jednu operaci, pak lze vynechat složené závor-ky i klíčové slovo return: (a, b) => a + b; Pokud levá strana obsahuje pouze jeden para-metr, je možné vynechat i kulaté závorky: n => n * n; 06/05/2018

Lambda výrazy (3) Příklad: class Program { public delegate int BinOpDel(int op1, int op2); static void Main() { BinOpDel add = (op1, op2) => op1 + op2; int sum = add(1, 2); Console.WriteLine(sum); } } 06/05/2018

Události (1) Členy třídy umožňující objektu nebo třídě rea-govat na zprávy (události) Dovolují třídě nebo objektu informovat jinou třídu nebo objekt, že nastala nějaká změna (událost) Třída, která: zasílá (vyvolává) událost se označuje jako publi-sher (vydavatel) přijímá (obsluhuje) událost se nazývá subscriber (odběratel) 06/05/2018

Události (2) Pro události platí: vydavatel udává, kdy událost nastane odběratel stanovuje, jaká akce bude provedena jako odpověď na vzniklou událost (jako obsluha udá-losti) událost může mít více odběratelů odběratel může obsloužit více událostí od různých vydavatelů Bývají nejčastěji využívány v souvislosti s GUI k oznámení, že došlo k nějaké uživatelské akci (např. stisknutí tlačítka myši, výběr položky z menu apod.) 06/05/2018

Události (3) Program (třída) může definovat metody, které mají za úkol zpracovat příchozí události Metoda realizující zpracování (obsluhu) udá-losti se označuje jako tzv. event handler (ob-služná metoda) Události jsou v jazyce C# implementovány pomocí delegátů Parametry obslužné metody musí odpovídat definici delegáta, jež definuje její signaturu Metod obsluhujících události může být více 06/05/2018

Události (4) Odkaz na obslužnou metodu se: do události vkládá pomocí operátoru += z události odebírá pomocí operátoru -= Události se definují pomocí klíčového slova event, za nímž následuje typ delegáta asocio-vaného s touto událostí a název události Příklad: public delegate void EventHandler(object sender, EventArgs e) public event EventHandler Click; Třídy, které chtějí na vzniklou událost reago-vat, musí delegáta tohoto typu vytvořit a aso-ciovat k němu obslužnou metodu 06/05/2018

Události (5) Konvence: delegát události by měl mít: dva parametry: objekt, který událost vyvolal parametr typu třída EventArgs (nebo typu třída, která je ze třídy EventArgs odvozená), jež může specifikovat další infor-mace pro obslužnou metodu návratový typ void obvykle se používá delegát EventHandler Před vyvoláním události by se vždy mělo ově-řit, zda člen události nenabývá hodnoty null tj. otestovat, zda událost má asociovánu obsluž-nou metodu 06/05/2018

Události (6) Poznámka: ke každé události bývá zvykem vytvořit chráněnou virtuální metodu (OnNázevUdálosti), která danou událost vyvolá příklad: protected virtual void OnClick() { EventHandler handler = Click; if (handler != null) handler(this, EventArgs.Empty); } klíčové slovo protected označuje člena třídy, který je dostupný pouze v dané třídě a v třídách, které jsou z této třídy odvozené 06/05/2018

LINQ (1) LINQ (Language Integrated Query) je součást MS .NET Frameworku umožňující jednotný přístup k datům a jejich zpracování deklarativ-ním a funkcionálním způsobem Představuje dotazovací jazyk (podobný SQL), který je integrovaný přímo do syntaxe jazyka C# Poskytuje syntaktickou kontrolu dotazů v době překladu programu Mezi výhody technologie LINQ patří zejména: zjednodušení a zpřehlednění programového kódu jednotná forma práce s různě reprezentovanými daty 06/05/2018

LINQ (2) LINQ: Zpracovávaná data mohou být uložena např. v: přináší nový způsob pro dotazování nad různě repre-zentovanými daty usnadňuje: jejich třídění jejich propojování vyhledávání v nich Zpracovávaná data mohou být uložena např. v: polích kolekcích odvozených od generického rozhraní IEnumerable<T> XML SQL databázích 06/05/2018

LINQ (3) Zpřehlednění práce s daty pomocí LINQ je v ja-zyku C# dosaženo prostřednictvím: implicitně typovaných proměnných (var) rozšiřujících metod: metody rozšiřující již existující datové typy (třídy nebo struktury) dodatečnými statickými metodami lambda výrazů: jednodušší forma zápisu anonymních metod inicializátorů objektů: umožňují v době vytváření objektů nastavit jejich vlast-nosti a datové položky (bez nutnosti použití specifického konstruktoru) příklad: Dog dog = new Dog { Name = ”Rex”, Age = 5 }; 06/05/2018

LINQ (4) inicializátorů kolekcí: dovolují v době volání konstruktoru kolekce uvést seznam objektů kolekce musí implementovat rozhraní IEnumerable a obsahovat metodu Add pro vložení položky příklady: List<int> nums = new List<int> { 1, 2, 3, 4, 5 }; List<Dog> dogs = new List<Dog> { new Dog { Name = ”Rex”, Age = 5 }, new Dog { Name = ”Don”, Age = 2 }, new Dog { Name = ”Caesar”, Age = 7 } }; 06/05/2018

LINQ (5) anonymních typů: slouží k zapouzdření proměnných bez nutnosti deklarovat datový typ obsahují jednu nebo více vlastností, které se nastaví při vytvoření instance a dále slouží jen ke čtení lze je deklarovat jen pomocí implicitně typované proměn-né (var) vlastnosti se určí z objektové inicializace příklad: var Rex = new { Name = "Rex", Age = 5 }; Překlad z dotazu LINQ na dotaz pro konkrétní platformu je realizovaný pomocí tzv. LINQ (po-skytovatelů) providers 06/05/2018

LINQ (6) Mezi nejčastěji používané poskytovatele techno-logie LINQ patří: LINQ to Objects: slouží k práci s libovolnou kolekcí (polem), která imple-mentuje rozhraní IEnumerable<T> LINQ to SQL: mapuje příkazy LINQ na dotazy SQL a umožňuje práci s MS SQL Server a MS SQL Express LINQ to DataSet: používá technologii ADO.NET pro komunikaci s databá-zemi LINQ to XML: umožňuje práci se (dotazy nad) soubory XML 06/05/2018

LINQ to Objects (1) Definován ve jmenném prostoru System.Linq Slouží k dotazování nad daty, která jsou v ope-rační paměti (poli, třídami implementujícími rozhraní IEnumerable<T>) Dotazovací engine je spuštěn spolu s programem a umožňuje lokální dotazování Odpadává nutnost vytváření vlastních algoritmů pro vyhledávání v kolekcích Dotazování není dynamické: jakmile se jeden dotaz vyhodnotí a vrátí výslednou množinu, tak se do něj již nepromítají změny v pů-vodních datech 06/05/2018

LINQ to Objects (2) Pro zápis dotazů LINQ je možné použít např. následující operátory (klíčová slova): from: první klíčové slovo dotazu slouží ke specifikaci datového zdroje, nad kterým je prováděn dotaz where (Where): umožňuje definovat podmínku (restrikci) pro výsledek jestliže podmínka vrátí hodnotu true, tak je prvek zahrnut do výsledku select (Select): produkuje výsledky dotazu používá se k implementaci projekce, kde jsou pouze něk-teré datové složky objektu použity ve výsledku uvádí se vždy na konci dotazu 06/05/2018

LINQ to Objects (3) group (GroupBy): into: umožňuje seskupování prvků ve výsledku podle určitého klíče k použití tohoto slova se váže také použití klíčového slo-va by into: používáno v kombinaci s klíčovým slovem group, join nebo select k uložení výsledku a další možné práci s tímto výsledkem orderby (OrderBy, OrderByDescending): slouží k řazení prvků ve výsledku podle definovaných kritérií pro sestupné řazení je možné jej použít s klíčovým slovem descending 06/05/2018

LINQ to Objects (4) join (Join, GroupJoin): používá se k propojení prvků z různých datových zdrojů na základě definované podmínky ekvivalence v kombinaci s tímto slovem se používají nová slova equals a on let: slouží k definici lokální proměnné v rámci dotazu do této proměnné může být přiřazena sekvence elementů, nebo jednoduchá hodnota Jmenný prostor System.Linq definuje ještě další rozšiřující metody, které lze v souvislosti s kolekcemi (poli) používat, např.: First, Last: výběr prvního nebo posledního prvku 06/05/2018

LINQ to Objects (5) FirstOrDefault , LastOrDefault: ElementAt: Count: vrací první, resp. poslední prvek výchozí hodnotu daného datového typu v případě, že dotaz vrátil prázdný výsledek ElementAt: vrací prvek podle zadaného indexu Count: vrací počet prvků Union, Intersect, Except: provádí množinové operace (sjednocení, průnik a rozdíl) Min, Max: vrací minimální, resp. maximální hodnotu Sum, Average: vypočítá součet, resp. průměr prvků 06/05/2018

LINQ to Objects (6) Reverse: Concat: OfType: Take: Skip: TakeWhile: obrátí pořadí prvků v kolekci (poli) Concat: spojí dvě sekvence (pole, kolekce) dohromady OfType: výběr pouze těch prvků, které jsou specifikovaného typu Take: vybere prvních n prvků Skip: vybere všechny prvky počínaje (n+1). prvkem TakeWhile: Vybírá prvky dokud není splněna určitá podmínka SkipWhile: přeskakuje prvky, dokud není splněna určitá podmínka 06/05/2018

LINQ to Objects (7) Obecný tvar jednoduchého dotazu LINQ: from [typ] proměnná in datový_zdroj [where] podmínka_restrikce [orderby] klíč_řazení [descending] select výraz_projekce; Příklad: int[] numbers = { 1, 2, 3, 4, 5 }; var result = from n in numbers where n < 4 orderby n descending select n; vybere z pole numbers všechna čísla menší než 4 a provede jejich sestupné seřazení 06/05/2018

LINQ to Objects (8) Předcházející dotaz může být také zapsán s vy-užitím rozšiřujících metod a lambda výrazů: int[] numbers = { 1, 2, 3, 4, 5 }; var result = numbers.Where(n => n < 4). OrderByDescending(n => n); Dotazy LINQ jsou prováděny s tzv. odloženým spuštěním (deferred execution): dotaz je spuštěn až ve chvíli, kdy je k němu přistou-peno samotné uložení dotazu do proměnné jeho spuštění nevyvolá 06/05/2018

LINQ to Objects (9) Příklad: List<int> numbers = new List<int> {1, 2, 3, 4, 5}; var result = from n in numbers where n > 3 select n; numbers.Add(6); foreach (int i in result) Console.Write("{0} ", i); Uvedený program, vypíše hodnoty 4 5 6 06/05/2018