Reflexe_02. Přístup k datovým atributům třídy pomocí reflexe
|
|
- Markéta Musilová
- před 4 lety
- Počet zobrazení:
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/ Pavel Pone(c), září 2008 Historie rok 2004 upravené objekty z frameworku Cayenne nevýhodou byla špatná typová kontrola rok
VíceReflexe. 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íceReflexe 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ícetypová 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íceJAVA. 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íceDefinice 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) 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íce14.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íceMichal 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íceReflexe_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íceVýč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íceClass 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íce7. 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íceTeoretické 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ícePočí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íceSOUBORY, 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íceMichal 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íceSW_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íce8. 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íceRMI 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íceJava 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íceAbstraktní 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íceMichal 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íceVytvář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ícePokroč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ícePŘ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íce8 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íceDefinice 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íceBridge. 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
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íceSoubor 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íceRemote 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íceGenerické 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íceStatické 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íceProgramová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íceProgramová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íceSeznamy 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íceSeminář 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íce4. 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íceSeminář 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ícePř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íceKTE / 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ícePREPROCESOR 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íce1. 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íceO 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íce20. 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íceMichal 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ícepublic 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íceJava 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íceDefinice 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íceProgramá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íceGoogle 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íceAlgoritmizace 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íceZ. 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íce7. 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íceTří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íce9. 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íceJava 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íceSoketové 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) 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íceZapouzdř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íceProjekty 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íceRMI - 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íce11.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íceMichal 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íceTří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íceOOPR_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íceVyuž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íceMichal 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íceOMO. 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íce17. 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íceAnotace 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íceJazyk 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íceTří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íce1. 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íceAbstraktní 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íceZá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íceTÉ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íceDě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íceProgramová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íceProgramová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í
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íceKatedra 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íceTÉ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íceDatové 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) 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ícePrvní 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íceVlá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íceJava Ř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íce14.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íceKó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íceTŘÍ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íceObjektově 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íceJava - 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ícePokud 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íce3. 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íceObjekty 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ícePrincipy 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íceIRAE 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 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