Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 1 z 43. Kontejnery a datovody
|
|
- Miloslav Bednář
- před 9 lety
- Počet zobrazení:
Transkript
1 Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 1 z 43 Kontejnery a datovody
2 Obsah Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 2 z Standardní knihovna kolekcí 2. Datovody 3. KONEC
3 1. Standardní knihovna kolekcí Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 3 z 43 Obsah 1.1 Co jsou to kontejnery 1.2 Pole Deklarace a inicializace Použití Pole jako konstanta, vícerozměrná pole Pole jako objekt Proměnný počet parametrů 1.3 Kolekce Přidání a odebrání prvků Zjišťování obsahu a velikosti, iterace Převody na pole a datovody 1.4 Množiny 1.5 Seznamy Práce s prvky na dané pozici Práce s celým seznamem 1.6 Fronty a dvojité fronty 1.7 Mapy (slovníky) Práce s jednotlivými prvky 1/ Práce s jednotlivými prvky 2/ Práce s celou mapou 1.8 Diagram tříd klíčové podmnožiny kolekcí Javy
4 1.1 Co jsou to kontejnery Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 4 z 43 Kontejner = objekt sloužící k uložení jiných objektů Na rozdíl od běžného života může být objekt uložen v několika kontejnerech Kontejnery dělíme na: Statické narodí se s kapacitou, která jim zůstane až do smrti Přepravka Pole Dynamické mohou svůj objem přizpůsobovat okamžitým potřebám Množina Seznam Fronta Strom Mapa (slovník) I dynamické kontejnery lze definovat jako neměnné, které pak již počet ani hodnoty uchovávaných prvků nemění
5 1.2 Pole Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 5 z 43 Pole jsou statické kontejnery, které mají přímou podporu v instrukčním souboru současných mikroprocesorů Jejich výhodou je maximální možná efektivita, jejich nevýhodou je, že nevyhovují některým zásadám moderního programování V současnosti se proto od jejich používání ve vyšších hladinách architektury postupně upouští a používají se spíše v implementačním suterénu S nadsázkou bychom mohli říci, že se dává přednost objektům, které vystupují jako dekorátor vybavující obalené pole potřebnými dodatečnými vlastnostmi a schopnostmi
6 1.2.1 Deklarace a inicializace Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 6 z 43 Při vytváření pole definujeme, kolik prvků se do něj vejde, a během jeho života již tato hodnota nejde změnit Typ pole se deklaruje tak, že se za typ prvků napíší hranaté závorky V definici se v těchto závorkách uvádí počet prvků Pole inicializované jen svým rozměrem má všechny prvky vynulované int[] polepěticelýchčísel = new int[5]; String[] poletřísetstringů = new String[300]; Při inicializaci hodnot pole uvádíme hodnoty ve složených závorkách Při inicializaci hodnotami se neuvádí počet prvků, překladač si jej odvodí int[] maláprvočísla = {1, 3, 5, 7}; String[] ročníobdobí = {"Jaro", "Léto", "Podzim", "Zima"}; IShape[] trio = {new Rectangle(), new Ellipse(), new Triangle()};
7 Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 7 z Použití Pole mají veřejný statický atribut length, v němž je uložena jejich délka int malýchprvočísel = maláprvočísla.length; //Uloží se hodnota 4 Nepotřebujeme-li vytvářet proměnnou, ale chceme pole hned použít, lze sloučit způsoby deklarace z minulé stránky public static void main(string[] args) { /* Tělo metody */ public void testmain() { main(new String[] {"První", "Druhý", "Třetí"}); } K hodnotám polí přistupujeme tak, že napíšeme název proměnné s odkazem na dané pole a za něj uvedeme v hranatých závorkách index prvku, přičemž prvky v poli jsou indexovány od nuly String léto = ročníobdobí[1]; int poslednímaléprvočíslo = maláprvočísla[maláprvočísla.length 1];
8 1.2.3 Pole jako konstanta, vícerozměrná pole Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 8 z 43 Je-li pole deklarováno jako konstanta, nesmíme vyměnit pole, avšak prvky pole se měnit mohou U polí nelze zakázat změnu jejich prvků proto se také nyní doporučuje používat místo polí seznamy final int[] meze = {1, 9}; meze[0] = 0; //Nultý prvek pole má nyní hodnotu 0 meze = new int[] {1, 10}; //Syntaktická chyba, hodnotu "meze" nelze měnit Prvkem pole může být hodnota libovolného typu včetně jiného pole v deklaraci typu pole se pak objeví několik párů závorek Počet závorek označuje tzv. rozměr pole Pro jednorozměrná pole se občas používá termín vektor int [][] dvojrozměrné; String[][][] trojrozměrné;
9 1.2.4 Pole jako objekt Pole jsou standardní objekty Javy, přímí potomci třídy Object Pole nedefinují žádné vlastní metody; ve svém portfoliu mají pouze metody zděděné od třídy Object Metody pro práci s poli jsou proto definovány v jiných, většinou knihovních třídách především ve třídě java.util.arrays Třída java.util.arrays obsahuje metody pro: Vyhledávání prvků pole, jejich seřazení, inicializace prvků zadanou hodnotou Porovnání celých polí a vytvoření jejich kopie (celých či jejich části) Vytvoření textového podpisu Vytvoření datovodu čerpajícího prvky z daného pole Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 9 z 43
10 1.2.5 Proměnný počet parametrů Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 10 z 43 Má-li nějaká metoda definován proměnný počet parametrů, předá se jí pole, jehož délka odpovídá počtu předaných parametrů Byla-li metoda volána bez parametrů, má pole délku 0, nicméně i s takovým polem se v programu občas setkáte Definice metody public static void main(string[] args) je a současně není stejná jako definice public static void main(string... args) Uvnitř těla metody na zvolené signatuře nezáleží, v obou případech pracujeme stejně Je li v programu definována metoda jedním z těchto způsobů, není již možno definovat její přetíženou verzi druhým způsobem překladač to považuje za syntaktickou chybu Na druhou stranu zvolím-li v rodiči jeden ze způsobů, je nutné jej dodržet i v potomku
11 1.3 Kolekce Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 11 z 43 Kontejnery, které mohou obecně měnit počet svých prvků, další požadavky se na ně nakladou Všechny kolekce instancemi tříd implementujících interfejs java.util.collection<e>, kde E je typ prvků ukládaných do kolekce Místo obecných kolekcí se většinou používají instance některého z jejích potomků tohoto interfejsu, protože díky upřesňujícím znalostem o daném potomku můžeme optimalizovat práci s jeho instancemi Interface Collection<E> je však přesto třeba znát, protože všichni jeho potomci používají metody, které od něj zdědili Kontrakt některých z deklarovaných metod připouští implementaci vyhazující UnsupportedOperationException
12 Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 12 z Přidání a odebrání prvků boolean add(e e) Přidá do kolekce zadaný prvek boolean addall(collection<? extends E> c) Přidá do kolekce všechny prvky zadané kolekce void clear() Vyprázdni kolekci boolean remove(object o) Odstraní zadaný objekt z kolekce a vrátí informaci, zda se kolekce změnila boolean removeall(collection<?> c) Odstraní z kolekce všechny prvky ze zadané kolekce; vrátí informaci, zda se tím změnila boolean retainall(collection<?> c) Ponechá v kolekci pouze prvky ze zadané kolekce; vrátí, zda se tím změnila default boolean removeif(predicate<? super E> filter) Vyjme z kolekce prvky, které odpovídají zadanému predikátu
13 Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 13 z Zjišťování obsahu a velikosti, iterace boolean contains(object o) Zjistí, zda kolekce obsahuje zadaný prvek boolean containsall(collection<?> c) Zjistí, zda kolekce obsahuje všechny prvky ze zadané kolekce boolean isempty() Zjistí, zda je kolekce prázdná int size() Vrátí počet prvků v kolekci default void foreach(consumer<? super T> action) S každým prvkem kolekce provede zadanou akci Iterator<E> iterator() Vrátí externí iterátor, který postupně zpřístupní prvky uložené v kolekci a umožní tak externímu programu s nimi něco provést. Znalost iterátorů je potřebná především pro analýzu starších programů současné programování dává před iterátory přednost datovodům, ale objevují se stále situace, kdy je iterátor výhodnější
14 Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 14 z Převody na pole a datovody Object[] toarray() Vrátí pole s prvky kolekce Object[] toarray(object[] a) Vrátí pole prvků zadaného typu s prvky kolekce; vejdou-li se do pole v parametru, vrátí toto pole, nevejdou-li se, vytvoří nové default Stream<E> stream() Vrátí datovod, který použije danou kolekci jako svůj zdroj dat default Stream<E> parallelstream() Vrátí paralelní datovod, který použije danou kolekci jako svůj zdroj dat
15 1.4 Množiny Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 15 z 43 Množina je kolekce, která připustí pouze jeden výskyt prvku v kolekci Při pokusu o druhé přidání téhož prvku se nestane nic, jenom přidávací metoda oznámí, že se množina nezměnila Množiny jsou definovány jako instance interfejsu java.util.set<e>, který je potomkem interfejsu Collection<E> Implementace množin v Javě vyžaduje: Ukládají-li se hodnotové objekty, musí být neměnné Ukládané objekty musí mít metody equals(object) a hashcode() definovány tak, aby dodržovaly vzájemný kontrakt Množina obecně neřeší pořadí prvků, ale existují i takové, kterým vysvětlíte, jak se pozná, který prvek je větší, a ony je při procházení dodávají seřazené dle velikosti
16 1.5 Seznamy Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 16 z 43 Seznam je kolekce prvků, u nichž je známé jejich pořadí Na rozdíl od množin není pořadí obecně závislé na nějakém pravidle, ale objekt, který žádá seznam o přidání prvku, může ovlivnit, kam se tento prvek v seznamu zařadí Oproti kolekci přidává metody, které pracují s pozicemi uložených prvků
17 Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 17 z Práce s prvky na dané pozici E get(int index) Vrátí prvek umístěný na zadané pozici (indexuje se od nuly) int indexof(object o) Vrátí index prvního výskytu zadaného prvku nebo -1 int lastindexof(object o) Vrátí index posledního výskytu zadaného prvku nebo -1 void add(int index, E element) Přidá zadaný prvek na zadanou pozici void addall(int index, Collection<? extends E> c) Na zadanou pozici a za ní přidá všechny prvky za zadané kolekce E remove(int index) Odebere prvek na zadané pozici, indexy jeho následovníků se sníží o 1 default void replaceall(unaryoperator<e> operator) Nahradí všechny prvky hodnotou získanou aplikací zadaného operátoru na daný prvek
18 Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 18 z Práce s celým seznamem ListIterator<E> listiterator() Vrátí iterátor, který rozšiřuje možnosti standardního iterátoru o funkce využívající znalosti pozice a sousedů aktuálního prvku List<E> sublist(int fromindex, int toindex) Vrátí seznam obsahující prvky v zadaném rozsahu indexů. Tento podseznam je pouze pohledem na původní seznam, takže všechny změny v původním seznamu se projeví i v onom pohledu default void sort(comparator<? super E> c) Seřadí prvky v seznamu podle pravidel zadaných v zadaném komparátoru
19 1.6 Fronty a dvojité fronty Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 19 z 43 Fronty byly dodatečně dodány do knihovny hlavně kvůli možnosti definovat fronty procesů čekajících na nějaký prostředek Fronta je sice ve skutečnosti seznam, ale předpokládá se, že se bude pracovat pouze s prvky na některém jejím konci na jednom konci budou přicházet čekající na druhém konci se budou odebírat obsluhovaní Dvojitá fronta (Dequeue) umožňuje, aby objekty mohly přicházet k oběma koncům a aby je také bylo možno obsluhovat na obou koncích fronty Dvojitá fronta se uplatní např. při realizaci zásobníku, u nějž se přidává i odebírá na stejném konci
20 1.7 Mapy (slovníky) Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 20 z 43 Mapy (slovníky) jsou kolekce (přesněji množiny) uspořádaných dvojic [klíč; hodnota] říkáme, že mapují klíč na hodnotu Mapy jsou definovány jako instance interfejsu java.util.map<k,v>, kde K označuje typ klíče (Key) a V typ jemu přiřazené hodnoty (Value) Každý klíč se smí v mapě vyskytnout pouze jednou, nicméně několika klíčům může být přiřazena shodná hodnota Dvojice uložené v mapě jsou instancemi interního interfejsu java.util.map.entry<k,v> Mapy jsem sice označil jako množiny uspořádaných dvojic, ale neřadíme je mezi kolekce, jsou to samostatné datové typy
21 Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 21 z Práce s jednotlivými prvky 1/2 boolean containskey(object key) Zjistí, zda mapa obsahuje hodnotu sdruženou se zadaným klíčem boolean containsvalue(object value) Zjistí, jestli existuje nějaký klíč, s nímž je sdružena zadaná hodnota V get(object key) Vrátí hodnotu sdruženou se zadaným klíčem default V getordefault(object key, V defaultvalue) Vrátí hodnotu sdruženou se zadaným klíčem, a pokud takový klíč v mapě není, vrátí zadanou implicitní hodnotu V put(k key, V value) Vloží do mapy zadanou dvojici [klíč; hodnota]. Pokud zadaný klíč již nějakou hodnotu přiřazenu měl, nahradí ji zadanou hodnotou a původní hodnotu vrátí. void putall(map<? extends K,? extends V> m) Vloží do mapy všechny dvojice z mapy zadané jako parametr
22 Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 22 z Práce s jednotlivými prvky 2/2 default V putifabsent(k key, V value) Neměl-li zadaný klíč ještě přiřazenu nenullovou hodnotu, přiřadí mu zadanou V remove(object key) Odebere dvojici se zadaným klíčem z mapy default boolean remove(object key, Object value) Je-li zadaný klíč mapován na zadanou hodnotu, odebere dvojici z mapy default V replace(k key, V value) Je-li již zadaný klíč mapován na nenullovou hodnotu, přiřadí mu hodnotu zadanou v parametru default boolean replace(k key, V oldvalue, V newvalue) Je-li již zadaný klíč mapován na hodnotu zadanou v parametru oldvalue, sdruží s ním hodnotu zadanou v parametru newvalue
23 Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 23 z Práce s celou mapou void clear() Vyčistí mapu = odebere z ní všechny uložené dvojice boolean isempty() Zjistí, jestli je mapa prázdná int size() Vrátí počet dvojic uložených v mapě Set<Map.Entry<K,V>> entryset() Vrátí množinu všech dvojic uložených v mapě Set<K> keyset() Vrátí množinu klíčů v mapě (klíče jsou jedinečné mohou být v množině) Collection<V> values() Vrátí kolekci všech hodnot v mapě (hodnoty nemusí být jedinečné kolekce) default void foreach(biconsumer<? super K,? super V> action) Aplikuje zadanou akci na všechny dvojice v mapě
24 1.8 Diagram tříd klíčové podmnožiny kolekcí Javy Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 24 z 43
25 2. Datovody Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 25 z 43 Obsah 2.1 Seznámení Motivace Obecná charakteristika Odchylky od kontejnerů Změna používaných iterátorů Analogie s výrobní linkou Typy operací s daty v datovodu: Vztah operací k datovodům 2.2 Operace s daty v datovodu Ukázka Filtrování obsahu datovodu Řazení objektů v datovodu Konverze prvků v datovodu 2.3 Možnosti získání datovodu Tovární metody pro generování datovodů
26 2.1 Seznámení Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 26 z 43 V OOP jsou pod termínem stream (proud) chápány objekty zprostředkovávající přenos dat od zdroje k cíli Zdrojem či cílem může být soubor, datovod (pipe), oblast paměti, objekt, Ve standardní knihovně Javy jsou takto pojímané proudy definovány jako potomci abstraktních tříd InputStream, OutputStream, Reader a Writer Funkcionální programování tento termín používá pro potenciálně nekonečné seznamy, které data neuchovávají, ale pouze o nich ví. Program definuje, jaká data se do proudu zařadí, resp. jak datovod ona data získá Nezávisle na tom se definuje, co se těmito daty bude dělat Proudy jsou ve své přirozenosti funkcionální, takže nemění data umístěná v proudu každé dato je za života proudu navštíveno jen jednou Většina operací je implementována jako odložené (lazy) Pro odlišení budeme funkcionální proudy označovat jako datovody
27 2.1.1 Motivace Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 27 z 43 Klasický postup: Opakovaně prováděj: požádej kontejner o další uloženou instance, zjisti, jestli patří mezi ty, které je třeba zpracovat, pokud ano tak instanci požadovaným způsobem zpracuj Nevýhody: Zbytečně se opakuje podobný kód V programu zpracovává jedna položka po druhé Trend: posilovat deklarativní přístup k programování Snaha moci vysvětlit co se má dělat a nechat na knihovně jak to udělá Umožníme tím specialistům navrhujícím knihovny optimalizovat řešení např. pro intenzivní využití paralelismu
28 2.1.2 Obecná charakteristika Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 28 z 43 Knihovny kolekcí a polí jsou staré, široce používané, a proto je nelze zásadně modifikovat Snaha použít přístup funkcionálního programování, kde jsou datovody chápány jako univerzální posloupnosti postupně zpřístupňovaných dat Datovod je klíčová abstrakce pro zpracování skupin dat umožňující specifikovat, co se má s daty dělat, a abstrahovat od toho, jak se to bude dělat Většina metod datovodů čte data z datovodu, zpracuje je a předává dalšímu datovodu, který pro ten účel vytvořila Ukázka sečti váhy červených udělátek v kolekci widgets int sum = widgets.stream().filter(b -> b.getcolor() == RED).mapToInt(b -> b.getweight()).sum();
29 2.1.3 Odchylky od kontejnerů Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 29 z 43 Datovody předem neblokují žádnou paměť pro zpracovávaná data Data přitékají datovodem k požadované operaci, která předá výsledek dalšímu datovodu, jenž data dopraví k další operaci Datovody se nezajímají o to, zda je vstup dat konečný či nekonečný, prostě převezmou zdrojová data a dopraví je k požadované operaci Operace se většinou hned neprovádí, ale pouze naplánují Odložené operace lazy operations Naplánované operace počkají si, až k nim datovod zpracovávaný objekt dopraví, a pak se o tento objekt postarají Datovod může rozdělit práci mezi několik pracovišť Je-li následující pracoviště zahlcené, může rozdělit přepravované objekty mezi několik paralelně fungujících pracovišť (procesorů), čímž se celková doba zpracování všech objektů (vstupních dat) výrazně zkrátí
30 2.1.4 Změna používaných iterátorů Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 30 z 43 Při práci s klasickými poli a kolekcemi se používají především externí (sekvenční) iterátory Program požádá kontejner o iterátor, který pak v cyklu žádá o další instanci, s níž provede požadovanou operaci Při práci s datovody využíváme interní (dávkové) iterátory provádějící s iterovanými objekty operace definované lambda-výrazy Výhody: Z programu zmizí pomocný kód, který měl na starosti řízení iterací, (tj. popis jak to dělat) a zpřehlední se tak popis akcí, které budou popisovat, co se zpracovávanými objekty udělat Objeví-li se v budoucnu nějaké propracovanější techniky paralelizace prováděných činností, není třeba upravovat část programu řešící aplikační logiku, ale stačí pouze vylepšit knihovnu datovodů a tím se automaticky zefektivní zpracování programů, které tyto datovody využívají
31 Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 31 z Analogie s výrobní linkou Na počátku je vstup V případě výrobního pásu je to sklad dílů, nebo nějak zabezpečený přísun vstupních surovin od dodavatele V případě datovodu to bude zdroj dat většinou nějaký zdrojový kontejner, zdrojem ale může být i generátor, který vytváří data na požádání Pracoviště Podél výrobního pásu jsou připravená pracoviště, na nichž zaškolení dělníci provádějí jednotlivé operace V případě datovodu nahradíme dělníky metodami (přesněji lambda výrazy), které s přišedším objektem provedou požadovanou operaci a vypustí jej do dalšího datovodu, kde pokračuje k dalšímu pracovišti Výsledky Na konci výrobního pásu vypadne hotový výrobek Na konci série operací s daty posílanými datovody obdržíme (doufejme ) požadovaný výsledek
32 2.1.6 Typy operací s daty v datovodu: Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 32 z 43 Filtrace Např. při procházení souborů na disku mne zajímají jen ty s danou příponou Mapování (konverze) Z přišedšího objektu mne zajímá jen hodnota jednoho atributu do výstupního datovodu odchází ona Řazení Pro další zpracování potřebuji mít data definovaným způsobem seřazena Souhrny (reduction, folding) Na přitékajících datech mne zajímá pouze nějaká souhrnná informace průměr, součet, Sdružování (mutable reduction) Zpracovaná data vkládám do nějakého kontejneru (kolekce, pole, )
33 2.1.7 Vztah operací k datovodům Vrácený datovod nemusí být shodný se vstupním Když má operace např. zjistit počet znaků v řetězci, je vstupním datovodem datovod textových řetězců (stringů) a výstupním datovodem datovod celých čísel V případě potřeby může mít výstupní datovod jinak uspořádaná data než datovod vstupní Operace nejsou nijak ovlivněny tím, zda je vstup dat konečný (klasický kontejner), nebo nekonečný Data prostě přitékají a co přiteče, to se zpracuje, a čeká se na další Operace nejsou svázány s konkrétním datovodem; program může postupně vytvářet různé datovody, na jejichž data pošle danou sadu operací Jednou může být zdrojem dat kolekce, jindy generátor apod. Operace pouze vědí, že data přijdou, ony je mají zpracovat a někam poslat Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 33 z 43
34 2.2 Operace s daty v datovodu Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 34 z 43 Průběžné (intermediate) Vytvoří si vlastní (výstupní) datovod Ze vstupního datovodu převezmou objekt, zpracují jej, a předají do svého výstupního datovodu Vracejí datovod, takže je lze jednoduše zřetězit Nevracejí datovod, jehož jsou instancí, ale svůj výstupní datovod => nelze obecně zavolat průběžnou metodu, aniž bychom si zapamatovali datovod, který nám vrátí a jehož metodu pak musíme v dalším kroku oslovit Koncové (terminal) Zakončují činnost datovodu a předávají výsledek okolnímu programu Výstupní hodnotou může být kolekce, objekt, ale také nic
35 Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 35 z Ukázka /*************************************************************************** * Zabezpečí, aby každé světlo na zhaslo, bliklo a opět se rozsvítilo. * To, jestli budou světla pracovat postupně nebo všechna najednou, * záleží na typu datovodu. */ private void streamblink(stream<light> stream, String text) { //Akci, kterou budu chtít zadat vícekrát, si připravím a uložím Consumer<Light> pause = (o)->io.pause(500); //Zapamatuje si datovod vrácený poslední průběžnou operací stream = stream //Diktuji operace, které se budou v datovodu postupně provádět.peek(light::switchoff).peek(pause).peek(light::blink).peek(pause).peek(light::switchon); //Zatím se nic nedělo, dít se začne až při provádění terminální akce long count = stream.count(); IO.inform(text + "\n\nblikalo: " + count); } //Testy výše uvedené metody
36 Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 36 z public void setup() { lightxys = new Light( 0, 0, 100); lightxy = new Light(100, 50); lightxyc = new Light( 50, 100, NamedColor.RED); lightxysc = new Light(100, 100, 100, NamedColor.GREEN); lightsarr = new Light[] {lightxy, lightxyc, lightxys, lightxysc}; lightscol = Arrays.asList(lightsArr); public void testgroupblink() { Stream<Light> stream = Arrays.stream(lightsArr); //lightscol.stream(); streamblink(stream, "testgroupblink"); public void testgroupblinkparallel(){ Stream<Light> stream = lightscol.parallelstream(); //Arrays.stream(lightsArr).parallel(); streamblink(stream, "testgroupblinkparallel"); }
37 Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 37 z 43 Pokud bychom nechtěli ukázat, že akce se spouští až při zavolání koncové metody, mohli bychom použít test ve tvaru private void streamblinkfe(stream<light> stream) { //Akci, kterou budu chtít zadat vícekrát, si připravím a uložím Runnable pause = ()->IO.pause(500); //Zapamatuje si datovod vrácený poslední průběžnou operací stream.foreach((light x) -> { x.switchoff(); pause.run(); x.blink(); pause.run(); x.blink(); pause.run(); x.blink(); pause.run(); x.switchon(); }); public void testgroupblinkfe() { Stream<Light> stream = lights.stream(); streamblinkfe(stream); }
38 2.2.2 Filtrování obsahu datovodu Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 38 z 43 Obsah datovodu můžeme během práce filtrovat použitím metody Stream<T> filter(predicate<? super T> predicate) /************************************************************************** * Začlení světla do paralelního datovodu, odfiltruje ta, co nejsou žlutá, * a ta zbylá (tj. ta žlutá) nechá společně zablikat. public void testyellowblink() { Stream<Light> stream = lightscol.parallelstream(); stream = stream.filter((light) -> light.getcolor().equals(namedcolor.yellow)); streamblink(stream, "testyellowblinkd"); }
39 2.2.3 Řazení objektů v datovodu Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 39 z 43 K zadání akce přeuspořádavající daný datovod slouží metody Stream<T> sorted() Stream<T> sorted(comparator<? super T> comparator) /************************************************************************** * Začlení světla do sériového datovodu, seřadí je v něm podle vodorovné * souřadnice a nechá je v tomto pořadí postupně zablikat. public void testxsortedblink() { Stream<Light> stream = lights.stream(); stream = stream.sorted((first, second) -> first.getposition().x - second.getposition().x); streamblink(stream); }
40 Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 40 z Konverze prvků v datovodu Prvek, který do datovodu nastoupil, doposud procházel jednotlivými zastávkami, dokud činnost datovodu neskončila Datovody však umožňují vyměnit cestou druh prvků, s nimiž pracují prostřednictvím některé z metod: <R> Stream<R> map(function<? super T,? extends R> mapper) DoubleStream maptodouble(todoublefunction<? super T> mapper) IntStream maptoint (ToIntFunction <? super T> mapper) LongStream maptolong (ToLongFunction <? super T> mapper) public static void createanddrive(ivehiclefactory vehiclefactory, String directions, Position... positions) { Arrays.stream(positions).parallel().map(vehicleFactory::newVehicle) //Převede pozice na vozidla.peek((vehicle) -> {CM.add(vehicle);}).forEach(goInDirections(directions)); }
41 2.3 Možnosti získání datovodu Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 41 z 43 Z kolekcí prostřednictvím metod stream() a parallelstream() Z polí prostřednictvím metody Arrays.stream(Object[]) Řádky souboru lze získat metodou BufferedReader.lines() Datovod souborů na zadané cestě (java.nio.file.path) lze získat metodami třídy java.nio.file.files Datovod náhodných čísel lze získat metodou Random.ints() Datovod položek v ZIP-souboru lze získat metodou JarFile.stream() Datovod částí sekvence znaků lze získat voláním statické metody Pattern.splitAsStream(java.lang.CharSequence) Datovod indexů nastavených položek lze získat voláním BitSet.stream()
42 2.3.1 Tovární metody pro generování datovodů Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 42 z 43 Třída Stream nabízí navíc metody, s jejichž pomocí lze definovat generátory datovodů zadaným způsobem vytvořených objektů static <T> Stream<T> of(t... values) Vytvoří datovod zadaných hodnot static <T> Stream<T> iterate(t seed, UnaryOperator<T> f) Vytvoří nekonečný seřazený datovod, jehož počáteční prvek je tvořen semenem seed a následující prvky jsou vytvářeny aplikací operátoru f na předchozí prvek static <T> Stream<T> generate(supplier<t> s) Vytvoří nekonečný datovod, jehož prvky jsou výsledkem volání s IntStream range(int, int) Třída IntStream umí vytvořit datovod celých čísel ze zadaného intervalu
43 3. KONEC Copyright Rudolf Pecinovský, Soubor: 11_Kontejnery a datovody.doc, verze , uloženo st :33 43 z 43 Zdroje:
Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí
Kolekce obecně Seznamy a iterátory doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Kolekce ::= homogenní sada prvků
Úvod do programovacích jazyků (Java)
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích
Výčtový typ strana 67
Výčtový typ strana 67 8. Výčtový typ V této kapitole si ukážeme, jak implementovat v Javě statické seznamy konstant (hodnot). Příkladem mohou být dny v týdnu, měsíce v roce, planety obíhající kolem slunce
Principy objektově orientovaného programování
Principy objektově orientovaného programování Třídy a objekty doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz C E T
7. Dynamické datové struktury
7. Dynamické datové struktury Java poskytuje několik možností pro uložení většího množství dat (tj. objektů či primitivních datových typů) v paměti. S nejjednodušší z nich, s polem, jsme se již seznámili.
Java a XML. 10/26/09 1/7 Java a XML
Java a XML Java i XML jsou přenositelné V javě existuje podpora pro práci s XML, nejčastější akce prováděné při zpracování XML: načítání XML elementů generování nových elementů nebo úprava starého zápis
PŘETĚŽOVÁNÍ OPERÁTORŮ
PŘETĚŽOVÁNÍ OPERÁTORŮ Jazyk C# podobně jako jazyk C++ umožňuje přetěžovat operátory, tj. rozšířit definice některých standardních operátorů na uživatelem definované typy (třídy a struktury). Stejně jako
Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín
Kolekce ArrayList napsal Pajclín Tento článek jsem se rozhodl věnovat kolekci ArrayList, protože je to jedna z nejpoužívanějších. Tento článek není kompletním popisem třídy ArrayList, ale budu se snažit
typová konverze typová inference
Seminář Java Programování v Javě II Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Programování v Javě (2) 1/ 36 Téma přednášky Rozhraní: použití, dědičnost Hierarchie
Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace
Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace Předmět: Vývoj aplikací Téma: Pole Vyučující: Ing. Milan Káža Třída: EK3 Hodina: 14 Číslo: V/5 Programování v jazyce
14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.
Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání
Teoretické minimum z PJV
Teoretické minimum z PJV Pozn.: následující text popisuje vlastnosti jazyka Java zjednodušeně pouze pro potřeby výuky. Třída Zavádí se v programu deklarací třídy což je část programu od klíčových slov
Algoritmizace a programování
Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu
11.5.2012. 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
Obsah přednášky 9 Základy programování (IZAPR, IZKPR) Přednáška 9 Základy dědičnosti, přístupová práva Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií
Programování v Javě I. Leden 2008
Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Leden 2008 Radek Kočí Seminář Java Programování v Javě (1) 1/ 45 Téma přednášky Datové typy Deklarace třídy Modifikátory
Úvod do programování - Java. Cvičení č.4
Úvod do programování - Java Cvičení č.4 1 Sekvence (posloupnost) Sekvence je tvořena posloupností jednoho nebo více příkazů, které se provádějí v pevně daném pořadí. Příkaz se začne provádět až po ukončení
Datové struktury. alg12 1
Datové struktury Jedna z klasických knih o programování (autor prof. Wirth) má název Algorithms + Data structures = Programs Datová struktura je množina dat (prvků, složek, datových objektů), pro kterou
7 Formátovaný výstup, třídy, objekty, pole, chyby v programech
7 Formátovaný výstup, třídy, objekty, pole, chyby v programech Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost formátovanému výstupu,
Algoritmizace prostorových úloh
INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Datové struktury Daniela Szturcová
Kolekce, cyklus foreach
Kolekce, cyklus foreach Jen informativně Kolekce = seskupení prvků (objektů) Jednu již známe pole (Array) Kolekce v C# = třída, která implementuje IEnumerable (ICollection) Cyklus foreach ArrayList pro
PB161 Programování v jazyce C++ Přednáška 7
PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z
Programování v Javě I. Únor 2009
Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Únor 2009 Radek Kočí Seminář Java Programování v Javě (1) 1/ 44 Téma přednášky Datové typy Deklarace třídy Modifikátory
přetížení operátorů (o)
přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - deklarace pomocí funkčního
PB161 Programování v jazyce C++ Přednáška 7
PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z
9 - Map/filter/reduce OMO. Ing. David Kadleček, PhD
9 - Map/filter/reduce OMO Ing. David Kadleček, PhD kadlecd@fel.cvut.cz, david.kadlecek@cz.ibm.com 1 Map/filter/reduce v Java Map/filter/reduce v Java = Java 1.8 streams API Funkcionální přístup (řetězíme
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Konstruktory a destruktory
Konstruktory a destruktory Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat,
Více o konstruktorech a destruktorech
Více o konstruktorech a destruktorech Více o konstruktorech a o přiřazení... inicializovat objekt lze i pomocí jiného objektu lze provést přiřazení mezi objekty v původním C nebylo možné provést přiřazení
1. Dědičnost a polymorfismus
1. Dědičnost a polymorfismus Cíl látky Cílem této kapitoly je představit klíčové pojmy dědičnosti a polymorfismu. Předtím však je nutné se seznámit se základními pojmy zobecnění neboli generalizace. Komentář
Algoritmizace prostorových úloh
INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Datové struktury Daniela Szturcová
Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!
Java práce s řetězci Trochu povídání.. Řetězce jsou v Javě reprezentovány instancemi tříd StringBuffer a String. Tyto třídy jsou součástí balíčku java.lang, tudíž je možno s nimi pracovat ihned bez nutného
1. Programování proti rozhraní
1. Programování proti rozhraní Cíl látky Cílem tohoto bloku je seznámení se s jednou z nejdůležitější programátorskou technikou v objektově orientovaném programování. Tou technikou je využívaní rozhraní
IRAE 07/08 Přednáška č. 1
Úvod do předmětu OOP Objekt Proč OOP? Literatura, osnova předmětu viz. cvičení Základní prvek OOP sw inženýrství = model reálných objektů (věcí) člověk, auto, okno (ve windows), slovník, = model abstraktní
PREPROCESOR POKRAČOVÁNÍ
PREPROCESOR POKRAČOVÁNÍ Chybová hlášení V C# podobně jako v C++ existuje direktiva #error, která způsobí vypsání chybového hlášení překladačem a zastavení překladu. jazyk C# navíc nabízí direktivu #warning,
7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd
7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd Algoritmizace (Y36ALG), Šumperk - 7. přednáška 1 Třída jako zdroj funkcionality Třída v jazyku Java je programová jednotka tvořená
IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);
Pole (array) Motivace Častá úloha práce s větším množstvím dat stejného typu o Př.: průměrná teplota za týden a odchylka od průměru v jednotlivých dnech Console.Write("Zadej T pro.den: "); double t = Double.Parse(Console.ReadLine());
Programování v C++ 1, 5. cvičení
Programování v C++ 1, 5. cvičení konstruktory, nevirtuální dědění 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 3 Shrnutí minule procvičené
Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy
Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Procesor Procesorem je objekt, který vykonává algoritmem popisovanou
Generické programování
Generické programování Od C# verze 2.0 = vytváření kódu s obecným datovým typem Příklad generická metoda, zamění dva parametry: static void Swap(ref T p1, ref T p2) T temp; temp = p1; p1 = p2; p2 =
Abstraktní datové typy: zásobník
Abstraktní datové typy: zásobník doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Abstraktní datové typy omezené rozhraní
JAVA. java.lang.stringbuffer java.lang.stringbuilder
JAVA java.lang.stringbuffer java.lang.stringbuilder 1 Přehled "měnitelný" řetězec instance třídy String jsou neměnitelné nejsou potomky String String, StringBuffer, StringBuilder jsou final StringBuffer
Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++
Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++ Globální konstantní proměnné Konstantní proměnné specifikujeme s klíčovým slovem const, tyto konstantní proměné
Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody
Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Dynamická alokace paměti Jazyky C a C++ poskytují programu možnost vyžádat si část volné operační paměti pro
Quo vadis programování? Automatizace vyhodnocování studentských úloh
Vaše jistota na trhu IT Quo vadis programování? Automatizace vyhodnocování studentských úloh Rudolf PECINOVSKÝ rudolf@pecinovsky.cz Vladimír Oraný vladimir.orany@gmail.com Vaše jistota na trhu IT Obsah
Základy objektové orientace I. Únor 2010
Seminář Java Základy objektové orientace I Radek Kočí Fakulta informačních technologií VUT Únor 2010 Radek Kočí Seminář Java Základy OO (1) 1/ 20 Téma přednášky Charakteristika objektově orientovaných
Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo
Statické proměnné a metody Tomáš Pitner, upravil Marek Šabo Úvod Se statickou metodou jsme se setkali už u úplně prvního programu - Hello, world! public class Demo { public static void main(string[] args)
Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky
JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance
Návrh softwarových systém. Návrh softwarových systémů
Návrh softwarových systém ů - Java 8 Jiří Šebek Návrh softwarových systémů (B6B36NSS) Co je nového? Default interface methods Lambda expressions Method references and repeatable annotations Streams Functional
Šablony, kontejnery a iterátory
11. března 2015, Brno Připravil: David Procházka Šablony, kontejnery a iterátory Programovací jazyk C++ Šablony Strana 2 / 31 Obsah přednášky 1 Šablony 2 Abstraktní datové struktury 3 Iterátory 4 Array
Metodika. Architecture First. Rudolf Pecinovský rudolf@pecinovsky.cz
Copyright Rudolf Pecinovský, Soubor: 2014_Comm_PrW_Architecture First Methodology.doc, verze 1.00.2413, uloženo po 9.6.2014 14:43 1 z 39 Metodika Architecture First Rudolf Pecinovský rudolf@pecinovsky.cz
Bridge. Známý jako. Účel. Použitelnost. Handle/Body
Bridge Bridge Známý jako Handle/Body Účel odděluje abstrakci (rozhraní a jeho sémantiku) od její konkrétní implementace předchází zbytečnému nárůstu počtu tříd při přidávání implementací používá se v době
Programování v C++ 2, 4. cvičení
Programování v C++ 2, 4. cvičení statické atributy a metody, konstruktory 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Přístupová práva
TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);
TŘÍDY POKRAČOVÁNÍ Události pokračování public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e); class Bod private int x; private int y; public event ZmenaSouradnicEventHandler ZmenaSouradnic;
Paměť počítače. alg2 1
Paměť počítače Výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače Data jsou v paměti reprezentována posloupnostmi bitů (bit = 0 nebo 1) Připomeňme: paměť je tvořena řadou 8-mi bitových
Pole a kolekce. v C#, Javě a C++
Pole a kolekce v C#, Javě a C++ C# Deklarace pole typ_prvku_pole[] jmeno_pole; Vytvoření pole jmeno_pole = new typ_prvku_pole[pocet_prvku_pole]; Inicializace pole double[] poled = 4.8, 8.2, 7.3, 8.0; Java
Šablony, kontejnery a iterátory
7. října 2010, Brno Připravil: David Procházka Šablony, kontejnery a iterátory Programovací jazyk C++ Šablony Strana 2 / 21 Šablona funkce/metody Šablona je obecný popis (třídy, funkce) bez toho, že by
7. Datové typy v Javě
7. Datové typy v Javě Primitivní vs. objektové typy Kategorie primitivních typů: integrální, boolean, čísla s pohyblivou řádovou čárkou Pole: deklarace, vytvoření, naplnění, přístup k prvkům, rozsah indexů
Pointery II. Jan Hnilica Počítačové modelování 17
Pointery II 1 Pointery a pole Dosavadní způsob práce s poli zahrnoval: definici pole jakožto kolekce proměnných (prvků) jednoho typu, umístěných v paměti za sebou int pole[10]; práci s jednotlivými prvky
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci
Základy programovaní 4 (Java) Stream API Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci Petr Krajča (UP) KMI/ZP4JV 5. listopad, 2014 1 / 10 Stream API Java 8 nový přístup k práci s kolekcemi
Jazyk C# (seminář 3)
Jazyk C# (seminář 3) Pavel Procházka KMI 15. října 2014 Motivace Představme si problém, jak napsat seznam v C# class IntList{... int value; public void IntList( int val, List next ){... V čem je to nevýhodné?
Vector datový kontejner v C++.
Vector datový kontejner v C++. Jedná se o datový kontejner z knihovny STL jazyka C++. Vektor je šablona jednorozměrného pole. Na rozdíl od "klasického" pole má vector, mnoho užitečných vlastností a služeb.
Programování v C++, 2. cvičení
Programování v C++, 2. cvičení 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 Operátory new a delete 2 3 Operátory new a delete minule
Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole
Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole Příkaz switch Příkaz switch provede příslušnou skupinu příkazů na základě hodnoty proměnné (celočíselné
Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++
Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++ Třídy v C++ Třídy jsou uživatelsky definované typy podobné strukturám v C, kromě datových položek (proměnných) však mohou obsahovat i funkce
Jazyk C# (seminář 6)
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í
11 Diagram tříd, asociace, dědičnost, abstraktní třídy
11 Diagram tříd, asociace, dědičnost, abstraktní třídy Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost diagramům tříd, asociaci,
Programování v C++ 3, 3. cvičení
Programování v C++ 3, 3. cvičení úvod do objektově orientovaného programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Dokončení spojového
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Lambda-výrazy a metody implementované v interfejsu
Copyright Rudolf Pecinovský, Soubor: 09_Lambda_vyrazy.doc, verze 1.00.2413, uloženo po 10.11.2014 16:32 1 z 54 Lambda-výrazy a metody implementované v interfejsu Pecinovský rudolf@pecinovsky.cz Copyright
Lambda funkce Novinky v interfaces Streamy Optional - aneb zbavujeme se null. Java 8. Ondřej Hrstka
Java 8 Ondřej Hrstka Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 13 A0B36PR2 Programování 2 Ondřej Hrstka, 2015 A0B36PR2 Přednáška 13: Java 8 1 / 26 Obsah Lambda
3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda
1. Lze vždy z tzv. instanční třídy vytvořit objekt? 2. Co je nejčastější příčinou vzniku chyb? A. Specifikace B. Testování C. Návrh D. Analýza E. Kódování 3. Je defenzivní programování technikou skrývání
Pokud neuvedeme override, vznikne v synu nová (nevirtuální) metoda (a pochopitelně se nezavolá, jak bychom
Poznámky k virtuálním metodám aneb co když zkoušíme překladač zlobit... Pokud neuvedeme override, vznikne v synu nová (nevirtuální) metoda (a pochopitelně se nezavolá, jak bychom chtěli). Pokud neuvedeme
Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:
Čtvrtek 8 prosince Pascal - opakování základů Struktura programu: 1 hlavička obsahuje název programu, použité programové jednotky (knihovny), definice konstant, deklarace proměnných, všechny použité procedury
Copyright Rudolf Pecinovský, Soubor: 02_Rozhraní x Interfejs.doc, verze 1.00.2413, uloženo čt 9.10.2014 12:44 1z 55. Rozhraní. interface (interfejs)
Copyright Rudolf Pecinovský, Soubor: 02_Rozhraní x Interfejs.doc, verze 1.00.2413, uloženo čt 9.10.2014 12:44 1z 55 Rozhraní interface (interfejs) Obsah Copyright Rudolf Pecinovský, Soubor: 02_Rozhraní
Vyřešené teoretické otázky do OOP ( )
Vyřešené teoretické otázky do OOP (16. 1. 2013) 1) Vyjmenujte v historickém pořadí hlavní programovací paradigmata a stručně charakterizujte každé paradigma. a) Naivní chaotičnost, špatná syntaxe a sémantika
Vaše jistota na trhu IT. Balíčky. Rudolf Pecinovský rudolf@pecinovsky.cz
Vaše jistota na trhu IT Balíčky Rudolf Pecinovský rudolf@pecinovsky.cz Problémy velkých aplikací Rozsáhlé aplikace používají velké množství názvů objektů a jejich zpráv, které různé části programu sdílí
Výčtové typy a kolekce v Javě, generické typy
Výčtové typy a kolekce v Javě, generické typy Jiří Vokřínek Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 3 B0B36PJV Programování v JAVA Jan Faigl, Jiří Vokřínek,
Výčtové typy Kolekce a JFC Iterátory Přehled JFC Generické typy
Obsah přednášky Výčtové typy a kolekce v Javě, generické typy Jiří Vokřínek Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 3 B0B36PJV Programování v JAVA Výčtové
Výčtové typy Kolekce a JFC Iterátory Přehled JFC Generické typy Příklad - Spojový seznam
Obsah přednášky Výčtové typy a kolekce v Javě, generické typy Jiří Vokřínek Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 3 B0B36PJV Programování v JAVA Výčtové
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
ČÁST 1. Zahřívací kolo. Co je a k čemu je návrhový vzor 33
Stručný obsah Část 1: Zahřívací kolo Kapitola 1 Co je a k čemu je návrhový vzor 33 Kapitola 2 Zásady objektově orientovaného programování 39 Kapitola 3 Co konstruktor neumí (Jednoduchá tovární metoda Simple
Výčtové typy a kolekce v Javě, generické typy
Výčtové typy a kolekce v Javě, generické typy Jiří Vokřínek Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 3 B0B36PJV Programování v JAVA Jan Faigl, Jiří Vokřínek,
III/2 Inovace a zkvalitnění výuky prostřednictvím ICT
Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Jazyk Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět Cílová skupina (ročník) Úroveň
Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39
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
Základní datové struktury
Základní datové struktury Martin Trnečka Katedra informatiky, Přírodovědecká fakulta Univerzita Palackého v Olomouci 4. listopadu 2013 Martin Trnečka (UPOL) Algoritmická matematika 1 4. listopadu 2013
Algoritmizace a programování
Algoritmizace a programování Typy Základní (primitivní) datové typy Deklarace Verze pro akademický rok 2012/2013 1 Typy v jazyce Java Základní datové typy (primitivní datové typy) Celočíselné byte, short,
EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI
EVROPSKÝ SOCIÁLNÍ FOND Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI Úvod do PHP PHP Personal Home Page Hypertext Preprocessor jazyk na tvorbu dokumentů přípona: *.php skript je součást HTML stránky!
Mělká a hluboká kopie
Karel Müller, Josef Vogel (ČVUT FIT) Mělká a hluboká kopie BI-PA2, 2011, Přednáška 5 1/28 Mělká a hluboká kopie Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky, Fakulta
SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ
SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ Vstupy a výstupy pokračování Kódování textů Texty (řetězce nebo znaky) v jazyce C# jsou v paměti uloženy v kódování označovaném běžně Unicode (kódová stránka 1200).
PB161 Programování v jazyce C++ Přednáška 9
PB161 Programování v jazyce C++ Přednáška 9 Právo friend Přetěžování operátorů Nikola Beneš 16. listopadu 2015 PB161 přednáška 9: friend, přetěžování operátorů 16. listopadu 2015 1 / 30 Reklama PB173 Tematicky
Iterator & for cyklus
Iterator & for cyklus for (Object o : foo) funguje pokud je foo pole nebo je foo iterovatelné jako to zařídit? implementovat interface java.lang.iterable Iterable má jednu metodu java.util.iterator iterator()
Z. Kotala, P. Toman: Java ( Obsah )
Z. Kotala, P. Toman: Java ( Obsah ) 13. Výjimky Výjimka (exception) je definována jako událost, která nastane během provádění programu a která naruší normální běh instrukcí. Výjimka je vyvolána například
Soubor jako posloupnost bytů
Soubory Soubor je množina údajů uložená ve vnější paměti počítače, obvykle na disku Pro soubor jsou typické tyto operace. otevření souboru čtení údaje zápis údaje uzavření souboru Přístup k údajům (čtení
20. Projekt Domácí mediotéka
Projekt Domácí mediotéka strana 211 20. Projekt Domácí mediotéka 20.1. Základní popis, zadání úkolu V projektu Domácí mediotéka (Dome) se jednoduchým způsobem evidují CD a videa. Projekt je velmi jednoduchý
Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu
Seminář Java Zavádění tříd Radek Kočí Fakulta informačních technologií VUT Duben 2008 Radek Kočí Seminář Java Zavádění tříd 1/ 16 JVM zavádí třídy dynamicky Class loader objekt schopný zavádět třídy abstraktní
Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.
Obsah přednášky: Definice pojmů o datový typ, o abstraktní datový typ Datové struktury Abstraktní datové typy a jejich implementace o Fronta (Queue) o Zásobník (Stack) o Množina (Set) Algoritmizace (Y36ALG),
MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ
MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ 1) PROGRAM, ZDROJOVÝ KÓD, PŘEKLAD PROGRAMU 3 2) HISTORIE TVORBY PROGRAMŮ 3 3) SYNTAXE A SÉMANTIKA 3 4) SPECIFIKACE
Parametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics
1 Parametrizované třídy Generics generické třídy JDK zavádí mimo jiné tzv. parametrizované třídy - generics Úvod 2 podobnost se šablonami (templates) z C++ nejčastěji použité v oblasti knihoven kontejnerového
6. Problém typové anonymity prvků v kolekci Sjednocení typově rozdílných prvků pomocí rozhraní Kolekce pro jeden typ prvků...
Obsah 5 Obsah Úvod 11 Jak tato kniha vznikla... 11 Co můžete od knížky očekávat... 12 Jak jsou organizovány programy... 13 Poděkování... 14 Kde hledat nejnovější informace... 14 Typografické a syntaktické