Reflexe_02. Přístup k datovým atributům třídy pomocí reflexe

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

Download "Reflexe_02. Přístup k datovým atributům třídy pomocí reflexe"

Transkript

1 Reflexe_02 Přístup k datovým atributům třídy pomocí reflexe

2 Přístup k datovým atributům třídy pomocí reflexe využití prozkoumání rozhraní, prozkoumání datových atributů, přístup a modifikace datových atributů, přístup k neveřejným (non public) datovým atributům. 2

3 Testování serializovatelnosti Testing for Serializability příklad testuje, zda třída objektu, nebo libovolná nadtřída implementovala rozhraní Serializable pomocná třída má pouze statickoumetodu isserializable() SerializableTester.isSerializable( java.util.calendar.getinstance()); SerializableTester.isSerializable( new Object());

4 import java.io.serializable; public class SerializableTester { private static final String serial = "java.io.serializable"; public static boolean isserializable( Object obj ) { if ( obj == null ) return false; Class c = obj.getclass(); do { Class[ ] ifaces = c.getinterfaces(); for ( int i = 0; i < ifaces.length; i++ ) if ( serial.equals( ifaces[ i ].getname() ) ) return true; c = c.getsuperclass(); while ( c!= null ); // cykluj, dokud trida je Object return false; Metoda getclass() deklarovaná ve třídě Object metoda getinterface() vrací pole rozhraní metoda getsuperclass() vrací nadtřídu 4

5 public class SerializableTest { public static void main(string[] args) { boolean q = SerializableTester.isSerializable( java.util.calendar.getinstance()); if(q) System.out.println("Calendar je serializovatelny"); else System.out.println("Calendar neni serializovatelny"); q = SerializableTester.isSerializable(new Object()); if(q) System.out.println("Object je serializovatelny"); else System.out.println("Object neni serializovatelny"); Výpis Calendar je serializovatelný Object není serializovatelný 5

6 Serializaceobjektů Uložení a rekonstrukce objektů z binárního formátu. Výhody pro uživatelskou serializaci: binární formát zobrazit ve web prohlížeči, nutnost implementace rozhraní Serializable problém third-part libraries, neimplementují rozhraní, použití serializacepouze uvnitř platformy Java. 6

7 Serializacedo XML použití XML jako formátu serializaceřeší všechny předchozí nevýhody obecná podpora XML element: <zoo> <animal>panda</animal> <animal>giraffe</animal> </zoo> <tag-name attribute-name= attribute value /> 7

8 Serializacedo XML soubor, řetězecnebostream zpracovaný podle XML dokument dokument má rootelement (kořenový element) 8

9 Návrh serializaces využitím reflexe metoda serializeobject(object) serializuje parametr - podmínky 1. získat serializovaný objekt parametr metody, 2. nalézt deklarovanou třídu objektu a jména datových atributů, 3. získat hodnotu každého datového atributu, 4. je-li datový atribut objektem, který nebyl serializovaný, provést jeho serializaci, 5. primitivní atribut uložit, aby byl snadno obnovený. 9

10 Získání datových atributů za běhu Metoda Popis Field getfield(string name) Vrátíobjekt Field, který představuje specifikovaný public atribut třídy nebo rozhraní podle objektu třídy (Class objektu) Field[] getfields() Field getdeclaredfield( String name) Vrací pole objektůfield, které představují všechny přístupné public atributy třídy nebo rozhraní podle objektu třídy (Class objektu) Vrací objekt Field, který představuje specifikovaný deklarovaný atribut třídy nebo rozhraní, reprezentovaný tímto objektem třídy Field[] getdeclaredfields() Vrací pole objektůfield, které představují každý deklarovaný atribut třídy nebo rozhraní tohoto objektu třídy. 10

11 Class cls = obj.getclass(); List accum = new LinkedList(); while (cls!= null) { Field[] f = cls.getdeclaredfields(); for(int i=0; i< f.length; i++) { accum.add(f[i]); cls = cls.getsuperclass(); Field[] allfields = (Field[]) accum.toarray(new Field[accum.size()]); Podstatná část kódu, která řeší problém 11

12 Pochopení objektů datových atributů Datový atribut specifikovaný jménem třídy a jménem atributu řeší stejná jména atributů v nadtřídách. getdeclaredfirlds()vrací objekt java.lang.reflect.field. MetaobjektFieldpředstavuje konkrétní datový atribut třídy. MetaobjektFieldposkutujemetadatao jménu atributu, deklarované třídy a modifikátorech. 12

13 Metody metaobjektufield Metoda Class gettype() Popis Vrací objekt Class, který představuje deklarovaný typ pro datový atribut, reprezentovaný tímto objektem Field. Class getdecklaringclass() Vrací objekt Class, který deklaroval atribut reprezentovaný tímto objektem Field. String getname() int getmodifiers() Object get(object obj) Booealn getboolean(object obj) Vrací jméno datového atributu reprezentovaného tímto objektem Field. Vrací modifikátorypro datový atribut reprezentovaný tímto objektem Field, kódovaným do int. Vrací hodnotu specifikovaného objektu atributu reprezentovaného pomocí tohoto objektu Field. Vrací hodnotu specifikovaného objektu boolovskéhoatributu reprezentovaného tímto Field. 13

14 MetaobjektField Pokud proměnná fieldukazuje na objekt Field, můžeme dostat hodnoty, které ji jednoznačně identifikují: String fieldname = field.getname(); String fielddeclclass = field.getdeclaringclass().getname(); 14

15 Přístupa modifikacehodnot datových atributů get/set metody K úspěšné serializaciobjektu musí být uloženy datové atributy. Pokud fieldodkazuje na objekt fieldodpovídající třídy objektu obj, pak přístup: Object value = field.get(obj); field.set(obj, value); Primitivní typy vrací jako obalové typy. IllegalArgumentException 15

16 Modifikátory Třídní (statické) atributy nechceme serializovat. V Javě existuje devět modifikátorů: public static native volatile protected abstract synchronize strictfp private final transient 16

17 Modifikátory statická boolovská metoda pro zjištění: static boolean ispublic(int mod) Vrací true, pokud parametr modmá nastavený bit na ispublic int getmodifiers() Modifier.isStatic(field.getModifiers() ); Vrací true, jedná-li se o třídní modifikátor 17

18 public static Field[] getinstancevariables(class cls) { List accum = new LinkedList(); while (cls!= null) { Field[] fields = cls.getdeclaredfields(); for (int i=0; i<fields.length; i++) { if (!Modifier.isStatic(fields[i].getModifiers())) { accum.add(fields[i]); cls = cls.getsuperclass(); Field[] retvalue = new Field[accum.size()]; return (Field[]) accum.toarray(retvalue); Závěrečné pole obsahuje množinu netřídních (nestatických) datových atributů třídy 18

19 Přístup k atributům non-public Kontrola přístupu k datovým atributům nonpublic může být potlačena. To umožní přístup k protected, packagea private. Třída java.lang.reglect.accessibleobjectje rodičovskou třídou pro třídy Field a Method. Třída AccessibleObjectmá metodu setaccessible(), která potlačí/umožní kontrolu. 19

20 Přístup k atributům non-public field.setaccessible(true); potlačí kontrolu modifikátorů přístupu if (!Modifier.isPublic(field.getModifiers())) { field.setaccessible(true); Object value = field.get(); Vykonánezbytný přístup pro reflektivní serializaci. 20

21 Metody deklarované objektem AccessibleObject Metoda void setaccessible( boolean flag) booleanisaccessible() static void setaccessible( AccessibleObject[] array, boolean flag) Popis Nastavuje příznakpříjemce na hodnotu danou parametrem. Vrací truepouze tehdy, je-li příznak objektu příjemce true. Nastavuje přístupové příznaky všech prvků pole objektu příjemce. 21

22 Práce s poli Metoda isarray() třídy Objectodpoví true/false. Pole se obecně přetypovávají na Object[]. Pole primitivních hodnot neumožňují uvedené přetypování. Cesta jak pracovat s poli objektů a primitivních typů jednotně. 22

23 Práce s poli Třída java.lang.reflect.array vhodný prostředek pro práci s reflexí na polích. int length = Array.getLenght(obj); Zjištění délky pole. Array.get(obj,i); Zpřístupnění daného objektu pole. 23

24 public static Document serializeobject( Object source ) throws Exception { return serializehelper( source, new Document( new Element("serialized") ), new IdentityHashMap() ); private static Document serializehelper( Object source, Document target, Map table ) throws Exception { String id = Integer.toString( table.size() ); //#1 table.put( source, id ); //#1 Class sourceclass = source.getclass(); //#1 Element oelt = new Element("object"); //#2 oelt.setattribute( "class", sourceclass.getname() ); //#2 oelt.setattribute( "id", id ); //#2 target.getrootelement().addcontent(oelt); //#2 #1Vytváří jedinečný identifikátor objektu pro jeho serializaci. #2 Vytváří element XML pro objekt 24

25 if (!sourceclass.isarray() ) { //#3 Field[] fields = Mopex.getInstanceVariables(sourceclass); //#4 for (int i=0; i<fields.length; i++) { //#4 if (!Modifier.isPublic(fields[i].getModifiers()) ) //#5 fields[i].setaccessible(true); //#5 Element felt = new Element("field"); //#6 felt.setattribute( "name", fields[i].getname() ); //#6 Class declclass = fields[i].getdeclaringclass(); //#6 felt.setattribute( "declaringclass", //#6 declclass.getname() ); //#6 //#6 Class fieldtype = fields[i].gettype(); //#6 Object child = fields[i].get(source); //#6 //#6 if ( Modifier.isTransient(fields[i].getModifiers()) ){ //#6 child = null; //#6 //#6 felt.addcontent( serializevariable( fieldtype, child, //#6 target, table)); //#6 //#6 oelt.addcontent(felt); //#6 #3Pracuje s poli odlišně než se skaláry #4získání netřídních atributů (nonstatic) #5Je-li třeba, dovolí přístup. #6Vytváří nové elementy XML 25

26 else { Class componenttype = sourceclass.getcomponenttype(); //#7 //#7 int length = Array.getLength(source); //#7 oelt.setattribute( "length", Integer.toString(length) ); //#7 //#7 for (int i=0; i<length; i++) { //#7 oelt.addcontent( serializevariable( componenttype, //#7 Array.get(source,i), //#7 target, //#7 table ) ); //#7 //#7 return target; #7 Přidává komponenty pole 26

27 Serializacekaždé komponenty 1. Je vytvořen jedinečný identifikátor pro každý serializovaný objekt. Objekt a identifikátor jsou uloženi do referenční tabulky, objektse používá jako klíč. 2. Element XML je vytvořen pro objekt, jeho jméno třídy a identifikátor jsou uloženy jako atributy. 3. Odlišné zpracování polí. 27

28 Serializaceinstančních proměnných Jak serializaceobjektů, tak polí používá metodu serializevariable() k serializaci hodnoty každé instanční proměnné (datového atributu) nebo prvku pole. 28

29 private static Element serializevariable( Class fieldtype, Object child, Document target, Map table) throws Exception { if (child == null) { return new Element("null"); else if (!fieldtype.isprimitive()) { Element reference = new Element("reference"); if (table.containskey(child)) { reference.settext(table.get(child).tostring()); else { reference.settext( Integer.toString(table.size()) ); serializehelper(child, target, table); return reference; else { Element value = new Element("value"); value.settext(child.tostring()); return value; Metoda prověřuje obsah proměnných a rozhoduje jak je uložit. Primitivní typy vytváří hodnotu elementu obsahujícího Stringverzi primitivního typu. Je-li objekt, jenž již mohl být serializován, je prověřena tabulka identifikátorů. 29

30 public class Animal { private String name; private String gender; private String classification; private int weight; public Animal(String name, String gender, String classification, int weight) { this.name = name; this.gender = gender; this.classification = classification; this.weight = weight; public String tostring() { return String.format("Animal name %s gender %s classification %s" + " weight %d", name, gender, classification, weight); 30

31 import java.util.*; public class Zoo extends LinkedList{ private String city; private String name; public Zoo(String city, String name) { this.city = city; this.name = name; public String tostring() { return String.format("Zoo city %s name %s", city, name); 31

32 public class ZooTest { public static void main( String[] args ) { Animal panda1 = new Animal( "Tian Tian", "male", "Ailuropoda melanoleuca", 271 ); Animal panda2 = new Animal( "Mei Xiang", "female", "Ailuropoda melanoleuca", 221 ); Zoo national = new Zoo( "National Zoological Park", "Washington, D.C." ); national.add( panda1 ); national.add( panda2 ); try { Format format = Format.getPrettyFormat(); // format.setencoding(encoding); XMLOutputter out = new XMLOutputter(format); Document d = Driver.serializeObject( national ); out.output(d, System.out); catch (Exception ex) { ex.printstacktrace(); 32

33 <?xml version="1.0" encoding="utf-8"?> <serialized> <object class="serialization.zoo" id="0"> <field name="city" declaringclass="serialization.zoo"> <reference>1</reference> </field> <field name="name" declaringclass="serialization.zoo"> <reference>3</reference> </field> <field name="size" declaringclass="java.util.linkedlist"> <null /> </field> <field name="first" declaringclass="java.util.linkedlist"> <null /> </field> <field name="last" declaringclass="java.util.linkedlist"> <null /> </field> <field name="modcount" declaringclass="java.util.abstractlist"> <null /> </field> </object> <object class="java.lang.string" id="1"> <field name="value" declaringclass="java.lang.string"> <reference>2</reference> </field> 33

34 <field name="hash" declaringclass="java.lang.string"> <value>0</value> </field> <field name="hash32" declaringclass="java.lang.string"> <null /> </field> </object> <object class="[c" id="2" length="24"> <value>n</value> <value>a</value> <value>t</value> <value>i</value> <value>o</value> <value>n</value> <value>a</value> <value>l</value> <value /> <value>z</value> <value>o</value> <value>o</value> <value>l</value> <value>o</value> <value>g</value> <value>i</value> <value>c</value> <value>a</value> <value>l</value> <value /> <value>p</value> <value>a</value> <value>r</value> <value>k</value> 34

35 </object> <object class="java.lang.string" id="3"> <field name="value" declaringclass="java.lang.string"> <reference>4</reference> </field> <field name="hash" declaringclass="java.lang.string"> <value>0</value> </field> <field name="hash32" declaringclass="java.lang.string"> <null /> </field> </object> <object class="[c" id="4" length="16"> <value>w</value> <value>a</value> <value>s</value> <value>h</value> <value>i</value> <value>n</value> <value>g</value> <value>t</value> <value>o</value> <value>n</value> <value>,</value> <value /> <value>d</value> <value>.</value> <value>c</value> <value>.</value> </object> </serialized> 35

36 Dynamické nahrávání a reflektivní konstrukce Nahrávání tříd za běhu programu. Vytváření instancí objektů s použitím reflexe. Rozšíření delegování s použitím reflexe. 36

37 Úvod Web servery jsou klasickým příkladem rozšiřování aplikace za běhu. Servletyjsou třídy, které definují rozšiřující chování, jak mají web servery zacházet s požadavky HTTP. Dynamicky linkované knihovny nutí pracovat mimo programovací jazyk, protože jsou primitivamioperačního systému. 37

38 Problém k řešení Existuje DBzákazníků, kterou je třeba se dotazovat, pro získání informací. Existuje schéma DB, ale nejsou peníze na replikaci klientského prostředí. Navíc je třeba zevšeobecnit tuto aplikaci pro potenciální prodej jiným klientům. 38

39 Návrh s využitím vzorů Je třeba využít vzory a delegování pro zvýšení flexibility. Delegováníje opatření, kdy jeden objekt závisí na jiném objektu kvůli implementaci jiného chování. Facade(Fasáda) poskytuje jednotné rozhraní pro množinu jiných rozhraní. Vzor se využívá na dotazy v DB. 39

40 Návrh s využitím vzorů Tovární metoda poskytuje metodu pro vytváření objektů bez specifikace konkrétních tříd. Tato metoda je volána ke konstrukci implementace fasády. Návrh umožňuje vybrat odpovídající Fasádu beze změny zbytku aplikace 40

41 MainApplication createdbfacade() : CustomerDatabase StubImpl constructs «interface» CustomerDatabase FileSystemImpl DeploymentImpl Tovární metoda, createdbfacade(), rozhodne, která implementace z CustomerDatabasese bude vytvářet za běhu programu. Rozhraní Fasády, CustomerDatabaseje implementovaná pomocí StubImpl. FileSystemImpl testování DB 41

42 Návrh s využitím vzorů Tovární metoda, createdbfacade(), vytváří požadovanou implementaci CustomerDatabase pro použití v aplikaci. Není možné vytvořit celou aplikaci před jejím rozmístěním (deploymentem). Nutnost využití reflexe. 42

43 public class MainApplication { //... private Properties props; private CustomerDatabase custdb; //... public synchronized CustomerDatabase createdbfacade() { if ( custdb == null ) { try { String dbclassname = props.getproperty( "db.class", "com.mcli.app.stubcustomerdb"); Class cls = Class.forName(dbClassName); custdb = (CustomerDatabase) cls.newinstance(); catch (ClassNotFoundException ex) { //... catch (InstantiationException ex) { //... catch (IllegalAccessException ex) { //... return custdb; Klíčové je implementace tovární metody. props odkazuje na java.util.properties použití pro nahrání konfiguračních řetězců do systému, Jedním z konfiguračních vstupů je klíč db.classa jeho hodnota. Hodnota db.classje plně kvalifikovaná jménem třídy, která je využita pro identifikaci třídy fasády konkrétní databáze. Kdokoli se vstupem do souboru propertiesmůže změnit property a takto určit, kterou fasádu databáze aplikace použije. 43

44 Reflektivní řešení Tovární metoda používá dynamické nahrávání k získání objektu třídy (classobjektu) s klíčem propertydb.class. Dynamickéloadováníje proces ve kterém JVM vytvoří třídy z bytecodu za běhu. Class cls = Class.forName(dbClassName); Získáse objekttřídy, na který odkazuje dbclassname. 44

45 RozšířeníTovárnímetodyreflexí Vytvoření nové instance: custdb = (CustomerDatabase) cls.newinstance(); Vložením souboru classdo classpatha změnou textu v souboru property. Instalace nové Fasády je snazší, i když již byl systém zaveden (deployed). Pokud se všechny komponenty odkazují na Fasádu prostřednictvím Tovární metody, aplikace může snadno změnit Fasádu. 45

46 RozšířeníTovárnímetodyreflexí Delegování je užitečné protože dovoluje objektu měnit chování za běhu. Tato změna chování nastane, když jeden delegát poskytuje dané chování je nahrazen jiným s odlišným chováním. Bez mechanismu reflexe je počet delegování omezen na množinu tříd, které jsou začleněny do systému v době kompilace. 46

47 Nahrávání tříd dynamicky Class cls = Class.forName(dbClassName); Příkaz dovoluje, aby třída, která se používá pro fasádu customerdatabáze byla změněna bez přepisování a rebuildovánízdrojového kódu aplikace. Vrátí se objekt třídy (class object). Class loader(využívá se) již může loadovat třídu. Pokud ano, vrací classobjectkterý loadoval. 47

48 Nahrávání tříd dynamicky Nebyla-li třída loadovaná, class loader prohledává podle classpathodpovídající soubor.class. Nenajde-li ClassNotFoundException. 48

49 Reflektivní konstrukce objektů Metoda newinstance() funguje jako bezparametrický konstruktor. Přetypování, které je uvedeno využívat rozhraní místo konkrétních tříd. 49

50 Použití konstruktoru java.lang.refelction.constructor metatřída konstruktorů. cls.getconstructor(new Class[] { String.class, String.class ) 50

51 MetodyClasspro introspekci Metoda Constructor getconstructor( Class[] parametertypes) Constructor getdeclaredconstructor( Class[] parametertypes) Constructor[] getconstructors() (sebepozorování) Popis Vrací public konstruktor, se specifikovaným argumentem,pokud ho příjemce metody podporuje. Vrací konstruktor se specifikovaným typem argumentů, pokud ho příjemce metody podporuje. Vrací pole obsahujícím public konstruktory podporované příjemcem. Constructor[] getdeclaredconstructors() Vrací pole obsahujícím konstruktory podporované příjemcem. 51

52 Návrh pro dynamické loadování Vzniká problém výběru konstruktorů, které budou dynamicky nahrávány (loadovány). Existuje řada rozhraní a řada implementací. Doporučení: implementovat pouze standardní (defaultní) konstruktor a použít instanční metodu pro inicializaci objektu (jeho datových atributů). 52

53 public interface Parrot { // the rest of the Parrot interface below //... import java.lang.reflect.*; public class ParrotUser { static public void main( String[] args ) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException { Class parrotclass = Class.forName( "ParrotImpl1" ); Constructor pc = parrotclass.getconstructor( new Class[]{ String.class ); Parrot polly = (Parrot)pc.newInstance( new String[]{ "Polly" ); // Parrot object may now be used Reflektivní konstrukce s argumenty. Přístup preferovaný Javou. 5 deklarovaných výjimek Dohoda mezi programátory, který konstruktor použít. 53

54 public interface Parrot { void initialize( String name ); // the rest of the Parrot interface below //... public class ParrotUser { static public void main( String[] args ) throws ClassNotFoundException, InstantiationException, IllegalAccessException{ Class parrotclass = Class.forName( "ParrotImpl1" ); Parrot polly = (Parrot)parrotClass.newInstance(); polly.initialize( "Polly" ); // Parrot object may now be used Reflektivní konstrukce s defaultním konstruktorem. initialize() eliminuje chyby programátorů při použití konstruktorů, je děděna do podtříd, každé třídě stačí pouze defaultní konstruktor. 54

55 Implementace deserializace Deserializace inverzní proces k serializaci (konverze streamu do struktury objektů). Nejdříve musíme vytvořit třídu objektu. Třídu objektu jsme uložili jako plně kvalifikovaný objekt: <object class="serialization.zoo" id="0"> Balíček serialization použijeme: Class.forName pro získání třídy objektu. 55

56 Implementace deserializace Dále vytvoříme instanci od třídy objektu (newinstance() to udělá bez). Musíme doplnit hodnotu datových atributů. Primitivní typy. Objektové typy nejdříve vytvořit instanci rekurzivní proces. 56

57 public static Object deserializeobject( Document source ) throws Exception { List objlist = source.getrootelement().getchildren(); Map table = new HashMap(); createinstances( table, objlist ); assignfieldvalues( table, objlist ); return table.get("0"); Inicializace deserializace Nejdříve získá seznam dětí z dokumentu XML. Každý element z dokumentu reprezentuje nějaký objekt. HashMapse použije k mapování identifikátorů na deserializované objekty. Během serializacedostal každý objekt jednotný identifikátor ten je klíčem. createinstance() load třídy, instance konstruktorů a mapuje je k jejich identifikátorům. 57

58 private static void createinstances( Map table, List objlist ) throws Exception { for (int i = 0; i < objlist.size(); i++) { Element oelt = (Element) objlist.get(i); Class cls = Class.forName(oElt.getAttributeValue("class")); //#1 Object instance = null; if (!cls.isarray()) { Constructor c = cls.getdeclaredconstructor(null); if (!Modifier.isPublic(c.getModifiers())) { c.setaccessible(true); instance = c.newinstance(null); else { instance = Array.newInstance( cls.getcomponenttype(), Integer.parseInt(oElt.getAttributeValue("length"))); table.put(oelt.getattributevalue("id"), instance); Konstrukce instancí: iterace seznamem serializovanýchobjektů XML dokumentu. #1 dotaz dokumentu na jméno třídy serializovanéhoobjektu a nahrání (load) této třídy.

59 private static void assignfieldvalues( Map table, List objlist ) throws Exception { for (int i = 0; i < objlist.size(); i++) { Element oelt = (Element) objlist.get(i); Object instance = table.get( oelt.getattributevalue("id") ); List felts = oelt.getchildren(); if (!instance.getclass().isarray()) { for (int j=0; j<felts.size(); j++) { Element felt = (Element) felts.get(j); String classname = felt.getattributevalue("declaringclass"); Class fielddc = Class.forName(className); String fieldname = felt.getattributevalue("name"); Field f = fielddc.getdeclaredfield(fieldname); if (!Modifier.isPublic(f.getModifiers())) { f.setaccessible(true); Obnovení struktury objektů: 1/2 Element velt = (Element) felt.getchildren().get(0); f.set( instance, deserializevalue( velt, f.gettype(), table ) ); 59

60 else { Class comptype = instance.getclass().getcomponenttype(); for ( int j = 0; j < felts.size(); j++) { Array.set( instance, j, deserializevalue( (Element)fElts.get(j), comptype, table )); Obnovení struktury objektů: 2/2 60

61 private static Object deserializevalue( Element velt, Class fieldtype, Map table ) throws ClassNotFoundException { String valtype = velt.getname(); if (valtype.equals("null")) { return null; else if (valtype.equals("reference")) { return table.get(velt.gettext()); else { if (fieldtype.equals(boolean.class)) { if (velt.gettext().equals("true")) { return Boolean.TRUE; else { return Boolean.FALSE; Deserializace metod: 1/2 61

62 else if (fieldtype.equals(byte.class)) { return Byte.valueOf(vElt.getText()); else if (fieldtype.equals(short.class)) { return Short.valueOf(vElt.getText()); else if (fieldtype.equals(int.class)) { return Integer.valueOf(vElt.getText()); else if (fieldtype.equals(long.class)) { return Long.valueOf(vElt.getText()); else if (fieldtype.equals(float.class)) { return Float.valueOf(vElt.getText()); else if (fieldtype.equals(double.class)) { return Double.valueOf(vElt.getText()); else if (fieldtype.equals(char.class)) { return new Character(vElt.getText().charAt(0)); else { return velt.gettext(); Deserializace metod: 2/2 62

63 Závěr Skutečná flexibilita vyžaduje, aby aplikace byly schopné začlenit nový kód. Dynamické loadování dovoluje javovské aplikaci nalézt a použít třídy, které nebyly dostupné při psaní aplikace. Dynamické loadovánívytváří objekty třídy (class objects). Instanciovánítěchto objektů tříd je nezbytnou podmínkou. 63

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

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

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

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

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

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

Ú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

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

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

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

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

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

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

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

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ Vstupy a výstupy pokračování Kódování textů Texty (řetězce nebo znaky) v jazyce C# jsou v paměti uloženy v kódování označovaném běžně Unicode (kódová stránka 1200).

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

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

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

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

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

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

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

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

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

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

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

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

Ú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

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

Remote Method Invocation RMI

Remote Method Invocation RMI Remote Method Invocation RMI Java TM Remote Method Invocation (RMI) umožňuje objektu na jedné Java Virtual Mashine(JVM) jednoduše spustit metodu jiného objektu na vzdálené JVM. Při volání vzdálené metody

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

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

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

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

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

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

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

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

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

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

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

O autorovi O odborném korektorovi Úvod 17 Vývoj jazyka Java Java SE 8 Struktura této knihy Předchozí zkušenosti s programováním nejsou potřebné

O autorovi O odborném korektorovi Úvod 17 Vývoj jazyka Java Java SE 8 Struktura této knihy Předchozí zkušenosti s programováním nejsou potřebné O autorovi 15 O odborném korektorovi 15 Úvod 17 Vývoj jazyka Java 17 Java SE 8 19 Struktura této knihy 20 Klíčové znalosti a pojmy 20 Testové otázky 20 Odpovídá expert 20 Cvičení 20 Předchozí zkušenosti

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

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

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

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

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

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

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky Google Web Toolkit Martin Šurkovský, SUR096 Vysoká škola Báňská - Technická univerzita Ostrava Katedra informatiky 29. března 2010 Martin Šurkovský, SUR096 (VŠB - TUO) Google Web Toolkit 29. března 2010

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

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

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

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické Třídy, polymorfismus A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické Polymorfizmus ~ vícetvarost Polymorfizmus základní vlastnost objektového přístupu základní princip polymorfismu:

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

Java a Caché IV: Manipulace s objekty

Java a Caché IV: Manipulace s objekty 1 z 6 11.1.2007 11:13 přihlašovací jméno heslo Registrace Přihlásit články odkazy aktuality CZJUG konference o portálu přidejte se o nás Vyhledávání Text: najdi Oborový filtr J2ME J2SE J2EE Enterprise

Více

Soketové připojení Klient InetAddress getbyname() UnknowHostException SecurityException Socket getinputstream() getoutputstream() IOException Server

Soketové připojení Klient InetAddress getbyname() UnknowHostException SecurityException Socket getinputstream() getoutputstream() IOException Server Soketové připojení Při socketovém připojení spolu komunikují dvě nezávislé JVM pomocí streamů odpovídajících typů. Po síti můžete posílat textové i binární informace, je možno posílat i objekty, které

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

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

Zapouzdření. Tomáš Pitner, upravil Marek Šabo Zapouzdření Tomáš Pitner, upravil Marek Šabo Co je zapouzdření Naprosto zásadní vlastnost objektového přístupu, možná nejzásadnější Jde o spojení dat a práce s nimi do jednoho celku - objektu Data jsou

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

RMI - Distribuované objekty v Javě

RMI - Distribuované objekty v Javě Vysoká škola báňská - Technická univerzita Ostrava 30. března 2009 Osnova Co je to RMI? 1 Co je to RMI? 2 Vnější pohled Vrstvy RMI Stub & Skeletons Layer Remote Reference Layer Transport Layer Pojemnování

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

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

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5); Programovací jazyk PHP 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 Třídy a objekty Výjimky Webové aplikace

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

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

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

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

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

Anotace a Hibernate. Aleš Nosek Ondřej Vadinský Daniel Krátký

Anotace a Hibernate. Aleš Nosek Ondřej Vadinský Daniel Krátký Anotace a Hibernate Aleš Nosek Ondřej Vadinský Daniel Krátký Anotace v Javě novinka Javy 5 umožňují k Java kódu přidávat dodatečné informace (podobně jako JavaDoc) za předchůdce anotací je možné považovat

Více

Jazyk C# (seminář 6)

Jazyk C# (seminář 6) Jazyk C# (seminář 6) Pavel Procházka KMI 29. října 2014 Delegát motivace Delegáty a události Jak docílit v C# funkcionální práce s metodami v C je to pomocí pointerů na funkce. Proč to v C# nejde pomocí

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

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

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

Základy Guice Vazby Scopes. Google Guice. základní seznámení s frameworkem Google Guice

Základy Guice Vazby Scopes. Google Guice. základní seznámení s frameworkem Google Guice základní seznámení s frameworkem Lukáš Koĺısko lkolisko@gmail.com 26.11.2007 Cíle prezentace Cíle prezentace To DI, or not to DI Varianty řešení DI Výhody a nevýhody Cílem prezentace je ukázat, že... v

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

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

Programování v C++ 2, 4. cvičení

Programování v C++ 2, 4. cvičení Programování v C++ 2, 4. cvičení statické atributy a metody, konstruktory 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Přístupová práva

Více

Programování v C++ 1, 5. cvičení

Programování v C++ 1, 5. cvičení Programování v C++ 1, 5. cvičení konstruktory, nevirtuální dědění 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 3 Shrnutí minule procvičené

Více

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

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

Více

Katedra měřicí a řídicí techniky, VŠB - Technická univerzita v Ostravě, tř. 17. listopadu, Ostrava-Poruba, Česká republika

Katedra měřicí a řídicí techniky, VŠB - Technická univerzita v Ostravě, tř. 17. listopadu, Ostrava-Poruba, Česká republika Použití jazyka Java pro aplikace měření a řízení Roman Gužík Katedra měřicí a řídicí techniky, VŠB - Technická univerzita v Ostravě, tř. 17. listopadu, 708 33 Ostrava-Poruba, Česká republika Abstrakt Příspěvek

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 : 25. Otázka : Komponentní technologie - základní pojmy a principy, metody specifikace komponent. Obsah : 1. Základní pojmy 1.1 Komponenta Komponenta

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

Ú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

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

Vláknové programování část V

Vláknové programování část V Vláknové programování část V Lukáš Hejmánek, Petr Holub {xhejtman,hopet@ics.muni.cz Laboratoř pokročilých síťových technologií PV192 2014 03 25 1/25 Přehled přednášky Paměťový model Javy GUI v Javě Vlákna

Více

Java Řetězce Java, zimní semestr

Java Řetězce Java, zimní semestr Java Řetězce 1 Řetězec instance třídy java.lang.string kompilátor s nimi zachází téměř jako s primit. typy řetězcové konstanty = instance třídy String nezměnitelné!!! pro změny třídy StringBuffer, StringBuilder

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

Kód, který se nebude často měnit

Kód, který se nebude často měnit Factory Method Úvod - problém Mějme obchod s auty: public class OrderCars { public Car ordercar(string model) { Car car; Při přidání nového modelu je nutné upravit if(model.equals("mark IV")) car = new

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

Objektově orientované programování v PHP 5. Martin Klíma

Objektově orientované programování v PHP 5. Martin Klíma Objektově orientované programování v PHP 5 Martin Klíma OOP & PHP 5 V PHP 5 konečně značné rozšíření OOP Blíží se to moderním programovacím jazykům jako Java nebo C# Výhody OOP Zapouzdření (nové modifikátory

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

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat. 1. Odkrokujte následující program a s použitím notace z přednášky popište stav paměti

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

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

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

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33 Objekt jako proměnná Objekty a metody Objekt = proměnná referenčního typu vznik pomocí new, chování viz pole jako referenční proměnná minulý semestr Stack Heap objekt ref this 10 20 atr1 atr2 jinyobjekt

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