Přetěžování metod (1) Přetěžování metod – overloading:

Slides:



Advertisements
Podobné prezentace
12/04/20151 Kolekce (1) Kolekce (collection) představují standardní datové struktury (seskupení) prvků (objektů) Jsou definovány ve jmenném prostoru System.Collections.
Advertisements

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.
Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Kateřina Raichová. Materiál je publikován pod licencí Creative Commons. ze sady:3tematický.
Strategické otázky výzkumníka 1.Jaký typ výzkumu zvolit? 2.Na jakém vzorku bude výzkum probíhat? 3.Jaké výzkumné metody a techniky uplatnit?
Uvedení autoři, není-li uvedeno jinak, jsou autory tohoto výukového materiálu a všech jeho částí. Tento projekt je spolufinancován ESF a státním rozpočtem.
Operační program Vzdělávání pro konkurenceschopnost Název projektu: Inovace magisterského studijního programu Fakulty ekonomiky a managementu Registrační.
Inf Tabulkový procesor - funkce. Výukový materiál Číslo projektu: CZ.1.07/1.5.00/ Šablona: III/2 Inovace a zkvalitnění výuky prostřednictvím ICT.
Programování v jazyce C++ Dědičnost a polymorfismus.
Číslo projektuCZ.1.07/1.5.00/ Číslo materiáluVY_32_INOVACE_30-03 Název školy Střední průmyslová škola stavební, České Budějovice, Resslova 2 AutorRNDr.
Principy Základních registrů Ing. Ondřej Felix, CSc.
Funkce Lineární funkce a její vlastnosti 2. Funkce − definice Funkce je předpis, který každému číslu z definičního oboru, který je podmnožinou množiny.
Řetězce v jazyce C ● řetězec je posloupnost znaků ● řetězcové konstanty se v C vkládají mezi uvozovky, např. "Ahoj Hugo!" ● v paměti je řetězec uložen.
Definice: Funkce f na množině D(f)  R je předpis, který každému číslu z množiny D(f) přiřazuje právě jedno reálné číslo. Jinak: Nechť A, B jsou neprázdné.
Microsoft Excel verze 2010 Mgr. Přemysl Kejzlar.
Senzory pro EZS.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Mocniny, odmocniny, úpravy algebraických výrazů
Číselné množiny - přehled
COM – Práce s objektovým modelem jiné aplikace
Batové dávky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Vojtěch Mrózek. Dostupné z Metodického portálu ISSN: ,
Lineární funkce - příklady
Řešení nerovnic Lineární nerovnice
1. ročník oboru Mechanik opravář motorových vozidel
ČÍSLO PROJEKTU CZ.1.07/1.5.00/ ČÍSLO MATERIÁLU 1 – Množiny – teorie
Způsoby zápisu algoritmů
Lineární rovnice a nerovnice I.
Přetěžování Datové typy.
Kurz algoritmizace a programování v jazyce C
Uživatelem definované datové typy
Programování v jazyce C++
Abstraktní datové typy
Financováno z ESF a státního rozpočtu ČR.
Struktury.
Excel – tabulkový procesor
Software počítače 1 - opakování
8.1.2 Podprostory.
Inf Tabulkový procesor - formátování
Databáze MS ACCESS 2010.
Základní jednorozměrné geometrické útvary
Datové typy v jazyce C Datové typy void skalární aritmetické
Abstract Factory.
Tabulky – další možnosti
Lexikální atomy jazyka C
SÁRA ŠPAČKOVÁ MARKÉTA KOČÍBOVÁ MARCELA CHROMČÁKOVÁ LUKÁŠ BARTOŠ B3E1
Výukový materiál zpracován v rámci projektu
Kvadratické nerovnice
Rovnice a graf přímé úměrnosti.
Řešení nerovnic Lineární nerovnice
Informatika pro ekonomy přednáška 8
Teorie Informace, signál
© 2012 STÁTNÍ ÚSTAV PRO KONTROLU LÉČIV
Materiál byl vytvořen v rámci projektu
Remote login.
Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
Základní statistické pojmy
ZÁKLADNÍ ŠKOLA, JIČÍN, HUSOVA 170 Číslo projektu
A5M33IZS – Informační a znalostní systémy
Fronta (1) Dynamická datová struktura typu FIFO (First In First Out)
Datové typy v jazyce C Datové typy void skalární aritmetické
KOMBINACE BEZ OPAKOVÁNÍ
Průvodní list Šablona: III/2 Inovace a zkvalitnění výuky prostřednictvím ICT   Vzdělávací materiál: Prezentace – zápis pro žáky Určen pro: 2. ročník oboru.
Dynamické programování Úloha batohu neomezená
Lineární funkce a její vlastnosti
Informatika – Základní operace s buňkami
Algoritmizace a datové struktury (14ASD)
Grafy kvadratických funkcí
Hromadné dokumenty opakující se pro kolekci osob
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Union neboli sjednocení Bitová pole
Class Diagrams.
Transkript prezentace:

Přetěžování metod (1) Přetěžování metod – overloading: dovoluje deklarovat více než jedenu metodu se stejným oborem platnosti a se stejným jménem jedna metoda se tak může vyskytovat ve více variantách přetěžované metody musí mít rozdílný seznam formálních parametrů, tj. musí se lišit počtem formálních parametrů nebo jejich typy na základě použitých skutečných parametrů (v době volání) je rozhodnuto, která varianta bude použita 04/11/2017

Přetěžování metod (2) Užitečné zejména v situaci, kdy je nutné pro-vádět stejnou operaci na různých datových typech Příklad: metoda WriteLine třídy Console může být použita 19 různými způsoby (je definována v 19 různých variantách) každá z nich má odlišnou sadu parametrů např.: nemá žádný parametr  vypíše pouze prázdný řádek jako parametr má řetězec, který vypíše na standardní výstup jako parametr přebírá desetinné (celé) číslo a vypíše jej na stan-dardní výstup 04/11/2017

Konstanty (1) Členy třídy reprezentující konstantní hodno-ty, které se v průběhu programu nemohou měnit Jedná se o hodnoty, které musí být určitelné v době překladu programu Konstanty jsou statickými členy třídy, avšak při jejich definici se nepoužívá klíčové slovo static Lze je definovat pomocí klíčového slova const 04/11/2017

Konstanty (2) Příklad: class Physics { public const double h = 6.62606957E–34; public const double hbar = h/(2*Math.PI); public const double F = 9.6485E4; } 04/11/2017

Výčtové typy (1) Výčtové (enumerační) typy jsou uživatelem definované celočíselné typy Představují ohraničenou množinu celočísel-ných konstant Každou hodnotu výčtového typu lze převést na její celočíselný prototyp a naopak Není-li specifikováno jinak, je celočíselným prototypem typ int (System.Int32) Definice výčtového typu se provádí pomocí klíčového slova enum 04/11/2017

Výčtové typy (2) Celočíselné hodnoty výčtového typu jsou dá-ny pořadím jednotlivých identifikátorů v de-finici typu (není-li uvedeno jinak): první identifikátor má hodnotu 0 hodnoty dalších identifikátorů se zvyšují po jedné Příklad: enum Color { White, // (int)Color.White == 0 Red, // (int)Color.Red == 1 Gray, // (int)Color.Gray == 2 Blue = 5, // (int)Color.Blue == 5 Black // (int)Color.Black == 6 } 04/11/2017

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 indexy) Definují se „podobně“ jako vlastnosti Název indexeru je vždy this, po němž násle-dují jeho parametry (v hranatých závorkách) Používá přístupové metody: get: pro načtení hodnoty na daném indexu (indexech) set: pro zápis hodnoty na daném indexu (indexech) zapisovaná data jsou předávána parametrem value 04/11/2017

Indexery (2) Příklad: public int this[int index] { get { … } set { … } } Poznámka: pomocí indexerů je možné s třídami a strukturami pracovat i jako s vícerozměrnými poli (přidáním dalšího argumentu do hranatých závorek): public double this[int i, int j] 04/11/2017

Pole (1) Pole představují soubor proměnných (prvků) stejného datového typu, které mohou být označovány společným jménem Zpřístupnění jednoho prvku se provádí pomo-cí indexu (indexů) zapisovaného (zapisova-ných) v hranatých závorkách Prvky pole jsou v jazyku C# vždy indexovány od nuly Pole je referenční (odkazový) datový typ K vytvoření pole určitých rozměrů se používá klíčové slovo new 04/11/2017

Pole (2) Vytvořením pole se automaticky vytváří in-stance založená na abstraktní třídě Array, která je definována ve jmenném prostoru System Mezi vlastnosti třídy Array patří např.: Length: reprezentuje celkový počet prvků (ve všech rozměrech) Rank: vrací počet rozměrů pole Počet prvků ve specifikovaném rozměru lze získat pomocí metody GetLength 04/11/2017

Pole (3) Třída Array dále poskytuje metody např. pro: kopírování polí – CopyTo vyhledávání hodnoty v poli – BinarySearch řazení prvků v poli – Sort obrácení pořadí prvků – Reverse změnu velikosti pole – Resize Třída Array rovněž implementuje rozhraní IEnumerable  prvky polí lze procházet pomocí příkazu foreach 04/11/2017

Pole (4) Příkaz foreach: Jazyk C# podporuje práci s poli: umožňuje opakovat příkaz pro každý prvek v poli nebo v kolekci slouží pouze pro četní dat, nikoliv pro jejich modi-fikaci obecný tvar: foreach (typ id in pole) příkaz Jazyk C# podporuje práci s poli: jednorozměrnými vícerozměrnými (pravidelná, nepravidelná) 04/11/2017

Pole (5) Definice proměnné typu pole, vytvoření pole: jednorozměrné pole: int[] numbers; numbers = new int[10]; nebo int[] numbers = new int[10]; dvourozměrné pole (pravidelné): double[,] matrix; matrix = new double[4,5]; nebo double[,] matrix = new double[4,5]; 04/11/2017

Pole (6) dvourozměrné pole (nepravidelné – jagged array): pole polí mohou mít různou délku jednotlivých řádků int[][] jArr; jArr = new int[4][]; for (int i = 0; i < jArr.Length; i++) jArr[i] = new int[jArr.Length – i]; [0] [1] [2] [3] [0] 1 2 3 [1] 4 5 6 [2] 7 8 [3] 9 04/11/2017

Pole (7) Příklady přístupu k prvkům polí: Poznámka: numbers[1] matrix[2,3] jArr[1][2] Poznámka: pokus o zpřístupnění prvku mimo definovaný rozsah pole způsobí výjimku IndexOutOfRangeException 04/11/2017

Generické typy (1) Generické typy (generika) umožňují psát prog-ramy, které používají parametrizované typy Parametrizované typy jsou v době použití na-hrazeny typy konkrétními Vhodné v případech, kdy se stejný kód opaku-je pro různé datové typy  lepší znovupouži-telnost Zabezpečují silnou typovou kontrolu v době překladu zdrojového kódu 04/11/2017

Generické typy (2) Generický typ (T) se zapisuje za název defino-vaného objektu mezi symboly <, > (<T>) V rámci jedné definice je možné použít i více parametrizovaných typů (<T1, T2, T3>) V jazyku C# lze pomocí generik definovat: třídy struktury rozhraní metody delegáty 04/11/2017

Generické typy (3) Příklad definice generické metody: static void Swap<T>(ref T p1, ref T p2) { T temp; temp = p1; p1 = p2; p2 = temp; } Příklad použití: int a = 10, b = 20; double x = 123.87; y = 15.654; Swap<int>(ref a, ref b); Swap<double>(ref x, ref y); 04/11/2017

Generické typy (4) Příklad definice generické třídy: class Stack<T> { private T[] items; private int count; public Stack(int n) {…} public void Push(T item) {…} public T Pop() {…} } Příklad použití: Stack<int> stack = new Stack<int>(10); stack.Push(3); int x = stack.Pop(); 04/11/2017

Generické typy (5) Na parametrizovaný typ mohou být kladena omezení (zapisována) pomocí klíčového slova where: where T : struct: typ T musí být hodnotový typ where T : class: typ T musí být referenční typ může se jednat o třídu, rozhraní, delegáta nebo pole where T : new(): typ T musí mít veřejný konstruktor bez parametrů je-li toto omezení použito v kombinaci s ostatními, pak musí být uvedeno jako poslední 04/11/2017

Generické typy (6) where T : class_name: typ T musí být odvozen ze specifikované třídy where T : interface_name: typ T musí implementovat dané rozhraní je možné specifikovat několik těchto omezení najednou Omezení parametrizovaných typů jsou zapiso-vána v záhlaví třídy za jejím názvem Příklad: class MyClass<T, U> where T : class, IComparable where U : struct { … } 04/11/2017

Kolekce (1) Kolekce (collection) představují standardní datové struktury (seskupení) prvků (objektů) Jsou definovány ve jmenném prostoru System.Collections a jmenných pros-torech do něj vnořených Na rozdíl od polí se jejich velikost v průběhu programu může dynamicky zvětšovat, resp. zmenšovat Některé kolekce umožňují ukládaným objek-tům přiřadit klíč, pomocí něhož lze daný objekt rychle zpřístupnit 04/11/2017

Kolekce (2) Jazyk C# rozlišuje kolekce: negenerické, obecné (non-generic): třídy, které implementují rozhraní IEnumerable ukládají data typu object po získání prvku z kolekce bývá nutné provést jeho přetypování nejsou typově bezpečné v současné době nejsou příliš používány zůstávají zachovány zejména z důvodu zpětné kompa-tibility příklady: ArrayList, Stack, SortedList , Queue 04/11/2017

Kolekce (3) generické (generic): třídy, které implementují rozhraní IEnumerable a IEnumerable<T> (IEnumerable<T> dědí od rozhraní IEnumerable) dovolují specifikovat datový typ ukládaných prvků ve chvíli vytvoření instance reprezentují silně typované (typově bezpečné) kolekce příklady: Collection<T>, List<T>, HashSet<T>, Stack<T>, Queue<T>, Dictionary<TKey, TValue> Rozhraní IEnumerable, resp. rozhraní IEnumerable<T> definují metodu GetEnumerator 04/11/2017

Kolekce (4) Metoda GetEnumerator vrací objekt Enumerator, resp. Enumerator<T> do-volující snadné procházení kolekcí pomocí příkazu foreach Použití foreach je umožněno tím, že objekt Enumerator, resp. Enumerator<T> implementuje rozhraní IEnumerator, resp. IEnumerator<T>, které definuje: object Current { get; } bool MoveNext(); void Reset(); T Current { get; } bool MoveNext(); void Reset(); 04/11/2017

Kolekce (5) Vlastnost: Metody: Current: MoveNext: Reset: slouží pro načtení prvku na aktuální pozici enumerátoru Metody: MoveNext: posune enumerátor na další prvek v kolekci Reset: nastaví enumerátor na iniciální pozici, tj, před první prvek v kolekci 04/11/2017

Třída Collection<T> Definována ve jmenném prostoru: System.Collections.ObjectModel Její instance podporují přístup k jednotlivým prvkům prostřednictvím indexu Počet ukládaných prvků není nijak limitován Není určena pro běžné použití Představuje základní třídu pro generické ko-lekce Slouží zejména jako třída pro tvorbu vlastních kolekcí 04/11/2017

Třída List<T> (1) Definována ve jmenném prostoru: System.Collections.Generic Reprezentuje silně typovaný seznam objektů, které mohou být zpřístupněny pomocí indexu Prvky jsou ukládány pomocí pole, jehož veli-kost se dynamicky zvětšuje Počet prvků v seznamu je dán hodnotou vlast-nosti Count Třída List<T> poskytuje např. metody: void Add(T item): přidá prvek item na konec seznamu – O(1), O(n) 04/11/2017

Třída List<T> (2) void Clear(): odstraní všechny prvky ze seznamu – O(n) bool Contains(T item): zjišťuje, zda se v seznamu nachází prvek item – O(n) int IndexOf(T item): hledá (lineárně) první výskyt prvku item – O(n) void Insert(int index, T item): vloží do seznamu prvek item na pozici index – O(n) bool Remove(T item): odebere ze seznamu první výskyt prvku item – O(n) void RemoveAt(int index): odebere ze seznamu prvek na pozici index – O(n) 04/11/2017

Třída List<T> (3) void Sort(): seřadí prvky seznamu (QuickSort) – O(n.log(n)), O(n2) void Reverse(): obrátí pořadí prvků v seznamu – O(n) int BinarySearch(T item): hledá v seznamu prvek item metodou půlení interva-lu – O(log(n)) prvky musí být nejprve seřazeny T[] ToArray(): kopíruje prvky seznamu do pole – O(n) Poznámka: třída List<T> představuje generický ekvivalent negenerické třídy ArrayList 04/11/2017

Třída Dictionary<TK, TV> (1) Definována ve jmenném prostoru: System.Collections.Generic Reprezentuje kolekci (slovník) klíčů a hodnot Každý klíč: je asociovaný s odpovídající hodnotou musí být jedinečný Poskytuje mapování z množiny klíčů na mno-žinu hodnot – klíče mohou být použity jako index pro zpřístupnění hodnoty Při přidávání prvků se automaticky alokuje další potřebné paměťové místo 04/11/2017

Třída Dictionary<TK, TV> (2) Implementována jako hashovací tabulka Počet dvojic klíč, hodnota je dán hodnotou vlastnosti Count Třída Dictionary<TK, TV> poskytuje např. metody: void Add(TK key, TV value): přidá dvojici klíč, hodnota do slovníku – O(1), O(n) bool ContainsKey(TK key): zjišťuje, zda slovník obsahuje klíč key – O(1) bool ContainsValue(TV value): zjišťuje, zda slovník obsahuje hodnotu value – O(n) 04/11/2017

Třída Dictionary<TK, TV> (3) void Clear(): odstraní ze slovníku všechny klíče a hodnoty – O(n) bool Remove(TK key): odebere ze slovníku hodnotu s klíčem key – O(1) bool TryGetValue (TK key, out TV value): zpřístupňuje hodnotu value se specifikovaným klíčem key – O(1) 04/11/2017

Třída HashSet<T> (1) Definována ve jmenném prostoru: System.Collections.Generic Reprezentuje množinu hodnot Umožňuje provádět množinové operace Nemohou se v ní vyskytovat duplicitní hod-noty Při přidávání prvků se automaticky alokuje další potřebné paměťové místo Počet prvků množiny je obsažen ve vlastnosti Count 04/11/2017

Třída HashSet<T> (2) Implementována pomocí hashovacího algorit-mu Třída HashSet<T> poskytuje např. metody: bool Add(T item): přidá prvek item do množiny – O(1), O(n) void Clear(): odebere všechny prvky z množiny – O(n) bool Contains(T item): zjišťuje, zda množina obsahuje prvek item – O(1) void CopyTo(T[] array): kopíruje prvky množiny do pole array – O(n) 04/11/2017

Třída HashSet<T> (3) void ExceptWith(IEnumerable<T> c): odebere z množiny prvky specifikované kolekcí c – O(n) void IntersectWith(IEnumerable<T> c): provede průnik množiny a kolekce prvků c – O(n) bool IsSubsetOf(IEnumerable<T> c): testuje, zda množina je podmnožinou kolekce c – O(n) bool IsSupersetOf(IEnumerable<T> c): testuje, zda množina je nadmnožinou kolekce c – O(n) bool Remove(T item): odebere z množiny prvek item – O(1) bool UnionWith(IEnumerable<T> c): provede sjednocení množiny a kolekce prvků c – O(n) 04/11/2017

Srovnání kolekcí Vyhledávání prvku Vložení prvku Smazání prvku List Hodnota: O(n) O(log(n)) Index: O(1) O(1), O(n) O(n) Dictionary Hodnota: O(n) Klíč: O(1) O(1), O(n) O(1) HashSet Klíč: O(1) O(1), O(n) O(1) 04/11/2017