Dynamické programovací jazyky Groovy

Rozměr: px
Začít zobrazení ze stránky:

Download "Dynamické programovací jazyky Groovy"

Transkript

1 Groovy.doc, verze , uloženo po :45 1 z 133 Dynamické programovací jazyky Groovy Mnohé příklady jsou převzaty z knihy Groovy in Action a nebo jsou touto knihou silně inspirovány

2 Groovy.doc, verze , uloženo po :45 2 z 133 Obsah 1. Předehra: Java Groovy 2. Groovy rychlý úvod do jazyka 3. Hlubší pohled na práci s daty 4. Uzávěry 5. Dynamická podstata jazyka 6. KONEC Je potřeba prověřit: V programu nefunguje V programu zlobí příkaz def (small, big) = list.split { it < 2 }

3 Groovy.doc, verze , uloženo po :45 3 z Předehra: Java Groovy Obsah 1.1 Proč nový jazyk 1.2 Dynamické jazyky charakteristika 1.3 Skriptovací jazyky 1.4 Koncepce jazyka Groovy 1.5 Dva způsoby zavedení třídy 1.6 Přehled vlastnosti jazyka Groovy 1.7 Jak Groovy získat 1.8 Co Groovy od Javy přebírá 1.9 Základní zjednodušení Skripty Podmínky Sjednocení způsobů zjištění počtu prvků v kontejneru 1.10 Co dalšího je jinak 1.11 Co Java má a Groovy (zatím) ne

4 Groovy.doc, verze , uloženo po :45 4 z Proč nový jazyk Hodně se hovoří o tzv. dynamických jazycích, které jsou populární zejména mezi začínajícími programátory Jejich zastánci si občas nepřipouštějí jejich nevýhody Nemožnost automatické refaktorace Omezená hlídání překladače, které programátoři zapomínají vyvažovat testy Dynamicky charakter jazyka vyžaduje jistou režii, která výsledný program výrazně zpomaluje (v závislosti na aktuálních operacích 4 až 20 ) Velké tlaky na úpravu (= zdynamičtění) Javy Takovéto úpravy však jazyk zbytečně nafukují a přitom zeslabují jeho robustnost Při zařazování nových funkcí se často objevují závažné problémy se zpětnou kompatibilitou Pro programování však není důležitý jazyk, ale platforma => bylo by vhodné vybudovat na danou platformou jazyk, který by: Podporoval nově se prosazující programovací techniky Bezproblémově spolupracoval s doposud vyvinutými programy Existuje řada nejrůznějších jazyků postavených nad platformou Java stačí navrhnout syntaxi a překladač i knihovnu poskytne platforma Ceylon, Closure, Groovy, JRuby, Jython, Scala,

5 Groovy.doc, verze , uloženo po :45 5 z Dynamické jazyky charakteristika Dynamické jazyky nabízejí možnost provádět za běhu operace, které statické jazyky umožňují pouze v době překladu Měnit strukturu objektů Upravovat definice datových typů, např. přidávat atributy a metody Modifikovat chování objektů změnou definice těla metody Spouštět části programu definované až za běhu Definice dynamických jazyků není jednoznačná, protože se snaží rozlišovat mezi kódem a daty a mezi dobou překladu programu a dobou jeho běhu Virtuální stroje, just-in-time překlad a schopnosti některých jazyků modifikovat kód programu za běhu činí toto dělením poněkud abstraktním Míra dynamičnosti jazyka se proto většinou odvozuje od snadnosti, s jakou je možno realizovat výše zmíněné operace Řada lidí zaměňuje dynamické jazyky s dynamicky typovanými jazyky Podrobnosti o dynamickém typování viz pasáž Dynamické typování Podrobnosti o dynamické podstatě Groovy viz pasáž 5. Dynamická podstata jazyka

6 Groovy.doc, verze , uloženo po :45 6 z Skriptovací jazyky Jako skriptovací jazyk označíme (většinou) interpretovaný programovací jazyk sloužící k ovládání jiných aplikací Skriptovací jazyky dělíme do dvou skupin Jazyky se zabudovanou podporou v operačním systému, která umožňuje v tomto jazyce přímo zadávat příkazy operačnímu systému (např. VBScript, JScript) Jazyky ovládající vyhrazenou aplikaci či skupinu aplikací (např. JavaScript) Podpora skriptovacích jazyků v operačním systému může být několika druhů Je definována speciální aplikace, která po spuštění umožní zapisovat příkazy jazyka přímo z konzoly Operační systém akceptuje zdrojový kód v daném jazyku jako spustitelný program (= skript), přičemž po spuštění tohoto programu spustí OS příslušný interpret, který zadaný program přímo interpretuje Některé jazyky se současně používají jako skriptovací a univerzální jedny (např. Perl) vznikly původně jako skriptovací a časem se rozšířily na univerzální, jiné (např. Lisp) vznikly původně jako univerzální a časem vznikly jejich dialekty používané jako skriptovací (AutoLisp, ECMALisp), další (např. Groovy) byly od samého začátku navrženy pro obě použití

7 Groovy.doc, verze , uloženo po :45 7 z Koncepce jazyka Groovy Jazyk běží nad virtuálním strojem Javy a používá knihovnu Javy, virtuální stroj nerozpozná, jestli byla třída napsaná v Javě nebo v Groovy Program může sestávat mixu z tříd napsaných v Javě a v Groovy Syntaxe Groovy je maximálně shodná s Javou, takže v optimálním případě je možno změnit jazyk pouhou změnou přípony zdrojového souboru To výrazně usnadňuje přijetí jazyka programátory pracujícími v Javě Groovy je plnohodnotný dynamický jazyk s vlastnostmi inspirovanými jazyky Smalltalk, Python, Dylan, Ruby, Perl Groovy se snaží maximalizovat své vyjadřovací schopnosti a současně podobnost své syntaxe s Javou Autoři chtěli navíc vytvořit jazyk, který by mohl být současně skriptovací V Groovy je možno velice efektivně psát dávkové soubory a různé skripty ovlivňující chování celého systému Převzato z Groovy in Action, str. 3, Fig. 1.1

8 Groovy.doc, verze , uloženo po :45 8 z 133 Groovy se nesnaží Javu nahradit, ale pouze doplnit => je zcela na vás, které části programu napíšete v Javě a které v Groovy Groovy-třídy mohou dědit z Java-tříd a naopak Programy v Groovy se překládají do standardních class-souborů; Groovy-kód lze zpětně přeložit dekompilátory Javy (nebude se ale originálu podobat a dost možná se v něm ani nevyznáte) Nástroje pro instrumentaci kódu akceptují i kód napsaný původně v Groovy Groovy je součástí ekosystému Javy byl pro něj definován Java Specification Request JSR JSR-223: Scripting for the Java Platform JSR-241: The Groovy Programming Language Groovy je druhým standardním jazykem pro platformu Java Domovská stránka Groovy: Stránka s dalšími informacemi:

9 Groovy.doc, verze , uloženo po :45 9 z Dva způsoby zavedení třídy Převzato z Groovy in Action, str. 48, Fig. 2.7

10 Groovy.doc, verze , uloženo po :45 10 z Přehled vlastnosti jazyka Groovy Bezešvá spolupráce s Javou: Převzato z Groovy in Action, str 6, Fig. 1.2, str. 10, Fig 1.4

11 Groovy.doc, verze , uloženo po :45 11 z Jak Groovy získat Groovy je součástí plné verze NetBeans; Eclipse a IDEA jej nabízí jako plug-in Instalace samostatné verze 1. Stáhnout poslední build z adresy 2. Ve Windows stačí spustit instalační soubor, v ostatních prostředích je třeba: a) Rozbalit stažený ZIP do vybrané složky/adresáře b) Definovat systémovou proměnnou GROOVY_HOME a zadat do ní cestu k této složce c) Přidat do systémové proměnné PATH cestu ke složce %GROOVY_HOME%\bin (Windows), resp. $GROOVY_HOME/bin (Unix + Linux) d) Otestovat správnost instalace zadáním příkazu groovy v Instaluje se několik programů: groovy spouští skript zadaný v parametru či souboru groovysh spouští shell umožňující komunikovat prostřednictvím konzoly groovyconsole spouští "operativní" prostředí pro jednoduché programy a testy groovyc překladač do class-souborů groovydoc vytváří dokumentaci, ekvivalent programu javadoc a některé další v závislosti na stažené verzi

12 Groovy.doc, verze , uloženo po :45 12 z Co Groovy od Javy přebírá Mechanismus balíčků a příkazy pro jejich definici (package) a import (import) Podobu příkazů a řídících struktur (podmíněné příkazy, cykly, ) s výjimkou příkazu do { } while() Definice tříd, výčtových typů, včetně interních tříd, avšak s výjimkou lokálních tříd Definice rozhraní včetně anotací Definice metod, operátory, výrazy, přiřazení Zpracování výjimek S drobnými úpravami deklarace literálů Největší rozdíl je v inicializaci polí, kde syntaxe Javy koliduje s jinými částmi Groovy a pole je proto třeba inicializovat prostřednictvím seznamů Na druhou stranu se doporučuje pole v programu nepoužívat, a dávat přednost seznamům Vytváření instancí, komunikace s objekty prostřednictvím odkazů, volání metod Syntaxi komentářů

13 Groovy.doc, verze , uloženo po :45 13 z Základní zjednodušení Groovy implicitně deklaruje importy: groovy.lang.* java.util.* groovy.util.* java.net.* java.lang.* java.io.* java.math.biginteger java.math.bigdecimal V souboru může být několik veřejných tříd a soubor se proto nemusí jmenovat podle obsažené veřejné třídy Na konci posledního příkazu na řádku není nutno psát středník Parametry volaných metod není nutno uzavírat do závorek Při zřetězeném volání metod není v řadě případů nutno používat tečky, např. paint wall with red, green and yellow je ekvivalentní klasickému zápisu paint(wall).with(red, green).and(yellow) V metodách se nemusí psát závěrečný return, automaticky se vrátí hodnota posledního výrazu/příkazu Všechny výjimky jsou převedeny na nekontrolované, je-li zachytávaná výjimka typu Exception, nemusí se v catch uvádět její typ

14 Groovy.doc, verze , uloženo po :45 14 z 133 Deklarované atributy mají automaticky definované přístupové metody, v Groovy je explicitně definujeme pouze tehdy, mají-li mít složitější tělo Zavádí literály i pro další datové typy seznamy, mapy, intervaly Všechna data jsou objektových typů, takže i čísla mají metody Zavádí nové užitečné datové typy a programové konstrukce (zejména cykly) Nechceme-li v program deklarovat typ proměnné a nechat jeho odvození na překladači, uvedeme deklaraci dané proměnné klíčovým slovem def Potřebujeme-li class-objekt, stačí napsat jméno třídy; není potřeba doplňovat.class V návěštích case příkazu switch lze použít téměř cokoliv Ve statických metodách zastupuje this odkaz na třídu, takže příkaz: println("my classobject: " + this) vytiskne zadaný text následovaný podpisem class-objektu dané třídy Cokoliv lze testovat na pravdivostní hodnotu (viz Podmínky)

15 Groovy.doc, verze , uloženo po :45 15 z Skripty Ve skriptech nemusí být příkazy uzavřeny do metody, a tím pádem ani do třídy překladač vše doplní sám current = 1; next = 1 //10.times { for (int i=0; i < 10; i++) { print current + ' ' newcurrent = next next = next + current current = newcurrent } println '' Ve skriptech nemusíme deklarovat použité proměnné stanou se automaticky lokálními proměnnými metody, kterou překladač definuje a uloží do ní veškerý kód nedefinovaný v nějaké metodě Podrobnosti o skriptech budou probrány v pasáži Specifika skriptů

16 Groovy.doc, verze , uloženo po :45 16 z Podmínky V podmínkách jsou za pravdivé jsou považovány výrazy, jejichž výsledkem je Booloean true Character char!= '\0' Collection size() > 0 Enumeration hasmoreelements() Iterator hasnext() Map size() > 0 Matcher Alespoň jeden vyhovující řetězec Number hodnota!= 0 Object[] length > 0 Jiný objekt Odkaz!= null

17 Groovy.doc, verze , uloženo po :45 17 z Sjednocení způsobů zjištění počtu prvků v kontejneru Type Zjištění velikosti v JDK a v Groovy Array atribut length size() method Array metoda size() method java.lang.reflect.array.getlength(array) String metoda length() size() method StringBuffer metoda length() size() method Collection metoda size() size() method Map metoda size() size() method File metoda length() size() method Matcher metoda groupcount() size() method

18 Groovy.doc, verze , uloženo po :45 18 z Co dalšího je jinak Operátor == vždy volá metodu equals(object). Chceme-li porovnat shodnost odkazů, musíme použít metodu is(object) Hodnoty s plovoucí čárkou jsou implicitně typy BigDecimal. Chceme-li pracovat s double, musíme u literálu uvést příponu d nebo D Implicitní přístup ke třídám, metodám a vlastnostem je nyní public ruší se implicitní přístup označovaný jako package private => zůstává pouze svatá trojice public protected private Příkaz získání hodnoty atributu, resp. přiřazení hodnoty vlastnosti (atributu) je ve skutečnosti voláním příslušné přístupové metody Groovy rozeznává více druhů textových řetězců stringů; ty mohou být uvozeny: 'apostrofy' "uvozovkami" /lomítky/ $/Dolarovými lomítky/$ '''trojicí apostrovů''' """trojicí uvozovek""" Podrobnosti v pasáži Textové literály stringy

19 Groovy.doc, verze , uloženo po :45 19 z Co Java má a Groovy (zatím) ne Cyklus do {... } while(?) Přístupová práva package private Novinky syntaxe Javy 7 (v Groovy 2.0 již jsou0 již jsou0 již jsou metoda metoda) _ Diamantový operátor: List<string> list = new ArrayList<>() Kumulované catch definující reakci na několik výjimek současně Automatizované zavírání zdrojů

20 Groovy.doc, verze , uloženo po :45 20 z Groovy rychlý úvod do jazyka Obsah 2.1 Aserce 2.2 Groovy Beans 2.3 Textové literály stringy Řetězce ohraničené apostrofy Řetězce ohraničené uvozovkami GStringy Řetězce ohraničené lomítky Řetězce ohraničené dolarovými lomítky Možnosti změny hodnoty instancí typu GString 2.4 Žádný datový typ není primitivní 2.5 Seznam List 2.6 Mapa Map 2.7 Rozsah Range Definice 2.8 Uzávěr Closure 2.9 Řídící algoritmické konstrukce Rozšíření iterovatelných objektů Interní iterátory zděděné od třídy Object Metody aplikovatelné na čísla Metoda with 2.10 Práce s čísly 2.11 Pojmenované parametry a jejich implicitní hodnoty

21 Groovy.doc, verze , uloženo po :45 21 z Aserce Programy v dynamických jazycích se musí mnohem podrobněji testovat V Groovy se hojně využívá konstrukce assert, přičemž se využívá obecněji pojaté podmínky assert true assert (x = 1) //Přiřazení výsledek je přiřazovaná hodnota assert (x == 1) //Logický výraz assert x //Aritmetická hodnota assert "Kuk" //Odkaz na objekt V Javě je assert klíčové slovo definující příkaz, pro nějž můžeme v parametrech virtuálního stroje nastavit, jestli se pro danou část programu má či nemá spouštět V Groovy není assert klíčové slov, ale metoda, která se volá pokaždé Groovy podporuje dvouparametrický assert, v němž druhý parametr specifikuje chybu; na rozdíl od Javy však není druhý parametr oddělen dvojtečkou, ale čárkou assert false, "Zde je uměle vytvořená chyba"

22 Groovy.doc, verze , uloženo po :45 22 z 133 Výrazy vyhazující výjimku //assert false //Logická hodnota //assert 0 //Číslo 0 //assert "" //Prázdný řetězce //assert null //Prázdný odkaz Výše uvedené hodnoty lze otestovat prostřednictvím jejich negace assert! null; assert! 0; assert! "" Vznikne-li při vyhodnocování argumentu funkce assert chyba, program se nám pokusí nejen vysvětlit, kde při vyhodnocování výrazu našel chybu, ale poskytne nám i informace k následnému odhalení její příčiny Exception in thread "main" Assertion failed: assert b == (a+a) false

23 Groovy.doc, verze , uloženo po :45 23 z Groovy Beans Koncept JavaBeans zavedl jisté konvence umožňující komponentový přístup k objektům Groovy používá stejné konvence jako Java, avšak zodpovědnost za definici přístupových metod bere na svá bedra překladač class Book { String title } def groovybook = new Book() Předchozí program Groovy přeloží tak, že: Definuje soukromý atribut title Definuje veřejnou metodu gettitle(), která vrátí jeho hodnotu Definuje veřejnou metodu settitle(string), která nastaví jeho hodnotu K atributu pak můžeme přistupovat zdánlivě přímo, nicméně toto přímé oslovení překladač nahradí odpovídajícím voláním přístupové metody

24 Groovy.doc, verze , uloženo po :45 24 z 133 Přímé volání metod def Book book = new Book() book.settitle("groovy conquers the world") assert book.gettitle() == "Groovy conquers the world" Nepřímé volání metod přístup prostřednictvím metod zabezpečí překladač (jinými slovy: výsledný kód je stejný jako v předchozí ukázce) book.title = "Groovy in Action" assert book.title == "Groovy in Action" book.title += '!' //Překlad: book.settitle(book.gettitle() + '!') assert book.gettitle() == "Groovy in Action!"

25 Groovy.doc, verze , uloženo po :45 25 z Textové literály stringy Řetězec ohraničený jedním apostrofem 'řetězec' Řetězec ohraničený třemi apostrofy '''řetězec''' Řetězec ohraničený jedněmi uvozovkami "řetězec" Řetězec ohraničený třemi uvozovkami """řetězec""" Řetězec ohraničený lomítky /řetězec/ Řetězec ohraničený dvojící lomítko + znak $ $/řetězec/$ Každý z těchto řetězců má vlastní sémantiku

26 Groovy.doc, verze , uloženo po :45 26 z Řetězce ohraničené apostrofy Klasický řetězec Javy pouze vyměnil ohraničující uvozovky za apostrofy a1 = 'Klasický řetězec' Řetězec uvozený třemi apostrofy je klasický řetězec, který však může zabírat několik řádků, přičemž konce řádků zadané v kódu se respektují Při používání víceřádkových řetězců se případné odsazení dalšího řádku, stane součástí výsledného řetězce => proto musí další řádek začínat zkraje a3 = '''Řetězec uvozený třemi apostrofy může zabírat několik řádků, přičemž konce řádků zadané v kódu se respektují''' Stačí-li nám rozdělit řetězec na řádky pouze ve zdrojovém kódu, můžeme jako poslední znak na řádku použít zpětné lomítko; toto odřádkování se však v zadávaném řetězci neobjeví ab = 'Zpětné lomítko na konci řádku \ nevloží odřádkování do výsledného textu' assert ab == 'Zpětné lomítko na konci řádku nevloží odřádkování do výsledného textu'

27 Groovy.doc, verze , uloženo po :45 27 z Řetězce ohraničené uvozovkami GStringy Řetězec ohraničený uvozovkami je tzv. GString ten může obsahovat výrazy, které se píší za znak $ a vyhodnocují se v době použití řetězce Je-li výraz složitější než pouhý název proměnné, vkládá se do složených závorek { } Výraz v závorkách může obsahovat i volání metod pr = 'proměnnou'; slo='složitý'; vý='výraz' u1 = "GString může vyhodnocovat $pr či celý ${slo + " " + vý.tolowercase()}" I uvozovkami ohraničené řetězce mají svojí trojitou verzi umožňující zapsat řetězec obsahující několik řádků u3 = """Odvoláváme li se pouze na $pr, nemusíme její název psát do závorek, Ty využijeme až když chceme vyhodnotit ${slo + " " + vý.tolowercase()}""" Zpětné lomítko na konci řádku máme k dispozici i v řetězcích ohraničených uvozovkami; ani zde se v zadávaném řetězci odřádkování neobjeví ub = " Zpětné lomítko na konci řádku, \ se ve výsledku neprojeví" assert ub == "Zpětné lomítko na konci řádku, se ve výsledku neprojeví"

28 Groovy.doc, verze , uloženo po :45 28 z Řetězce ohraničené lomítky Zpětné lomítko se v nich nemusí zadávat jako dvojice zpětných lomítek (je to zde běžný znak), a proto se používají především k zadávání regulárních výrazů Lomítko se v nich zadá pomocí escape sekvence \/ Kromě lomítka znají ještě escape sekvence \uhhhh Mohou obsahovat dolarové výrazy Od verze 1.8 jsou více řádkové, tj. ve vztahu ke konci řádku ve zdrojovém kódu se chovají jako trojité verze předchozích řetězců lo = /Zpětná lomítka (\) zde nemusíme zdvojovat. Tyto řetězce považují zpětné lomítko za prefix pouze tehdy, je li následované dopřeným lomítkem (\/ pak je dvojice chápána jako lomítko), anebo znakem 'u' např. znak \u00a9 je vyhodnocen jako./ l$ = /I zde lze použít výraz s $pr či celý ${slo + " " + vý}/

29 Groovy.doc, verze , uloženo po :45 29 z Řetězce ohraničené dolarovými lomítky Tyto řetězcové literály zavedlo Groovy 1.8 Ohraničíme-li lomítkový řetězec navíc znaky $ (dolar), změníme tím standardní escapovací znak \ na znak $ Znak $ bude uvozovat lomítko či sám sebe Znak \ bude nyní uvozovat pouze sekvenci \uhhhh $l = $/Znak dolar nyní píšme $$ a lomítko $/ avšak znak \u00a9 je nadále vyhodnocován jako /$

30 Groovy.doc, verze , uloženo po :45 30 z Možnosti změny hodnoty instancí typu GString Apostrofové řetězce jsou instancemi třídy java.lang.string Uvozovkové řetězce obsahující dolarové výrazy jsou instancemi třídy org.codehaus.groovy.runtime.gstringimpl, po vyhodnocení výrazů se vytvářejí instance třídy String Při používání GString-ů je třeba mít na paměti, že parametry se předávají hodnotou, takže má-li se hodnota parametru měnit v průběhu výpočtu, musí být parametr instancí nějakého proměnného typu Druhou možností je předat bezparametrický uzávěr např. ${ > string} Podrobnosti o uzávěrech viz pasáž 2.8 Uzávěr Closure Příklad k předchozímu tvrzení uvedený na další stránce demonstruje: Objekty typu String jsou neměnné, takže jakákoliv změna vede k vytvoření nového objektu Objekty typu StringBuilder jsou proměnné, takže GStringy, které je používají, mohou v průběhu času měnit svoji hodnotu Objekty typu String se dají použít jako proměnně, jsou-li správně uzavřené v dolarových závorkách

31 Groovy.doc, verze , uloženo po :45 31 z 133 str = 'oves' ;assert str instanceof String buf = new StringBuffer('oves') ;assert buf instanceof StringBuffer us = "Skákal pes přes $str" ub = "Skákal pes přes $buf" uc = "Skákal pes přes ${ >str}" assert us == 'Skákal pes přes oves' assert ub == 'Skákal pes přes oves' assert uc == 'Skákal pes přes oves' str = 'zelenou louku' buf.replace(0, 5, 'zelenou louku') assert us == 'Skákal pes přes oves' assert ub == 'Skákal pes přes zelenou louku' assert uc == 'Skákal pes přes zelenou louku'

32 Groovy.doc, verze , uloženo po :45 32 z 133 Při volání metody se situace zjednodušuje, protože při každém volání se řetězec vyhodnocuje znovu, takže není třeba zabezpečovat změnu def method(param) { return "Parametr: $param" } assert method(1) == 'Parametr: 1' assert method('groovy') == 'Parametr: Groovy'

33 Groovy.doc, verze , uloženo po :45 33 z Žádný datový typ není primitivní Všechny hodnoty primitivních typů se chovají jako objekty, takže jim lze posílat zprávy = volat jejich metody def s = '' 3.times { s += 'bu' } assert s == 'bububu' def x = 1 assert x instanceof Integer Operátory jsou ve skutečnosti definovány jako metody => použití operátoru nebo zavolání odpovídající metody má proto stejný efekt def x = 1 def y = 2 assert x + y == 3 assert x.plus(y) == 3 assert (x y) * y == 2 assert x.minus(y).multiply(y) == 1

34 Groovy.doc, verze , uloženo po :45 34 z Seznam List Skupina čárkami oddělených hodnot v hranatých závorkách je chápána jako literál seznamu => seznam tak můžeme inicializovat přímo v deklaraci K prvkům seznamů můžeme přistupovat prostřednictvím indexů obdobně, jako přistupujeme k prvkům pole def roman = ['', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII'] assert roman[4] == 'IV' //Přístup k prvku seznamu roman[8] = 'VIII' //Přidání prvku do seznamu assert roman.size() == 9 Seznam se automaticky konvertuje na objekt libovolného typu tak, že překladač zavolá konstruktor, jemuž se prvky seznamu předají jako parametry (třída samozřejmě musí daný konstruktor mít) java.awt.point point = [10, 20] // Ekvivalentní new Point(10, 20) assert point.tostring() == 'java.awt.point[x=10,y=20]' list = [100, 200] point = list assert point.tostring() == 'java.awt.point[x=100,y=200]'

35 Groovy.doc, verze , uloženo po :45 35 z 133 Hodnoty seznamu lze přiřadit členům skupiny proměnných uzavřených v závorkách list = [10, 'xxx', true] (a, b, c) = list assert (a==10) && (b=='xxx') && c (c, b, a) = ['third', 'second', 'first'] assert (a=='first') && (b=='second') && (c=='third') Přebytečné prvky v seznamu se zahodí, chybějící se přiřadí jako null (k, l, m) = [1,2,3,4] assert (k==1) && (l==2) && (m==3) (x, y, z) = [10,20] assert (x==10) && (y==20) && (z==null)

36 Groovy.doc, verze , uloženo po :45 36 z Mapa Map Skupina čárkami oddělených dvojic hodnot, které jsou vzájemně odděleny dvojtečkou, je chápána jako literál mapy => i mapy lze inicializovat přímo v deklaraci V této definici je objekt vlevo od dvojtečky chápán jako klíč a objekt vpravo od dvojtečky jako hodnota Mapu můžeme inicializovat přímo v deklaraci jako seznam dvojic klíč : hodnota def http = [ //Deklarace inicializované mapy 100 : 'CONTINUE', 200 : 'OK', 400 : 'BAD REQUEST' ] assert http[200] == 'OK' //Prvek indexujeme hodnotou klíče http[200] = 'YES' //Změna hodnoty existujícího prvku http[500] = 'INTERNAL SERVER ERROR' //Přidání prvku do mapy assert http.size() == 4

37 Groovy.doc, verze , uloženo po :45 37 z 133 Mapa se automaticky převede na jiný typ tak, že překladač zavolá jeho bezparametrický konstruktor a poté přiřadí hodnoty prvků mapy stejně pojmenovaným atributům Cílový typ musí mít bezparametrický konstruktor, nastavované atributy mohou být soukromé, ale nesmějí být konstantní, java.awt.point point = [y:20, x:10] // Ekvivalentní new Point(10, 20) assert point.tostring() == 'java.awt.point[x=10,y=20]' map = [x:100, y:200] point = map assert point.tostring() == 'java.awt.point[x=100,y=200]' class MappedClass { private int x, y, z; } String tostring() { return "MappedClass[x=$x, y=$y, z=$z]" } MappedClass mc = [y:200, z:300] //Hodnota x se nezmění assert mc.tostring() == 'MappedClass[x=0, y=200, z=300]'

38 Groovy.doc, verze , uloženo po :45 38 z Rozsah Range Rozsahy nejsou ve standardní knihovně Javy, Groovy je přidává Literálem rozsahu je dvojice porovnatelných hodnot oddělených dvěma tečkami; tyto hodnoty budeme označovat jako dolní a horní mez Je-li před druhou hodnotou menšítko, nepočítá se horní mez do rozsahu def x = 1..10; def y = 1..<10 assert x.contains(10); assert y.contains(9) assert x.contains(15) == false; assert y.contains(10) == false assert x.size() == 10; assert y.size() == 9 assert x.from == 1; assert y.from == 1 assert x.to == 10; assert y.to == 9 assert x.reverse() == 10..1; assert y.reverse() == 9..1 Rozsahy lze s jistou rezervou považovat za seznamy s posloupností hodnot def numberlist = [1,2,3,4,5,6,7,8,9,10] def numberrange = assert numberlist == numberrange //Jsou ekvivalentní, ale každý jiného typu assert (numberlist.class == ArrayList) && (numberrange instanceof Range)

39 Groovy.doc, verze , uloženo po :45 39 z Definice Rozsahy mohou být definovány nad libovolným uspořádaným typem, tj. typem, který: Definuje metody next() and previous(), resp. operátory ++ a vracející následníka, resp. předchůdce dané instance Implementuje java.lang.comparable, takže definuje metodu compareto, resp. ekvivalentní operátor <=> (spaceship operator) Přítomnost prvku v rozsahu zjišťujeme operátorem in: if (objekt in rozsah) Tentýž operátor lze použít v cyklu for místo dvojtečky enum DAY { Sun, Mon, Tue, Wed, Thu, Fri, Sat } working = DAY.Mon..DAY.Fri report = '' for (day in working) { report += day.tostring() + ' ' } assert report == 'Mon Tue Wed Thu Fri '

40 Groovy.doc, verze , uloženo po :45 40 z Uzávěr Closure Myšlenka, že funkce (a obecně část kódu) je běžným objektem jazyka stejně jako např. číslo, byla implementována již v roce 1958 v jazyce LISP Teoretickým základem je tzv. λ-kalkulus zavedený Churchem v roce 1936 V klasických procedurálních jazycích (Fortran Algol Pascal ) jsou procedury a funkce definovány jako zvláštní entity, které není možné uložit do proměnných Moderní programovací jazyky se snaží znovu začít pracovat s částmi kódu jako s entitami postavenými na roveň datům Termín uzávěr (closure) označuje skutečnost, že takováto část kódu musí nějakým způsobem uzavřít proměnné, s nimiž bude pracovat, aby nebyly v nevhodnou chvíli systémem odstraněny V OO jazycích nepoužívajících uzávěry se funkčnost uzávěrů nahrazuje použitím návrhového vzoru Příkaz (Command), který zabalí do objektu příslušnou část kódu jako metodu daného objektu Příklad: java.io.file.list(filenamefilter) Nevýhodou tohoto přístupu je zbytečný nárůst počtu explicitně definovaných datových typů (třída + rozhraní) a výrazně zašuměný zdrojový kód

41 Groovy.doc, verze , uloženo po :45 41 z 133 V příkladu na obrázku je volána metoda each(groovy.lang.closure) seznamu, což je metoda, o níž Groovy rozšiřuje portfolio metod třídy Object. Tato metoda vyžaduje jako svůj parametr uzávěr, který definuje, co se má udělat s každým z prvků daného iterovaného objektu Zobrazené volání využívá pravidla, že má-li metoda jako svůj poslední parametr uzávěr, nemusí jej uvádět v seznamu parametrů, ale může jej uvést až za ním V tomto případě byl uzávěr jediným parametrem, takže seznam klasických parametrů zcela chybí Převzato z Groovy in Action, str 44, Fig. 1.2

42 Groovy.doc, verze , uloženo po :45 42 z 133 Uzávěry mají své parametry vyjmenované za otevírací složenou závorkou a oddělené od vykonávaného kódu šipkou > Je-li parametr jen jeden, nemusí se uvádět a použije se pro něj implicitní název it list1 = [1, 3, 5, 7] list2 = list1.collect{ it *= 2 } //Vyrobí ze zpracovaných hodnot seznam assert list2 == [2, 6, 10, 14] Není-li parametr žádný, napíše se samotná šipka: { > kóduzávěru } Takovýto uzávěr byl použit např. v ukázce vyhodnocování GString-ů Podrobněji se k uzávěrům vrátíme v samostatné kapitole Uzávěry

43 Groovy.doc, verze , uloženo po :45 43 z Řídící algoritmické konstrukce Konstrukce if, while, switch a klasický cyklus for(inicializace, podmínka, modifikace) fungují jako v Javě def list = [] for (int j=0; j < 5; j++) { list += j } assert list == [0, 1, 2, 3, 4] Cyklus do { } while( ) nelze použít, Groovy nezná klíčové slovo do Dvojtečkový cyklus for (cyklus for each) nahrazuje dvojtečku slovem in string = '' for (num in 0..9) { string += num } assert string == ' '

44 Groovy.doc, verze , uloženo po :45 44 z Rozšíření iterovatelných objektů Groovy výrazně rozšiřuje paletu iterovatelných objektů; iteruje se podle následujících pravidel (a priorit): 1. java.util.iterator... Použije jej 2. org.w3c.dom.nodelist... Iterace přes uzly 3. java.util.enumeration... Převede jej na Iterator 4. java.util.regex.matcher... Iterace přes výskyty 5. Metoda iterator... Zavolat 6. Collections... Collection.iterator 7. java.util.map... Iterace přes objekty Map.Entry 8. Array... Iterace přes prvky 9. MethodClosure... Iterace přes volání 10. java.lang.string... Iterace přes znaky 11. java.io.file... Iterace přes řádky 12. null... Prázdný iterátor 13. Ostatní... Použije se pouze daný objekt

Výčtový typ strana 67

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

Více

typová konverze typová inference

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

Více

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

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

Více

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13 Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13 KAPITOLA 1 Na úvod o Javě 15 Počítačový program 15 Vysokoúrovňový programovací

Více

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

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í

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Výrazy Operátory Výrazy Verze pro akademický rok 2012/2013 1 Operace, operátory Unární jeden operand, operátor se zapisuje ve většině případů před operand, v některých případech

Více

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1 24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE AUTOR DOKUMENTU: MGR. MARTINA SUKOVÁ DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 UČIVO: STUDIJNÍ OBOR: PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) INFORMAČNÍ TECHNOLOGIE

Více

PREPROCESOR POKRAČOVÁNÍ

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,

Více

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

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

Více

Teoretické minimum z PJV

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

Více

Paměť počítače. alg2 1

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

Více

Algoritmizace a programování

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

Více

Seminář Java II p.1/43

Seminář Java II p.1/43 Seminář Java II Seminář Java II p.1/43 Rekapitulace Java je case sensitive Zdrojový kód (soubor.java) obsahuje jednu veřejnou třídu Třídy jsou organizovány do balíků Hierarchie balíků odpovídá hierarchii

Více

Zápis programu v jazyce C#

Zápis programu v jazyce C# Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač

Více

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

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

Více

Algoritmizace a programování

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,

Více

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false Logické operace Datový typ bool může nabýt hodnot: o true o false Relační operátory pravda, 1, nepravda, 0, hodnoty všech primitivních datových typů (int, double ) jsou uspořádané lze je porovnávat binární

Více

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 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íce

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/04.0006

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/04.0006 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/04.0006 Lekce 1 Jazyk Java Tento projekt je spolufinancován Evropským sociálním fondem

Více

7. Datové typy v Javě

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ů

Více

Generické programování

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 =

Více

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

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,

Více

Z. Kotala, P. Toman: Java ( Obsah )

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

Více

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií 1 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 12. října 2009 Organizace výuky Přednášky Teoretické základy dle normy jazyka C Cvičení Praktické úlohy odpřednášené látky Prostřední

Více

První kapitola úvod do problematiky

První kapitola úvod do problematiky První kapitola úvod do problematiky Co je to Flex Adobe Flex je ActionSript (AS) framework pro tvorbu Rich Internet Aplications (RIA), tedy knihovna AS tříd pro Flash. Flex používáme k vytvoření SWF souboru

Více

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Maturitní otázky z předmětu PROGRAMOVÁNÍ Wichterlovo gymnázium, Ostrava-Poruba, příspěvková organizace Maturitní otázky z předmětu PROGRAMOVÁNÍ 1. Algoritmus a jeho vlastnosti algoritmus a jeho vlastnosti, formy zápisu algoritmu ověřování správnosti

Více

Úvod do Groovy pro Java experty

Úvod do Groovy pro Java experty Úvod do Groovy pro Java experty Václav Pech Senior Software Developer JetBrains, Inc. Něco o mně Václav Pech Programátor Nadšenec do Groovy JetBrains Dodavatel Vašich oblíbených nástrojů IntelliJ IDEA,

Více

1. Programování proti rozhraní

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í

Více

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

DSL manuál. Ing. Jan Hranáč. 27. října 2010. V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v DSL manuál Ing. Jan Hranáč 27. října 2010 V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v současné době krátký) seznam vestavěných funkcí systému. 1 Vytvoření nového dobrodružství Nejprve

Více

Programování v Javě I. Leden 2008

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

Více

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

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

Více

Skriptovací jazyky. Obsah

Skriptovací jazyky. Obsah Skriptovací jazyky 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 Obsah Co je to skriptovací jazyk? Výhody a nevýhody

Více

Dědění, polymorfismus

Dědění, polymorfismus Programování v jazyce C/C++ Ladislav Vagner úprava Pavel Strnad Dědění. Polymorfismus. Dnešní přednáška Statická a dynamická vazba. Vnitřní reprezentace. VMT tabulka virtuálních metod. Časté chyby. Minulá

Více

Funkce, podmíněný příkaz if-else, příkaz cyklu for

Funkce, podmíněný příkaz if-else, příkaz cyklu for Funkce, podmíněný příkaz if-else, příkaz cyklu for Definice funkce Funkce je pojmenovaná část programu, kterou lze dále zavolat v jiné části programu. V Pythonu je definována klíčovým slovem def. Za tímto

Více

Datové typy strana 29

Datové typy strana 29 Datové typy strana 29 3. Datové typy Jak již bylo uvedeno, Java je přísně typový jazyk, proto je vždy nutno uvést datový typ datového atributu, formálního parametru metody, návratové hodnoty metody nebo

Více

Abstraktní datové typy: zásobník

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í

Více

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í. 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;

Více

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Č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

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Objektově orientované programování v jazyce Python

Objektově orientované programování v jazyce Python Objektově orientované programování v jazyce Python Základní pojmy objektově orientovaného programování Objekt vychází z reálného světa. Má dva charakteristické rysy. Všechny objekty mají stav Všechny objekty

Více

Dynamické programovací jazyky

Dynamické programovací jazyky Dynamické programovací jazyky Václav Pech Senior Software Developer JetBrains, Inc. Něco o mně Václav Pech Programátor Nadšenec do Groovy JetBrains Dodavatel nástrojů pro vývojáře IntelliJ IDEA, TeamCity,

Více

boolean hasnext() Object next() void remove() Kolekce

boolean hasnext() Object next() void remove() Kolekce 11. Kontejnery Kontejnery Kontejnery jako základní dynamické struktury v Javě Kolekce, iterátory (Collection, Iterator) Seznamy (rozhraní List, třídy ArrayList, LinkedList) Množiny (rozhraní Set, třída

Více

7. Dynamické datové struktury

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.

Více

Úvod do programování v jazyce Java

Úvod do programování v jazyce Java Úvod do programování v jazyce Java Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci 5. říjen, 2011 Petr Krajča (UP) KMI/UP3J: Seminář I. 5.10.2011 1 / 17 Organizační informace email: petr.krajca@upol.cz

Více

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

Ú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

Více

Objektově orientované programování

Objektově orientované programování 10. října 2011 Pragmatické informace Volitelný předmět, zápočet: zápočtový program(s dokumentací), aktivní účast na cvičení(body v CodExu), praktický test, zkouška: zkoušková písemka na objektový návrh

Více

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu } 5. Operátor čárka, - slouží k jistému určení pořadí vykonání dvou příkazů - oddělím-li čárkou dva příkazy, je jisté, že ten první bude vykonán dříve než příkaz druhý. Např.: i = 5; j = 8; - po překladu

Více

Objektově orientované programování v jazyce Python

Objektově orientované programování v jazyce Python Objektově orientované programování v jazyce Python Co to je objektově orientované programování Python není přímo objektově orientovaný jazyk, ale podporuje nejdůležitější části objektově orientovaného

Více

Proměnné a datové typy

Proměnné a datové typy Proměnné a datové typy KAPITOLA 2 V této kapitole: Primitivní datové typy Proměnné Opakování Mezi základní dovednosti každého programátora bezesporu patří dobrá znalost datových typů. Ta vám umožní efektivní

Více

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z 15.10.2007

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z 15.10.2007 WSH Windows Script Hosting OSY 2 Přednáška číslo 2 opravená verze z 15.10.2007 Co je skript? Skriptování nástroj pro správu systému a automatizaci úloh Umožňuje psát skripty jednoduché interpretované programové

Více

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

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

Více

MAXScript výukový kurz

MAXScript výukový kurz MAXScript výukový kurz Díl čtvrtý jazyk MAXScript, část I. Jan Melichar, březen 2008 Jan Melichar (aka JME) strana 1 OBSAH ÚVOD... 4 ZÁKLADNÍ PŘÍKAZY... 5 OPERÁTORY... 6 PROMĚNNÉ... 6 POLE... 7 ZÁVĚREM...

Více

Vytváření a použití knihoven tříd

Vytváření a použití knihoven tříd Vytváření a použití knihoven tříd 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 Prostory jmen motivace spolupráce

Více

Obsah. Začínáme programovat v Ruby on Rails 9. Úvod 11. 1. Vítejte v Ruby 15. O autorovi 9 Poděkování 9

Obsah. Začínáme programovat v Ruby on Rails 9. Úvod 11. 1. Vítejte v Ruby 15. O autorovi 9 Poděkování 9 Začínáme programovat v Ruby on Rails 9 O autorovi 9 Poděkování 9 Úvod 11 Komu je kniha určena 11 Jak je kniha uspořádána 11 Co ke knize potřebujete 12 Konvence 12 Zdrojový kód 13 Poznámka redakce českého

Více

Prezentace a vysvětlení programového prostředí NXC

Prezentace a vysvětlení programového prostředí NXC Úvod Další jazyk, který je možno použít pro programování NXT kostky je NXC Not exatly C Na rozdíl od jazyku NXT-G, kde jsme vytvářeli program pomocí grafických prvků přesněji řečeno pomocí programovacích

Více

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

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í

Více

1. Dědičnost a polymorfismus

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ář

Více

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

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

Více

Jazyk C++ I. Šablony 2

Jazyk C++ I. Šablony 2 Jazyk C++ I Šablony 2 AR 2013/2014 Jazyk C++ I Třídy template class TVektor { T *a; int n; static int PocInstanci; public: TVektor(int _n = 0) : n(_n) { a = new T[n]; PocInstanci++; } ~TVektor()

Více

20. Projekt Domácí mediotéka

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ý

Více

Funkční objekty v C++.

Funkční objekty v C++. Funkční objekty v C++. Funkční objekt je instance třídy, která má jako svou veřejnou metodu operátor (), tedy operátor pro volání funkce. V dnešním článku si ukážeme jak zobecnit funkci, jak používat funkční

Více

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_25 09

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_25 09 Střední průmyslová škola a Vyšší odborná škola technická Brno, Sokolská 1 Šablona: Název: Téma: Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Operátory Autor:

Více

Programátorská příručka

Programátorská příručka KAPITOLA 1. PROGRAMÁTORSKÁ PŘÍRUČKA Kapitola 1 Programátorská příručka 1.1 Úvod 1.1.1 Technologie Program je psaný v jazyce Java 1.7. GUI je vytvářeno pomocí knihovny SWT. (http://eclipse.org/swt/) Pro

Více

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

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ě

Více

2 Datové typy v jazyce C

2 Datové typy v jazyce C 1 Procedurální programování a strukturované programování Charakteristické pro procedurální programování je organizace programu, který řeší daný problém, do bloků (procedur, funkcí, subrutin). Původně jednolitý,

Více

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

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

Více

Groovy agilní Java. Pavel Kříž Filip Malý

Groovy agilní Java. Pavel Kříž Filip Malý Groovy agilní Java Pavel Kříž Filip Malý Úvod Dynamický skriptovací jazyk pod JVM Navržen pro platformu Java, zcela interoperabilní (na úrovni bajtkódu) s běžnými programy v Javě, silně objektově orientovaný

Více

Jazyk C++ I. Polymorfismus

Jazyk C++ I. Polymorfismus Jazyk C++ I Polymorfismus AR 2013/2014 Jazyk C++ I Operátory Co to vůbec jsou operátory? Na co je používáme? AR 2013/2014 Jazyk C++ I 2 Operátory Můžeme si upravit operátory pro vlastní objektové typy?

Více

Jazyk C# (seminář 5)

Jazyk C# (seminář 5) Jazyk C# (seminář 5) Pavel Procházka KMI 23. října 2014 Přetěžování metod motivace Představme si, že máme metodu, která uvnitř dělá prakticky to samé, ale liší se pouze parametry V C# můžeme více metod

Více

15. Projekt Kalkulačka

15. Projekt Kalkulačka Projekt Kalkulačka strana 143 15. Projekt Kalkulačka 15.1. Základní popis, zadání úkolu Pracujeme na projektu Kalkulačka, který je ke stažení na java.vse.cz. Po otevření v BlueJ vytvoříme instanci třídy

Více

14.4.1. Typický prvek kolekce pro české řazení

14.4.1. Typický prvek kolekce pro české řazení 14.4. Co všechno by měl mít typický prvek kolekce 177 Poznámka: Třídy BigInteger, BigDecimal a Date budou vysvětleny v částech [15./183, [16./185 a [18.1./204. 14.4.1. Typický prvek kolekce pro české řazení

Více

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

1. Téma 12 - Textové soubory a výjimky 1. Téma 12 - Textové soubory a výjimky Cíl látky Procvičit práci se soubory s využitím výjimek. 1.1. Úvod Program, aby byl programem, my mít nějaké výstupy a vstupy. Velmi častým případem je to, že se

Více

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ČŮ 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

Více

Odvozené a strukturované typy dat

Odvozené a strukturované typy dat Odvozené a strukturované typy dat Petr Šaloun katedra informatiky FEI VŠB-TU Ostrava 14. listopadu 2011 Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu

Více

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 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

Více

Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz

Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz Upozornění pro čtenáře a uživatele této knihy Všechna práva vyhrazena. Žádná část této tištěné či elektronické knihy nesmí být reprodukována a šířena

Více

9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include

9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h> 9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include int main(void) { int dcislo, kolikbcislic = 0, mezivysledek = 0, i; int vysledek[1000]; printf("zadejte

Více

Více o konstruktorech a destruktorech

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í

Více

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

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

Více

Kód. Proměnné. #include using namespace std; int main(void) { cout << "Hello world!" << endl; cin.get(); return 0; }

Kód. Proměnné. #include <iostream> using namespace std; int main(void) { cout << Hello world! << endl; cin.get(); return 0; } Jazyk C++ Jazyk C++ je nástupcem jazyka C. C++ obsahuje skoro celý jazyk C, ale navíc přidává vysokoúrovňové vlastnosti vyšších jazyků. Z toho plyne, že (skoro) každý platný program v C je také platným

Více

MQL4 COURSE. By Coders guru www.forex-tsd.com. -5 Smyčky & Rozhodnutí Part 1

MQL4 COURSE. By Coders guru www.forex-tsd.com. -5 Smyčky & Rozhodnutí Part 1 MQL4 COURSE By Coders guru www.forex-tsd.com -5 Smyčky & Rozhodnutí Part 1 Vítejte v páté lekci mého kurzu MQL4. Předchozí lekci si můžete stáhnout z tohoto odkazu: http://forex-tsd.com /attachment.php?attachmentid=399

Více

3. Třídy. Základní pojmy objektového programování. Třídy

3. Třídy. Základní pojmy objektového programování. Třídy 3. Třídy Základní pojmy objektového programování Jak už víme, je Java objektovým programovacím jazykem. V úvodu této kapitoly si objasníme základní pojmy objektové teorie. Objekt představuje souhrn dat

Více

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

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,

Více

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Využití OOP v praxi -- Knihovna PHP -- Interval.cz Page 1 of 6 Knihovna PHP Využití OOP v praxi Po dlouhé teorii přichází na řadu praxe. V následujícím textu si vysvětlíme možnosti přístupu k databázi pomocí různých vzorů objektově orientovaného programování

Více

10 Balíčky, grafické znázornění tříd, základy zapozdření

10 Balíčky, grafické znázornění tříd, základy zapozdření 10 Balíčky, grafické znázornění tříd, základy zapozdření 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 příkazům balíčkům, grafickému

Více

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

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní Základy jazyka C# 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 Obsah přednášky Architektura.NET Historie Vlastnosti

Více

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

Projekty pro výuku programování v jazyce Java JIHOČESKÁ UNIVERZITA V ČESKÝCH BUDĚJOVICÍCH Pedagogická fakulta Katedra informatiky Akademický rok: 2006/2007 TEZE BAKALÁŘSKÉ PRÁCE Projekty pro výuku programování v jazyce Java Jméno: František Přinosil

Více

2 Strukturované datové typy 2 2.1 Pole... 2 2.2 Záznam... 3 2.3 Množina... 4

2 Strukturované datové typy 2 2.1 Pole... 2 2.2 Záznam... 3 2.3 Množina... 4 Obsah Obsah 1 Jednoduché datové typy 1 2 Strukturované datové typy 2 2.1 Pole.................................. 2 2.2 Záznam................................ 3 2.3 Množina................................

Více

Přetěžování operátorů

Přetěžování operátorů Přetěžování operátorů Cíle lekce Cílem lekce je seznámit se s mechanizmem přetížení operátorů a s použitím tohoto mechanizmu při návrhu a implementaci programů. Po absolvování lekce budete: umět využívat

Více

Projekt Obrázek strana 135

Projekt Obrázek strana 135 Projekt Obrázek strana 135 14. Projekt Obrázek 14.1. Základní popis, zadání úkolu Pracujeme na projektu Obrázek, který je ke stažení na http://java.vse.cz/. Po otevření v BlueJ vytvoříme instanci třídy

Více

Kolekce, cyklus foreach

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

Více

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG 2008-9)

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG 2008-9) Programování v C++ Úplnej úvod Co se naučíte? tak samozřejmě C++, s důrazem na: dynamické datové struktury Objektově Orientované Programování STL (standardní knihovna šablon) vytváření vlastních šablon

Více

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování.

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování. Delphi lekce 6 Minimum z Object Pascalu Vrátíme se ještě k základům Object Pascalu. Struktura programu Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově

Více

UJO Framework. revoluční architektura beans. verze 0.80 http://ujoframework.org/

UJO Framework. revoluční architektura beans. verze 0.80 http://ujoframework.org/ UJO Framework revoluční architektura beans verze 0.80 http://ujoframework.org/ Pavel Pone(c), září 2008 Historie rok 2004 upravené objekty z frameworku Cayenne nevýhodou byla špatná typová kontrola rok

Více

Konvertor diakritiky 3. Instalace

Konvertor diakritiky 3. Instalace OBSAH Popis... 2 Ovládání aplikace... 3 Odstranění diakritických znamének... 4 Operace s textem... 4 Nastavení aplikace... 4 Písmo... 4 Jazyk... 4 Přidání dalšího jazyka do aplikace... 5 Znaky... 5 Instalace

Více

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

Jazyk C++ 1. Blok 3 Objektové typy jazyka C++ Třída. Studijní cíl. Doba nutná k nastudování. Průvodce studiem Jazyk C++ 1 Blok 3 Objektové typy jazyka C++ Studijní cíl Ve třetím bloku bude představen a rozebrán nejdůležitější objektový typ jazyka C++ a to sice třída. Po absolvování bloku bude student schopen navrhovat

Více

Datové struktury. alg12 1

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

Více

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

IUJCE 07/08 Přednáška č. 1 Úvod do předmětu Literatura Záznamy přednášek a vaše poznámky Harbison, S. P., Steele, G. L.: Referenční příručka jazyka C Herout, P.: Učebnice jazyka C Kernighan, B. W., Ritchie, D. M.: The C Programming

Více