Úvod. Často jsme nuceni řešit problémy, které by reflexe řešila jasněji, stabilněji a přehledněji. Změny v požadavcích na programové vybavení

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

Download "Úvod. Často jsme nuceni řešit problémy, které by reflexe řešila jasněji, stabilněji a přehledněji. Změny v požadavcích na programové vybavení"

Transkript

1 Reflexe_01

2 Úvod Často jsme nuceni řešit problémy, které by reflexe řešila jasněji, stabilněji a přehledněji. Změny v požadavcích na programové vybavení mohou být uskutečněny pouze za podmínky přijetí rozhodnutí a modifikování kódu vycházejícího ze struktury programu.

3 Reflexe Jedná se o kroky: 1. Přezkoumat strukturu programu a dat 2. Přijmout rozhodnutí na základě přezkoumání. 3. Změnit chování, strukturu nebo data programu na základě přijatého rozhodnutí. Změny musí být provedeny osobou sedící za klávesnicí, místo samotným programem běžícím na počítači.

4 class HelloWorld { public void printname() { System.out.println( this.getclass().getname()); Objekt třídy vytiskne jméno třídy (včetně balíčků). (new HelloWorld()).printName() HelloWorld x = new HelloWorld(); x.printname(); Obsaženy všechny předchozí body. Metoda printname() prozkoumává objekt ohledně jeho třídy. Během toho je provedeno rozhodnutí, co tisknout. Bez zastínění, metoda je aplikovatelná na všechny podtřídy třídy HelloWorld. Metoda printname() je flexibilní, přizpůsobí se třídě, která ji zdědí.

5 Reflection úvod Reflexe (reflection) je schopnost pracovat se třídami (typy) a datovými atributy tříd jako s objekty. Reflection patří mezi adaptivní návrhové vzory. Poskytuje mechanismus pro změnu struktury chování softwarových systémů dynamicky. Podporuje modifikaci základních aspektů jako je typ struktury a mechanismus volání funkcí.

6 Reflection -úvod Tento vzor dělí aplikaci na dvě části: meta úroveňposkytuje informace o vybraných vlastnostech systému a umožňuje tak, aby si SW uvědomoval sám sebe. základní úroveň obsahující aplikační logiku. Aplikace je vytvořena na meta úrovni(nad meta úrovní). Změny informací v meta úrovniovlivňují následně chování základní úrovně.

7 Úroveň metamodelu, modelu, dat a procesů

8 Vztahy mezi modely a metamodely Čtyřvrstvá hierarchie OMG Vztahy vrstev vyjádřeny pomocí relace instance_of

9 Kontext, problém Kontext: Budování programových systémů, které apriori podporují svoji vlastní modifikaci. Problém: Programové systémy se vyvíjejí v čase, by měly být otevřené modifikacímna základě změny technologií a požadavků. Pro programové systémy je lepší specifikovat jejich architekturu otevřenou k modifikacím a rozšíření.

10 Problém Při řešení problému působí následující síly : Změna softwareje namáhavá (úmorná), náchylná k chybám a drahá. Softwarové systémy schopné adaptacemají obyčejně složitou vnitřní strukturu. Implementace služeb aplikace je rozšířena na mnoho malých komponent s odlišným vzájemným vztahem. Nevhodné techniky pro akceptování změn systému např. parametrizace, subclassing, copy paste.

11 Problém Změny SW mohou mít libovolný rozsah. Mohou být měněny i základní aspekty celého systému.

12 Řešení Vytvořit samouvědomující SW (self aware) a učinit některé aspekty této struktury a chování dosažitelnými pro adaptaci a změny. Vede to ke struktuře: meta úroveň a základní Vede to ke struktuře: meta úroveň a základní úroveň.

13 Meta úroveň Meta úroveň poskytuje self-representation programové aplikace a tím poskytuje vědomosti o její vlastní struktuře a chování. Meta objekty zapouzdřují a prezentují informace o programové aplikaci. instanceof «metaclass» java.lang.class instanceof meta level Pes class objects base level instanceof fido

14 Základní úroveň Základní úroveň definuje aplikační logiku. Implementace používá metaobjekty, aby udržela nezávislé ty aspekty, u kterých je pravděpodobnost změn. Např. komponenty základní úrovně mohou spolu vzájemně komunikovat prostřednictvím metaobjektu, které implementuje konkrétní uživatelsky definovaný mechanismu volání funkcí. Existuje specifikované rozhranípro manipulaci s metaobjekty.

15 Struktura Meta úroveň je složena s množiny metaobjektů. Každý metaobjektzapouzdřuje vybrané informace o jednotlivých aspektech struktury, chování, nebo stavu základní úrovně. Jsou tři zdroje těchto informací: 1. Informace jsou poskytovány za běhu prostředím systému. 2. Informace mohou být definovány uživatelem anotace. 3. Informace mohou být zjištěny ze základní úrovně za běhu programu aktuální stav výpočtu.

16 Struktura Všechny metaobjekty spolu poskytují vlastní reprezentaci (self-representation) aplikace. Metaobjektyvytvářejíinformace, které jsou jinak dostupné pouze implicitně. Takto jsou explicitně přístupné a modifikovatelné. Např. v distribuovaných systémech mohou existovat metaobjekty, které poskytují informace o fyzickém rozmístění komponentzákladní úrovně. Poskytují zjištění, zda komunikující partner je lokální nebo globální.

17 Reflekce v Javě balíček java.lang.reflect

18 import java.lang.reflect.*;.*; public class DumpMethods { public static void main(string args[]) { try { Class c = Class.forName(args args[0]); Method m[] = c.getdeclaredmethods(); for (int ( i = 0; i < m.length; i++) System.out.println(m[ (m[i]. ].tostring tostring()); catch (Throwable ( e) { System.err.println(e); Výpis metod třídy java.util.stack Spuštění s jedním argumentem: java DumpMethods java.util.stack c je classobject (objekt třídy) Spou pouštění: java DumpMethods java.util.stack public synchronized java.lang.object java.util.stack.pop() public java.lang.object java.util.stack.push(java.lang.object java.lang.object) public boolean java.util.stack.empty() public synchronized java.lang.object java.util.stack.peek() public synchronized int java.util.stack.search(java.lang.object java.lang.object) 18

19 Využití reflexe v Javě Nastavení používání reflexe Tři kroku vedoucí k využití balíčku java.lang.reflect. 1. Získat classobjekt java.lang.class, se kterým se bude manipulovat. java.lang.classse používá k reprezentaci tříd a rozhraní v běžícím javovskémprogramu. Jednou z možností získání objektu třídy je: Class c = Class.forName("java.lang.String"); získá se Class object pro řetězce Jiný způsob: Class c = int.class; // or Class c = Integer.TYPE;

20 Využití reflexe v Javě to vede k získání informací o základních typech. 2. Druhým krokem je zavolat metodu např. getdeclaredmethods(), k získání seznamu všech metod deklarovaných ve třídě.

21 Využití reflexe v Javě 3. Po té co jsou informace k dispozici, je třetím krokem využití API reflexe k manipulaci s informacemi. Např. sekvence příkazů: Class c = Class.forName("java.lang.String"); Method m[] = c.getdeclaredmethods(); System.out.println(m[0].toString()); Zobrazí textově první informaci uvedenou v řetězci.

22 Reflexe v hierarchii tříd Javy instanceof «metaclass» java.lang.class instanceof meta level Pes class objects base level instanceof fido Objekt fidoje instance od třídy Pes. Třída Pesje instance od třídy Class. Třída Classje instancí třídy Class. Třída Classje metatřída, protože její instance jsou třídy.

23 package prvni; class A { public class Instance1 { public static void main(string args[]) { try { Class cls = Class.forName( prvni.a"); boolean b1 = cls.isinstance(new Integer(37)); System.out.println(b1); boolean b2 = cls.isinstance(new prvni.a()); System.out.println(b2); catch (Throwable e) { System.err.println(e); Simulace operátoru instanceof() názvy balíčků se musí také uvádět Výpis: false true

24 import java.lang.reflect.*;.*; public class DumpMethods { public static void main(string args[]) { try { Class c = Class.forName(args args[0]); Method m[] = c.getdeclaredmethods(); for (int ( i = 0; i < m.length; i++) System.out.println(m[ (m[i]. ].tostring tostring()); catch (Throwable ( e) { System.err.println(e); Výpis metod třídy java.util.stack Spuštění s jedním argumentem: java DumpMethods java.util.stack c je classobject (objekt třídy) Spou pouštění: java DumpMethods java.util.stack public synchronized java.lang.object java.util.stack.pop() public java.lang.object java.util.stack.push(java.lang.object java.lang.object) public boolean java.util.stack.empty() public synchronized java.lang.object java.util.stack.peek() public synchronized int java.util.stack.search(java.lang.object java.lang.object)

25 import java.lang.reflect.*; public class Method1 { private int f1( Object p, int x) throws NullPointerException { if (p == null) throw new NullPointerException(); return x; Vyhledání metod dané třídy 1/2 public static void main(string args[]) { try { // Class cls = Class.forName( Method1"); Method1 method1 = new Method1(); Class cls = method1.getclass(); Method methlist[] = cls.getdeclaredmethods(); for (int i = 0; i < methlist.length; i++) { Method m = methlist[i]; System.out.println("name = " + m.getname()); System.out.println("decl class = " + m.getdeclaringclass()); Class pvec[] = m.getparametertypes(); for (int j = 0; j < pvec.length; j++) System.out.println(" param #" + j + " " + pvec[j]);

26 Class evec[] = m.getexceptiontypes(); for (int j = 0; j < evec.length; j++) System.out.println("exc #" + j + " " + evec[j]); System.out.println("return type = " + m.getreturntype()); System.out.println("-----"); catch (Throwable e) { System.err.println(e); Vyhledání metod dané třídy 2/2 name = f1 decl class = class Method1 param #0 class java.lang.object param #1 int exc #0 class java.lang.nullpointerexception return type = int name = main decl class = class Method1 param #0 class [Ljava.lang.String; return type = void -----

27 import java.lang.reflect.*; public class Field1 { private double d; public static final int i = 37; String s = "testing"; Informace o datových atributech public static void main(string args[]) { try { // Class cls = Class.forName( Field1"); Field1 field1 = new Field1(); Class cls = field1.getclass(); Field fieldlist[] = cls.getdeclaredfields(); for (int i= 0; i < fieldlist.length; i++) { Field fld = fieldlist[i]; System.out.println("name = " + fld.getname()); System.out.println("decl class = " + fld.getdeclaringclass()); System.out.println("type = " + fld.gettype()); int mod = fld.getmodifiers();

28 System.out.println("modifiers = " + Modifier.toString(mod)); System.out.println("-----"); catch (Throwable e) { System.err.println(e); Informace o datových atributech name = d decl class = class Field1 type = double modifiers = private name = i decl class = class field1 type = int modifiers = public static final name = s decl class = class field1 type = class java.lang.string modifiers = -----

29 Význam reflexe Reflexeje schopnost běžícího programu zkoumat sám sebe, své programové okolí a měnit to co je závislé na výsledku zkoumání. K provádění sebezkoumání potřebuje mít program (knihovny) reprezentaci sama sebe. Těmto informacím se říká metadata. V OO světě jsou metadataorganizována v objektech nazývaných metaobjekty.

30 Význam reflexe Zkoumání sama sebe za běhu programu se nazývá introspekce (sebepozorování introspection). Existují tři možnosti, jak API reflexe může usnadnit změnu chování: 1. přímá modifikace metaobjektu 2. operace pro používání metadat(invokace dynamických metod)

31 Význam reflexe 3. intervenování (intercession) při němž je kódu dovoleno, aby intervenoval v různých fázích vykonávání programu. Java poskytuje bohatou řadu operací pro používání metadat, ale pouze několik důležitých schopností intervencí. Java se snaží vyhnout se komplikacím s přímou modifikací metaobjektů.

32 Význam reflexe Se znalostí reflexese modifikace kódu provádí daleko snadněji. Reflexe je mocná, ale není všespasitelná. Je třeba rozlišovat situace, kdy je reflexe absolutně nezbytná, od těch kdy její použití je výhodné, až po situace, kdy je třeba se jí vyhnout.

33 Příklad: implementace uživatelského rozhraní Java vizuální komponenty: vlastní, open source, třetí strana všechny komponenty integrované do uživatelského rozhraní. Každá komponenta poskytuje setcolor() má parametr java.awt.color. Jediná společná třída java.lang.object není společná třída na deklaraci setcolor().

34 Alternativy řešení Refaktorovatkomponenty pro implementaci společného rozhraní, deklarující setcolor(). neřeší standardní javovskékomponenty a komponenty třetí strany, open source nemusí změny akceptovat není podpora. Implementace adapteru pro každou komponentu. každý takový adapter musí implementovat společné rozhraní a delegovat volání setcolor() na komponentu.

35 Alternativy řešení velké množství tříd komponent způsobí velký počet tříd k údržbě, velký počet instancí za běhu programu. Použití metody instanceof() a přetypování za běhu programu nechává několik problémů údržby na dodavatelské firmě. způsobí nafouknutí kódu z důvodu podmínek a přetypování, kód se stane dvojicí s každým konkrétním typem

36 Alternativy řešení Každá z alternativ zahrnuje změny programu, které upraví nebo zjistí typ komponenty. V podstatě je třeba nalézt metodu setcolor() a vyvolat ji. Programování s využitím reflexe:

37 public static void setobjectcolor( Object obj, Color color ) { Class cls = obj.getclass(); //#1 try { Method method = cls.getmethod( "setcolor", //#2 new Class[] {Color.class ); method.invoke( obj, new Object[] {color ); //#3 catch (NoSuchMethodException ex) { //#4 throw new IllegalArgumentException( cls.getname() + " does not support" + "method setcolor(:color)"); catch (IllegalAccessException ex) { //#5 throw new IllegalArgumentException( "Insufficient access permissions to call" + "setcolor(:color) in class " + cls.getname()); catch (InvocationTargetException ex) { //#6 throw new RuntimeException(ex); #1 dotaz objektu na třídu #2 dotaz na setcolor(), která má argument Color (1,2 formy introspekce sebepoznání) #3vyvolání metody setcolor() erflektivní metoda dynamická invokace #4třída objektu neposporuje netodu setcolor() #5třída nemá privilegia přístupu vyvolat protected, packagenebo privatemodifikátor metody setcolor() #6vyvolaná metoda setcolor() vyhazuje výjimku

38 Alternativy řešení Dynamická invokace dovoluje vyvolat metodu objektu při jeho běhu. V příkladu se neví, kterou metodu setcolor() vyvolat. Předá se pouze objekt a parametr. Pro dynamickou invokaci je důležité mít dobře ošetřené chybové stavy. Každé zpracování za běhu programu mírně zvyšuje nároky na čas výpočtu, ale nijak podstatně.

39 Zkoumání běžících programů Reflexe je schopnost programu zkoumat a měnit svoje chování a strukturu za běhu programu. Přemýšlejme o introspekci (sebepoznání) jako pohledu do zrcadla na sebe sama. Zrcadlo poskytuje vaši reprezentaci ke zkoumání. Toto zkoumání dodává řadu užitečných informací.

40 Zkoumání běžících programů Např. jak jde barva košile k vašim kalhotám, nebo že máte něco zeleného na tváři to může změnit vaši garderobu a hygienu. Zrcadlo vám také řekne něco o vašem chování úsměv, přehánění gest.. To pak může vést ke změnámve vašem chování.

41 Introspekce programu (sebepozorování) K introspekci programu potřebujeme přístup k reprezentaci programu. Tato vlastní representace (selfrepresentation) je nejdůležitějším strukturálním prvkem systému reflexe. Zkoumáním vlastní reprezentace může program získat pravé informace o struktuřea chování k provedení důležitých rozhodnutí.

42 Introspekce programu (sebepozorování) V předchozím příkladu instance Class a Method jsou využity k nalezení vyvolání vhodné metody setcolor(). Tyto instance (objekty) jsou částí javovské vlastní reprezentace. Objekty, které jsou částí vlastní reprezentace se odkazujeme jako na metaobjekty.

43 Metadata Metadatajsou data o datech. Katalogizační lístek v knihovně obsahuje data o dané knize. Metadatadatabáze struktura databáze, názvy sloupců. Na webu by metadata zrychlila vyhledávání.

44 Introspekce programu (sebepozorování) Metaje předpona, znamenající za. Metaobjektyjsou objekty, které udržují informace o programu. Classa Methodjsou třídy, jejichž instance představují program. Odkazuje se na ně jako na třídy metaobjektů. Třídy metaobjektůtvoří většinu toho, co tvoří API reflexe Javy.

45 Introspekce programu (sebepozorování) Objekty, které jsou používány k doprovázení hlavní aplikace se nazývají objekty základní úrovně (base-level object).

46 Dog class object metalevel instanceof base level fido base/level object Dog je objekt třídy (classobject), metaobjekt, který představuje třídu Dog. Objekt fidoje instance třídy Dog. Relace instanceofspojuje objekt base levels objektem na úrovni metalevel.

47 Nalezení metody za běhu programu Class cls = obj.getclass(); metoda getclass() zabezpečí přístup k objektu třídy (objectclass) za běhu a vrací instanci třídy java.lang.class. Instance třídy Classjsou metaobjekty, které Java používá k reprezentaci tříd, které tvoří program. classobjekt objekt třídy je instancí od třídy java.lang.class.

48 Nalezení metody za běhu programu Classobjekty poskytují programování metadatjako datových atributů, metod, konstruktorů a vnořených tříd. Classobjekty také poskytují informace o Classobjekty také poskytují informace o hierarchii dědičnosti a poskytují přístup k reflektivním prostředkům.

49 Vyvolání metody Method method = cls.getmethod ( setcolor, new Class[] {Color.class); První parametr - řetězec požadované metody. Druhý parametr pole classobjects(objektů tříd) které identifikují parametry metod. Konkrétně jeden parametr typu Color. Jakýkoli název třídy následovaná.classse vyhodnotí jako objekt třídy (class object).

50 Metody třídy Classpro dotazy Metoda MethodgetMethod(String name, Class[] parametertypes) Method[] getmethods() Method getdeclaredmethod( Stringname, Class[] parametertypes) Popis Vrací objekt Method (deklarovaný nebo zděděný), kterýpředstavuje cílový Classobjekt (objekt třídy) spolu se signaturou druhého parametru. Vrací pole objektů třídy Methodjak deklarovaných, tak zděděných. Vrací objekt typu Method, který představuje deklarovanou metodu a signaturu specifikovanou ve druhém parametru. Method[] getdeclaredmethods() Vrací pole objektůtřídy Method, které představují všechny metody deklarované v cílové třídě Class objektu.

51 Reprezentace typů pomocí class objects objektů třídy Class null představuje pole nulové délky. Reflexe Javy používá instance třídy Classk reprezentaci typů. Java reprezentuje primitivní typy, pole a rozhraní také pomocí classobjects(objektů tříd). Omezení: není možné vytvářet nové instance od primitivních typů a rozhraní.

52 Metody třídy Classpro práci s reprezentaci typů ClassgetName() Metoda ClassgetComponentType() Popis Vrací plně kvalifikované jméno cílového objektu třídy. Je-li cílovýobjekt classobjectpro pole, vrací objekt Class reprezentující typ komponenty. boolean isarray() boolean isinterface() Vrací true, je-li cílový class object polem. Vrací true, je-li cílový class object rozhraním. booleanisprimitive() Vrací true, je-li cílový classobjectprimitivním typem nebo void.

53 Reprezentace primitivních typů Classobjekty (objekty tříd) reprezentují všech 8 primitivních typů. Methodm= Vector.class.getMethod( get, new Class[] {int.class); Klíčovéslovovoidnení v Javě typem (použití v metodách nic nevracející). Java má ale class objekt pro reprezentaci void. Metoda isprimitive() vrací truepro void.class.

54 Reprezentace rozhraní Java má classobjekt pro reprezentaci každého deklarovaného rozhraní. Tyto classobjekty mohou být využity pro indikaci parametrů pro typ rozhraní. Metoda addall() bere implementaci rozhraní Collection jako argument. Methodm = Vector.class.getMethod( addall, new Class[] {Collection.class);

55 Reprezentacetypupolí V Javě jsou objekty polí, ale jejich třídy jsou vytvořeny JVM za běhu programu. Javovskétřídy arrayimplementují rozhraní Cloneable a java.io.serializable. Ke specifikaci jednorozměrného pole objektů použijeme: Object[].class. Method m = Vector.class.getMethod( copyinfo, new Class[] {Object[].class);

56 java.lang.reflect.method Metoda Popis ClassgetDeclaredClass() Class[] getexceptiontypes() Vrací Classobjekt, který deklaruje metodu reprezentovanou tímto objektem Method. Vrací pole Classobjektů, které představují typy výjimek, deklarované v objektu Method. intgetmodifiers() String getname() Class[] getparametertype() Vrací modifikátorymetody zakódované do typu int. Vrací jméno metody představované tímto Methodobjektem. Vrací pole Classobjektů reprezentující formální parametry v deklarované pořadí. Class getreturntype() VracíClassobjekt reprezentující typ vracený metodou reprezentovanou objektem Method. Object invoke(object obj, Object[] args) Vyvolává metodu reprezentovanou objektem Method s polem parametrů.

57 Použití dynamického vyvolávání (dynamicinvocation) Dynamická invokace dovoluje programu vyvolat metodu, objektu za běhu programu bez specifikace této metody v době kompilace. Nevíme kterou metodu setcolor() vyvolat během zápisu programu. method.invoke(obj, new Object[] {color); Proměnná colorobsahuje proměnnou typu Color.

58 Dynamické vyvolávání Je-li metoda setcolor()deklarovaná jako třídní (static), pak objse nebere do úvahy, může být null.

59 Primitivní typy a dynamická invokace Druhý parametr invokace je Object array. Je-li typ parametru primitivní, metoda invoke() předpokládá odpovídající pole args prvků, bude zabaleno do obalujícího objektu, který obsahuje argument. intparametr bude zabalen do java.lang.integera předán do pole args.

60 Primitivní typy a dynamická invokace Primitivní typy musí být převedeny na obalové typy a převedeny na primitivní typy když jsou vráceny. Method m = obj.getclass().getmethod( hashcode, null); ProzkoumánímetodyhashCode(), která nemá parametry.

61 Primitivní typy a dynamická invokace int code = ((Integer) method.invoke(obj, null)); Zaznamenání hash kódu dané metody.

62 Problémy invokace a jejich řešení Metoda musí být invokovaná na objekt, jehož instance byla deklarovaná ve třídě, jinak výjimka IlllegalArgumentException. Metodu setcolor() nelze cashovat. Každá metoda je v Javě identifikovaná jak její signaturou, tak deklarovanou třídou.

63 Grafické znázornění Java rozlišuje metody setcolor() jako dvě různé. Metoda setcolor() je stejná pro Animal a pro Dog. Metoda setcolor() je různá pro Animal a Shape.

64 Problémy invokace a jejich řešení Pokud třída vyvolávající metodu invoke() nemá odpovídající privilegia pro metodu, je vyhozena výjimka IllegalArgumentException, např. metoda private je volána vně dané třídy. Výjimku IllegalArgumentException může vyvolat: daná třída nemá uvedenou metodu, pole args má nesprávnou velikost

65 Problémy invokace a jejich řešení je-li nějaká výjimka vyvolaná invokovanou metodou, je výjimka zabalena do InvocationTargetExceptiona potom vyhozena.

66 dolly je klonovaná ovce. Objekt dolly je instance třídy Sheep. Třída Sheepje podtřídou Mammela implementuje rozhraní Cloneable.

67 Navigace hierarchií dědičnosti Reflektivnímetodaje zděděná a má modifikátor protected, takže není dostupná. Method m = cls.getmethod( setcolor, new Class[] {Color.class); Napsat metodu, která prochází také hiearchií dědičnosti.

68 public static Method getsupportedmethod( Class cls, String name, Class[] paramtypes) throws NoSuchMethodException { if (cls == null) { throw new NoSuchMethodException(); try { return cls.getdeclaredmethod( name, paramtypes ); catch (NoSuchMethodException ex) { return getsupportedmethod( cls.getsuperclass(), name, paramtypes ); Metoda getsupported() je rekurzivní metoda, která traverzuje hierarchii dědičnosti a hledá metodu s odpovídající signaturou. Metoda vrací Class objekt, který představuje zděděnou třídu. Pokud neexistuje taková třída, vrací se třída Object, na kterou metoda getsupportedmethod() vrací null.

69 public static void setobjectcolor( Object obj, Color color ) { Class cls = obj.getclass(); try { Method method = Mopex.getSupportedMethod( cls, "setcolor", new Class[] {Color.class ); method.invoke( obj, new Object[] {color ); catch (NoSuchMethodException ex) { throw new IllegalArgumentException(cls.getName() + " does not support" + "method setcolor(:color)"); catch (IllegalAccessException ex) { throw new IllegalArgumentException( "Insufficient access permissions to call" + "setcolor(:color) in class " + cls.getname()); catch (InvocationTargetException ex) { throw new RuntimeException(ex); Tento kód dovoluje metodě setcolor() zpřístupnit metaobjekty s modofikátoryprivate, packagea protected, které nezpřístupní metoda getmethod(). Toto řešení ale negarantuje přístup k invokované metodě. Pokud nemá metoda setobjectcolor() přístup k zděděné metodě, kde to chceme používat, vyhodí se výjmka IllegalAccessException.

70 Metody pro introspekci hierarchie (sebepozorování) Metoda Class[]getInterface() ClassgetSuperClass() booleanisassignablefrom(classcls) booleanisinstance(object obj) Popis Vrací pole Class objektů, které představují přímé nadrozhranídaného Class objektu. Vrací Classobjekt, který představuje přímou nadtřídu daného Classobjektu, nebo nullje-li Classobjekt třída Objectnebo void. Vrací true, je-li třída nebo rozhraní reprezentované cílovým Classobjektem je buď stejné nebo nadtřída nebo nadrozhraníspecifikovaného parametru Class. Vrací true, je-li specifikovaný Objectje přiřazením kompatibilní s objektovou reprezentací cílového objektu Class.

71 x.isassignablefrom(y) Object.class.isAssignableFrom(String.class); double.class.isassignablefrom(double.class); vyhodnocení true Object.class.isAssignableFrom(double.class); vyhodnocení false

72 Překvapení Metoda isinstance() má zajímavé použití: Class.class.isInstance(Class.class) true To znamená, že classobjekt pro Classje instance sama sebe, což vede ke kruhové závislosti. Classje příkladem metatřídy, která se používá k označení tříd, jejichž instance jsou třídy.

73 Reflexev hierarchiitříd Javy Objekt fidoje instance od třídy Pes. Třída Pesje instance od třídy Class. Třída Classje instancí třídy Class. Třída Classje metatřída, protože její instance jsou třídy.

74 Reflexe v hierarchii tříd Javy Třída Object nejvyšší třída v hierarchii, metaclasses jsou podtřídami třídy Object. 1. To znamená, že metody třídy Object jsou součástí API reflexe.

75 Reflexe v hierarchii tříd Javy 2. Všechny javovské třídy jsou instancemi od jedné metatřídy Class. Tyto dvě podmínky vytvářejí cyklus v diagramu. Class.class.isInstance(Object.class); true Object.class.isAssignableFrom(Class.class); true

76 Reflexe v hierarchii tříd Javy V Javě má každý objekt jednu třídu, která vytváří instance a všechny třídy jsou podtřídami třídy Object. Třída Object je částí API reflexe. Všechny metatřídy jsou podtřídami třídy Object. Každá z metod reflexe může být používaná v reflektivním programování.

77 Shrnutí Reflexe dovoluje programu prozkoumat sám sebe a dělat změny do své struktury a chování za běhu programu. Metaobjektytříd Classa Methodreprezentují třídy a metody běžícího programu. Jiné metaobjektyreprezentují jiné části programu jako např. datové atributy, zásobníky volání a loader.

78 Shrnutí Classmá další metody, které podporují tyto jiné metaobjekty. Zjišťování informací z těchto metaobjektůse nazývá introspekce (pozorování sebe sama). Metaobjektytako dovolují dynamickou invokaci metod. Řešení s využitím reflexe začíná zjišťováním informací o běžícím programu z metaobjektů.

79 Shrnutí Po zjištění těchto informací, reflektivní program použije tyto informace na dělání změn v běžícím programu.

80 Volání metodypodle jména Program chce vyvolat metodu add(),ale neví to, až do doby běhu programu. To znamená, že jméno metody je určeno až za běhu programu viz, následující program. metoda getmethod()se používá k nalezení metody ve třídě, která má dva integerparametrya odpovídající jméno. po jejím nalezení je přiřazena do objektu Method k vyvolání metody se musí vytvořit seznam parametrů s odpovídajícími integer hodnotami.

81 import java.lang.reflect.*; public class Method2 { public int add(int a, int b) { return a + b; public static void main(string args[]) { try { Method2 method2 = new Method2(); Class cls = method2.getclass(); Class partypes[] = new Class[2]; partypes[0] = Integer.TYPE; // deklarace partypes[1] = Integer.TYPE; Method meth = cls.getmethod( "add", partypes); // dana metoda s uvedenymi parametry Method2 methobj = new Method2(); Object arglist[] = new Object[2]; // počet argumentů arglist[0] = new Integer(37); arglist[1] = new Integer(47); Object retobj = meth.invoke(methobj, arglist); Integer retval = (Integer)retobj; System.out.println(retval.intValue()); catch (Throwable e) { System.err.println(e); Vyvolání (exekuce) metody podle jména Výpis vrací součet zadaných parametrů: 84

82 import java.lang.reflect.*; public class Constructor2 { public Constructor2() { Vytváření nových objektů 1/2 public Constructor2(int a, int b) { System.out.println( "a = " + a + " b = " + b); public static void main(string args[]) { try { Class cls = Class.forName( Constructor2"); Class partypes[] = new Class[2]; partypes[0] = Integer.TYPE; partypes[1] = Integer.TYPE; Constructor ct = cls.getconstructor(partypes);

83 Object arglist[] = new Object[2]; arglist[0] = new Integer(37); arglist[1] = new Integer(47); Object retobj = ct.newinstance(arglist); catch (Throwable e) { System.err.println(e); Vytváření nových objektů 2/2 Výpis a = 37 b = 47

SW_06. Reflexe (reflection)

SW_06. Reflexe (reflection) SW_06 Reflexe (reflection) 1 Úvod Často jsme nuceni řešit problémy, které by reflexe řešila jasněji, stabilněji a přehledněji. Změny v požadavcích na programové vybavení mohou být uskutečněny pouze za

Více

APNVZ_4 Adaptivní návrhové vzory. Microkernel Reflexe (reflection)

APNVZ_4 Adaptivní návrhové vzory. Microkernel Reflexe (reflection) APNVZ_4 Adaptivní návrhové vzory Microkernel Reflexe (reflection) 1 Microkernel - úvod Microkernel se používá pro programové systémy, které musí být schopné se adaptovat na měnící se požadavky systému.

Více

Reflexe. Aplikační programování v Javě (BI-APJ) - 8 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Reflexe. Aplikační programování v Javě (BI-APJ) - 8 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha Reflexe Aplikační programování v Javě (BI-APJ) - 8 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha Evropský sociální fond Praha & EU: Investujeme do vaší

Více

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

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ů

Více

Úvod do programovacích jazyků (Java)

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

JAVA. Reflection API

JAVA. Reflection API JAVA Reflection API 1 Přehled Reflection Mění strukturu/stav objektů Introspection Zkoumá strukturu objektů obdoba RTTI v C++ ale mnohem silnější umožňuje zjišťování informací o třídách, atributech, metodách

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

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

Více

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

Reflexe RTTI Runtime Type Identification

Reflexe RTTI Runtime Type Identification Vaše jistota na trhu IT Reflexe RTTI Runtime Type Identification Rudolf PECINOVSKÝ rudolf@pecinovsky.cz Vaše jistota na trhu IT Opakování Shrnutí či téma Co je to reflexe/rtti Termínem Reflexe označujeme

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

Reflexe_03. Používání dynamického proxy

Reflexe_03. Používání dynamického proxy Reflexe_03 Používání dynamického proxy Použití dynamického proxy jak používat java.lang.refrect.proxy použití proxy k implementaci dekorátorů řetězení proxy skryté nebezpečí využívání proxy 2 Úvod Ukrývání

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

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

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í

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Struktura programu Vytvoření nové aplikace Struktura programu Základní syntaktické elementy První aplikace Verze pro akademický rok 2012/2013 1 Nová aplikace NetBeans Ve vývojovém

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

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

8 Třídy, objekty, metody, předávání argumentů metod 8 Třídy, objekty, metody, předávání argumentů metod 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 třídám a objektům, instančním

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

Soubor jako posloupnost bytů

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í

Více

KTE / ZPE Informační technologie

KTE / ZPE Informační technologie 4 KTE / ZPE Informační technologie Ing. Petr Kropík, Ph.D. email: pkropik@kte.zcu.cz tel.: +420 377 63 4639, +420 377 63 4606 (odd. informatiky) Katedra teoretické elektrotechniky FEL ZČU Plzeň Největší

Více

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ 4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ OBJEKT Program v Javě je staticky strukturován na třídy, jejichž instance (objekty) za běhu dynamicky programu vznikají a zanikají. Objekt je nejprve

Více

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

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

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

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám. 13 Rozhraní, výjimky 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 rozhraním a výjimkám. Doba nutná k nastudování 2 2,5 hodiny

Více

9. přednáška - třídy, objekty

9. přednáška - třídy, objekty třída String a její použití kolekce, typované kolekce 9. přednáška - třídy, objekty Algoritmizace (Y36ALG), Šumperk - 9. přednáška 1 Třída String Objekty knihovní třídy String jsou řetězy znaků Od ostatních

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

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

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

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ů

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

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

Seminář Java IV p.1/38

Seminář Java IV p.1/38 Seminář Java IV Seminář Java IV p.1/38 Rekapitulace Deklarace tříd Proměnné, metody, konstruktory, modifikátory přístupu Datové typy primitivní, objektové, pole Dědičnost Řídící konstrukce Podmínky, cykly

Více

RMI Remote Method Invocation

RMI Remote Method Invocation 2. cvičení RMI Remote Method Invocation 2007/09 ver.2.0 1 RMI co to je? vyvolání metody z jiné JVM lokalizace vzdáleného objektu komunikace se vzdálenými objekty přenos objektu v bytecode typicky klient

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

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

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ů

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

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

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ů

Více

17. Projekt Trojúhelníky

17. Projekt Trojúhelníky Projekt Trojúhelníky strana 165 17. Projekt Trojúhelníky 17.1. Základní popis, zadání úkolu Pracujeme na projektu Trojúhelníky, který je ke stažení na java.vse.cz. Aplikace je napsána s textovým uživatelským

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

Pokročilé programování na platformě Java. Úvod

Pokročilé programování na platformě Java. Úvod Pokročilé programování na platformě Java Úvod O předmětu Petr Hnětynka hnetynka@d3s.mff.cuni.cz http://d3s.mff.cuni.cz/teaching/vsjava/ pokračování "Javy (NPRG013)" předpokládá se základní znalost Javy

Více

Java Výjimky Java, zimní semestr

Java Výjimky Java, zimní semestr Java Výjimky 1 Výjimky (exceptions) hlášení a ošetření chyb výjimka signalizuje nějaký chybový stav výjimka = instance třídy java.lang.throwable dvě podtřídy java.lang.error a java.lang.exception konkrétní

Více

Dědičnost (inheritance)

Dědičnost (inheritance) Dědičnost (inheritance) Úvod Umožňuje objektům převzít (zdědit) členy jiných objektů a pouze je rozšířit o Auto: lze odvodit Vztah je osobní auto, cisterna jsou auta Základní pojmy Bázová třída (rodič)

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

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

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

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

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

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

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20 Obsah 5 Obsah Předmluva k aktuálnímu vydání 15 1 Úvod k prvnímu vydání z roku 2000 16 Typografické a syntaktické konvence................ 20 2 Základní pojmy 21 2.1 Trocha historie nikoho nezabije................

Více

Základy objektové orientace I. Únor 2010

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

Více

Java - výjimky. private void vstup() throws IOException {... }

Java - výjimky. private void vstup() throws IOException {... } Java - výjimky Tato kapitola ukazuje na několika příkladech práci s výjimkami v Javě. Klíčové pojmy: Výjimka, hierarchie výjimek, zachytávání výjimek, blok try-catch, tvorba vlastních výjimek, propagace

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

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

Úvod do programování - Java. Cvičení č.4

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

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

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue. 23. Třídy, generické třídy, instance, skládání, statické metody a proměnné. Zapouzdření, konstruktory, konzistence objektu, zpřístupnění vnitřní implementace, modifikátory public a private. Polymorfismus,

Více

8. přednáška: Soubory a proudy

8. přednáška: Soubory a proudy 8. přednáška: Soubory a proudy Soubor jako posloupnost bytů Ukládání/čtení primitivních typů Ukládání/čtení primitivních typů a objektů (řetězců) Ukládání/čtení objektů do souboru - serializace Obsah Algoritmizace

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

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

Principy objektově orientovaného programování

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

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

OOPR_05. Případové studie

OOPR_05. Případové studie OOPR_05 Případové studie 1 Přehled probírané látky příklad skládání objektů - čára příklad skládání objektů kompozice a agregace přetížené konstruktory pole jako datový atribut 2 Grafický objekt - čára

Více

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

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)

Více

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25 Seminář Java Výjimky Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Výjimky 1/ 25 Výjimky Co a k čemu jsou výjimky výjimka je mechanizmus umožňující psát robustní, spolehlivé

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

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

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ů

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

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

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ů

Více

Abstraktní třída a rozhraní

Abstraktní třída a rozhraní Abstraktní třída a rozhraní Někdy se může stát, zejména při psaní v hierarchické struktuře hodně nadřazených tříd, že tušíme, že bude ve zděděných třídách vhodné použít nějakou metodu. Tuto metodu ještě

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

Objektově orientované programování

Objektově orientované programování Objektově orientované programování Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Přednáška 7 A0B36PR1 Programování 1 Jan Faigl, 2015 A0B36PR1 Přednáška 7: Objektově

Více

Úvod do programovacích jazyků (Java)

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

Úvod do programovacích jazyků (Java)

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

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu. Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus

Více

Parametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics

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

Více

JAVA. Krátce o Reflection API

JAVA. Krátce o Reflection API JAVA Krátce o Reflection API 1 Přehled reflection, introspection umožňuje zjišťování informací o třídách, atributech, metodách vytváření objektů volání metod... balík java.lang.reflect třída java.lang.class

Více

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

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ů

Více

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

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

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

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

int t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ;

int t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ; Pole Příklad: přečíst teploty naměřené v jednotlivých dnech týdnu, vypočítat průměrnou teplotu a pro každý den vypsat odchylku od průměrné teploty Řešení s proměnnými typu int: int t1, t2, t3, t4, t5,

Více

Platformy NetBean a Eclipse. Úvod

Platformy NetBean a Eclipse. Úvod Platformy NetBean a Eclipse Úvod O předmětu Petr Hnětynka hnetynka@d3s.mff.cuni.cz Pavel Parízek parizek@d3s.mff.cuni.cz http://d3s.mff.cuni.cz/~hnetynka/netbeans předpokládá se znalost Javy (alespoň v

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

5 Přehled operátorů, příkazy, přetypování

5 Přehled operátorů, příkazy, přetypování 5 Přehled operátorů, příkazy, přetypování Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně budou uvedeny detaily týkající se operátorů. Doba nutná k nastudování

Více

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text()); Anotace a Hibernate Aleš Nosek, Ondřej Vadinský, Daniel Krátký Anotace v Javě Anotace jsou novinkou v Javy verze 5. Anotace umožňují doplnit kód Javy o dodatečné informace. Zapisují se přímo do zdrojového

Více

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC OMO 4 - Creational design patterns A Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC Ing. David Kadleček, PhD. kadlecd@fel.cvut.cz, david.kadlecek@cz.ibm.com 1 Creational

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

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

5 Rekurze a zásobník. Rekurzivní volání metody

5 Rekurze a zásobník. Rekurzivní volání metody 5 Rekurze a zásobník Při volání metody z metody main() se do zásobníku uloží aktivační záznam obsahující - parametry - návratovou adresu, tedy adresu, kde bude program pokračovat v metodě main () po skončení

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

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

Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object.

Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object. Objekty v PHP 5.x This is an object-oriented system. If we change anything, the users object. Objektové PHP Objekty se poprvé objevili v PHP ve verzi 4. Nepříliš zdařilý pokus. Programátoři získali nedůvěru

Více

TÉMATICKÝ OKRUH Softwarové inženýrství

TÉMATICKÝ OKRUH Softwarové inženýrství TÉMATICKÝ OKRUH Softwarové inženýrství Číslo otázky : 24. Otázka : Implementační fáze. Postupy při specifikaci organizace softwarových komponent pomocí UML. Mapování modelů na struktury programovacího

Více

Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo

Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo Viditelnost Přístup ke třídám i jejim prvkům lze (podobně jako např. v C++) regulovat. Přístupem se rozumí jakékoli použití dané třídy, prvku

Více

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

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

Více

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

Komponenty v.net. Obsah přednášky 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 Rozdíl mezi COM a.net Distribuce komponent Programování

Více

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

Java Cvičení 01.  CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics Java Cvičení 01 http://d3s.mff.cuni.cz CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics Příklady - Porovnání Co kód vypíše? package cz.cuni.mff.java.example01.tests; public class Test01

Více

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová Programové konvence, dokumentace a ladění 2. přednáška Alena Buchalcevová Proč dodržovat programové konvence? velkou část životního cyklu softwaru tvoří údržba údržbu provádí většinou někdo jiný než autor

Více