Informatikai Navigátor Érdekes Java Programozói könyvtárak

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "Informatikai Navigátor Érdekes Java Programozói könyvtárak"

Átírás

1 2013. Július Informatikai Navigátor Érdekes Java Programozói könyvtárak Gondolatok a szoftverek használatáról és fejlesztéséről 9. szám

2 Informatikai Navigator Gondolatok a szoftverek használatáról és fejlesztéséről Tartalomjegyzék 1. JAXB - A Java és XML összekötése 3 2. BeanShell - Könnyűsúlyú scriptek Java nyelvbe ágyazva Apache Commons - BeanUtils Apache Commons - Lang Joda.org - Programozás dátumokkal és időkkel Apache Commons - Virtual File System Apache Commons - FileUpload Apache Commons - IO Az Active Directory elérése 104 Főszerkesztő: Nyiri Imre (imre.nyiri@gmail.com) 2

3 JAXB - A Java és XML összekötése 1. JAXB - A Java és XML összekötése Az XML adatok és a Java objektumok közötti leképzés fontos eszköze egy korszerű fejlesztői környezetnek. Sok olyan Java API létezik, amelyek XML-t kezelnek, de itt most az a kérdés, hogy egy XML-ben tárolt adatszerkezetet hogyan konvertálunk oda-vissza egy alkalmas Java objektumba. Ezt oldja meg a JDK 1.6 óta beépített részként működő JAXB könyvtár. A JAXB 1 az XML adatok és a Java objektumok közötti leképzést valósítja meg, aminek nyilvánvaló előnye az, hogy az XML adatstruktúrákat Java objektumként tudjuk kezelni és fordítva. A Java sok helyen felhasználja ezt a beépített szolgáltatást, erre jó példa az JAX-WS webservice technológia XML Java leképzése. A leképzés azt jelenti, hogy a Java objektum adattagjait (vagy más néven a property-ket) leképezzük (ezt nevezzük binding-nak) az XML tagekre. Ezt a feladatot a JAXB kifinomultan és rugalmasan képes ellátni. A fejlesztést végezhetjük a Java osztályokból kiindulva, de lehetséges az is, hogy az XML sémák alapján generáljuk a befogadó objektumok osztályait. A következő egyszerű példa az alapszintű használatba vezet be. Bevezető példa A Java osztályok Legyen a célunk az, hogy az 1-1. Programlistán látható Employee class objektumait XML formátumra alakítsuk (perzisztáljuk). Amint látjuk ez az osztály egy egyszerű JavaBean (más szavakkal POJO 2 ), aminek van néhány adatmezője, köztük az egyik az Address class maga is egy osztály, amit az 1-2. Programlista mutat. Mindez igazán egyszerű, de most szeretnénk egy olyan XML modellt rendelni ehhez, amibe egy Employee példány elmenthető. A JAXB 2.0 óta mindez úgy valósítható meg, hogy a Java 1 JAXB=Java API for XML Binding 2 POJO=Plain Old Java Object osztályt annotáljuk a -okkal. Tekintettel arra, hogy az Employee class reprezentálja az egész objektum kezdetét, így az őt leíró XML gyökérelemének is ez felel meg. Ezt reprezentálja aminek paraméterében még azt is megadtuk, hogy ez a gyökér XML tag az org.ceg.test XML névtérben lesz. annotáció azt mondja meg, hogy ez a class egyben egy XSD-beli típusnév is lenne, amit láthatunk is, amennyiben XML sémát szeretnénk a későbbiekben legenerálni. A névteret itt is meg kell adni. // 1 1. Programlista : Employee. j a v a package org. c s. t e s t ; import javax. xml. bind. annotation. XmlElement ; import javax. xml. bind. annotation. XmlRootElement ; import javax. xml. bind. annotation. XmlType ( namespace = " org. ceg. t e s t " namespace = " org. ceg. t e s t " ) public class Address a d d r e s s ( namespace = " org. ceg. t e s t " ) S t r i n g name S t r i n g sex int kor double s u l y ; Most az Employee mindegyik adattagját jelzéssel, ami azt jelenti, 3

4 JAXB - A Java és XML összekötése hogy ezen mezők mindegyikének egy-egy XML tag-et szeretnénk megfeleltetni. A tag neve a bean property neve lesz, de egy esetleges name annotáció attribútum megadással explicit is megadhatjuk, hogy mi legyen az adott XML címke neve. Esetünkben most csak a namespace paramétert használjuk próbaként, hagyjuk, hogy az XML tag nevek automatikusan képződjenek a class adatmezők nevéből. Az Address class annotálása ezek után már érthető. // 1 2. Programlista : Address. j a v a package org. c s. t e s t ; import javax. xml. bind. annotation. XmlElement ; import javax. xml. bind. annotation. XmlType namespace = " org. ceg. t e s t " ) public class S t r i n g s t r e e t int housenumber ; Az eddigiekben odáig jutottunk, hogy az Employee és Address osztályokat elláttuk JAXB annotációkkal, ezzel megteremtettük a lehetőségét annak, hogy kipróbáljuk a JAXB Java Object XML leképzési lehetőségét, amit marshallingnak nevezünk. Nézzük is meg a használatát! Az XML előállítása (marshaller) Az 1-3. Programlista a JAXB használatát szemlélteti, feladata az, hogy egy sorok között előállított e Employee objektumot XML fájlba mentse. Ehhez először a 26. sorban egy jaxb- Context objektum előállítása szükséges, amely az Employee class mentén ad egy kezelő kontextust, ezért volt szükséges ezt a newinstance() metódusban paraméterül átadni. A 27. sorban egy általános eljárással lekérünk a kontextustól egy jaxbmarshaller objektumot, ami a tényleges Java Object XML átalakítást fogja végezni. A 28. sor nem kötelező lépés, de mi azt szeretnénk, hogy az előállított XML szépen formázva nézzen ki. A 30. sor egy xmlfile nevű File objektum, ahova majd az eredményül kapott XML-t mentjük. Végül a 30. sorban elvégezzük a feladatot, azaz az e objektumot perzisztáljuk az xmlfile helyre. 1 // 1 3. Programlista : TestJAXBMarshaller. j a v a 2 3 package org. c s. t e s t ; 4 5 import java. i o. F i l e ; 6 import javax. xml. bind. JAXBContext ; 7 import javax. xml. bind. JAXBException ; 8 import javax. xml. bind. M a r s h a l l e r ; 9 10 public class TestJAXBMarshaller public s t a t i c void main ( S t r i n g [ ] a r g s ) 13 throws JAXBException Address a = new Address ( ) ; 16 a. housenumber = 1 2 ; 17 a. s t r e e t = " Váci út " ; Employee e = new Employee ( ) ; 20 e. a d d r e s s = a ; 21 e. kor = 3 2 ; 22 e. name = "Alma Ferenc " ; 23 e. sex = " f é r f i " ; 24 e. s u l y = 8 8 ; JAXBContext jaxbcontext = JAXBContext. newinstance ( Employee. class ) ; 27 M a r s h a l l e r j a x b M a r s h a l l e r = jaxbcontext. c r e a t e M a r s h a l l e r ( ) ; 4

5 JAXB - A Java és XML összekötése 28 j a x b M a r s h a l l e r. s e t P r o p e r t y ( M a r s h a l l e r.jaxb_formatted_output, Boolean.TRUE) ; 29 F i l e xmlfile = new F i l e ( "/home/ t a n u l a s /xml/employee. xml" ) ; 30 j a x b M a r s h a l l e r. marshal ( e, xmlfile ) ; A program lefuttatása után az 1-4. Programlista mutatja a legyártott Employee.xml fájl tartalmát. Az alábbiakat javasoljuk megfigyelni: A class nevek alapértelmezetten kisbetűvel kezdődnek. Az adatmező nevek teljesen megmaradnak. Az XML névtér minden olyan tag-hez bekerült, ahol ezt kértük -ok megadásánál. rendelkező objektumba pakoljuk az XML outputot, ilyen lehet például a StringWriter class, aminek a használatát a 1-5. Programlistáról tanulmányozhatjuk. Ekkor a marshal() metódus a writer objektumba teszi az eredményt, ahonnan azt String vagy StringBuffer objektumként is lekérhetjük. // 1 5. Programlista : S t r i n g W r i t e r S t r i n g W r i t e r w r i t e r = new S t r i n g W r i t e r ( ) ; j a x b M a r s h a l l e r. marshal ( e, w r i t e r ) ; S t r i n g data = w r i t e r. t o S t r i n g ( ) ; S t r i n g B u f f e r d a t a B u f f e r = w r i t e r. g e t B u f f e r ( ) ; // 1 4. P r o g r a m l i s t a : Employee. xml <?xml version=" 1. 0 " encoding="utf 8" standalone=" yes "? > <n s 2 : e m p l o y e e x m l n s : n s 2=" org. ceg. t e s t "> <a d d r e s s> < s t r e e t>váci út</ s t r e e t> <housenumber>12</ housenumber> </ a d d r e s s> <ns2:name>alma Ferenc</ ns2:name> <s e x> f é r f i</ s e x> <kor>32</ kor> <s u l y>8 8. 0</ s u l y> </ n s 2 :employee> Az esetek jelentős részénél nem mindig fájlba szeretnénk tenni az előállított XML-t, ezért a marshal() metódusnak is több alakja van. Tipikus használat, hogy egy Writer interface-szel Az XML visszaolvasása (unmarshaller) Most végezzük el a fordított feladatot, azaz írjunk egy olyan JAXB alapú programot, ami az XML Java Object beolvasást (unmarshalling) valósítja meg. Mindezt végezzük el a most előállított Employee.xml fájlra. Amennyiben nem lenne -olt (azaz szebben fogalmazva: annotált) befogadó Java class, akkor azt el kéne készítenünk, de ezek már itt vannak: Emloyee, Address. A feladat megoldását az 1-6. Programlista mutatja. 1 // 1 6. Programlista : TestJAXBUnmarshaller. j a v a 2 3 package org. c s. t e s t ; 4 5 import java. i o. F i l e ; 6 import javax. xml. bind. JAXBContext ; 7 import javax. xml. bind. JAXBException ; 8 import javax. xml. bind. Unmarshaller ; 9 10 public class TestJAXBUnmarshaller public s t a t i c void main ( S t r i n g [ ] a r g s ) 13 throws JAXBException JAXBContext jaxbcontext = JAXBContext. newinstance ( Employee. class ) ; 16 Unmarshaller jaxbunmarshaller = jaxbcontext. c r e a t e U n m a r s h a l l e r ( ) ; 17 F i l e xmlfile = new F i l e ( "/home/ t a n u l a s /xml/employee. xml" ) ; 18 Employee e = ( Employee ) jaxbunmarshaller. unmarshal ( xmlfile ) ; 5

6 JAXB - A Java és XML összekötése 19 System. out. p r i n t l n ( e. name ) ; 20 System. out. p r i n t l n ( e. a d d r e s s. s t r e e t ) ; A 15. sorban a már ismert módon egy JAXB- Context objektumot készítünk, amiben csak az Employee class játszik szerepet. Ezt azért emeltük most ki, mert általában több osztály is megadható lenne a gyártómetódusnak, erre majd a későbbiekben mutatunk példát. A 16. sorban természetesen most egy Unmarshaller objektumot kérünk le, hogy azt a 17. sorban megadott fájlra működtessük. Magát a beolvasást a 18. sor unmarshal() metódusa végzi, amelynek használatában nincs semmi különleges. Az utolsó 2 sor csak tesztelésként kiírja a képernyőre az XML fájlból létrehozott objektum 2 mezőjének az értékét. Az XML Java Object átalakításnál is gyakori eset, amikor nem fájlból érkezik az input XML, ezért az unmarshal() metódusnak is sok alakja van. A gyakorlatban talán az egyik leghasznosabb esetet mutatja az 1-7. Programlista, ahol egy Java String objektumban van az XML, amit egy StringReader objektum közbeiktatásával már át is adhatunk a metódusnak. // 1 7. Programlista : StringReader S t r i n g xmlstring = beolvasfromxmlfile ( ) ; StringReader r e a d e r = new StringReader ( xmlstring ) ; Employee em = ( Employee ) jaxbunmarshaller. unmarshal ( r e a d e r ) ; Az XML séma (XSD) előállítása Alapvetően fontos az XML világban, hogy annak a sémáját is lehetőleg birtokoljuk, így annak előállításához a JAXB a schemagen parancsot biztosítja, ami a JDK része. Amennyiben a java/javac elérhető, úgy ez a parancs is rendelkezésre áll. Használata egyszerű, mindössze meg kell adnunk azt a Java forrásfájlt, amiben egy JAXB annotált class található. Az Employee class-ra esetünkben ez a parancs futtatható: schemagen cp / opt / netbeans / myprojects / TestProjects / JavaTest / s r c / opt / n e t b e a n s / m y p r o j e c t s / T e s t P r o j e c t s / JavaTest / s r c / org / c s / t e s t / Employee. j a v a A -cp kapcsolót azért adtuk meg, hogy a beágyazott Address osztályt is megtalálja a parancs, hiszen ez a séma része kell legyen. A parancs lefutása után az 1-8. Programlista által tartalmazott sémát kapjuk meg. 1 // 1 8. P r o g r a m l i s t a : Employee XML séma 2 3 <?xml version=" 1. 0 " encoding="utf 8" standalone=" yes "?> 4 <x s:schema version=" 1. 0 " targetnamespace=" org. ceg. t e s t " x m l n s : t n s=" org. ceg. t e s t " x m l n s : x s=" h t t p : //www. w3. org /2001/XMLSchema"> 5 6 <xs: element name=" employee " type=" tns: employee "/> 7 8 <xs:complextype name=" employee "> 9 <x s : s e q u e n c e> 10 <x s : e l e m e n t name=" a d d r e s s " type=" t n s : a d d r e s s " minoccurs="0"/> 11 <x s : e l e m e n t name="name" type=" x s : s t r i n g " form=" q u a l i f i e d " minoccurs="0"/> 12 <x s : e l e m e n t name=" s e x " type=" x s : s t r i n g " minoccurs="0"/> 13 <x s : e l e m e n t name=" kor " type=" x s : i n t "/> 14 <xs: element name=" suly " type=" xs: double "/> 15 </ x s : s e q u e n c e> 16 </ xs:complextype> <xs:complextype name=" address "> 19 <x s : s e q u e n c e> 20 <x s : e l e m e n t name=" s t r e e t " type=" x s : s t r i n g " minoccurs="0"/> 21 <xs: element name="housenumber " type=" x s : i n t "/> 22 </ x s : s e q u e n c e> 23 </ xs:complextype> 24 </ x s :schema> 6

7 JAXB - A Java és XML összekötése Ránézésre tetszetős, az XSD típusok szépen leképződtek a megfelelő Java típusokról. A szerkezete is megfelelő. A 11. sor form="qualified" jelzése azt jelenti, hogy ez a tag a targetnamespace-ben (org.ceg.test) van. Az address complextype a várt módon, külön nevesítve megtalálható és a 10. sorban korrekt módon került használatra. Java osztályok generálása XML sémából A gyakorlatban az is sokszor előfordul, hogy az XSD már rendelkezésünkre áll. Nagyon sok munkát jelentene a megfelelő befogadó Java osztály létrehozása és -ok elhelyezése, de szerencsére a JAXB erre is tartalmaz egy JDK parancsot, aminek a neve xjc. A sémák általában valamilyen szabvány részeként állnak rendelkezésünkre, például: UBL (Universal Business Language), ebxml, OFX (Open Financial Exchange), de az is lehet, hogy a rendszerek közötti kommunikáció egy sémával, platformfüggetlen módon volt csak definiálható, ami nagy előny. Az Employee class alapján generált séma felhasználásával generáljuk le a Java osztályokat, azaz tegyünk úgy mintha azok még nem léteznének: x j c Employee. xsd Az eredményt az 1-9., és Programlisták tartalmazzák. 1 // 1 9. Programlista : Az x j c á l t a l g e n e r á l t Address o s z t á l y 2 3 // 4 // This f i l e was g e n e r a ted by t h e JavaTM A r c h i t e c t u r e f o r XML Binding (JAXB) Reference Implementation, v // See <a h r e f="h t t p :// j a v a. sun. com/xml/ j a x b">h t t p :// j a v a. sun. com/xml/ jaxb </a> 6 // Any m o d i f i c a t i o n s to t h i s f i l e w i l l be l o s t upon r e c o m p i l a t i o n o f t h e source schema. 7 // Generated on : at 0 6 : 4 9 : 0 4 PM GMT 8 // 9 package t e s t. ceg. org ; import javax. xml. bind. annotation. XmlAccessType ; 12 import javax. xml. bind. annotation. XmlAccessorType ; 13 import javax. xml. bind. annotation. XmlType ; / 16 <p>java c l a s s f o r address complex t y p e <p>the f o l l o w i n g schema fragment s p e c i f i e s t h e e x p e c t e d c o n t e n t contained 19 w i t h i n t h i s c l a s s <pre> 22 & l t ; complextype name="address"> 23 & l t ; complexcontent> 24 &l t ; r e s t r i c t i o n base=" h t t p ://www. w3. org /2001/XMLSchemaanyType"> 25 &l t ; sequence> 26 &l t ; element name=" s t r e e t " t y p e =" h t t p ://www. w3. org /2001/XMLSchema s t r i n g " minoccurs ="0"/> 27 &l t ; element name="housenumber" t y p e=" h t t p ://www. w3. org /2001/XMLSchema i n t "/> 28 &l t ; / sequence> 29 &l t ; / r e s t r i c t i o n > 30 &l t ; / complexcontent> 31 &l t ; / complextype> 32 </pre> / ( XmlAccessType. FIELD) name = " a d d r e s s ", proporder = 38 7

8 JAXB - A Java és XML összekötése 39 " s t r e e t ", 40 " housenumber" 41 ) 42 public class Address protected S t r i n g s t r e e t ; 46 protected int housenumber ; / 49 Gets t h e v a l u e o f t h e s t r e e t p r o p e r t y. 50 p o s s i b l e o b j e c t i S t r i n g / 54 public S t r i n g g e t S t r e e t ( ) return s t r e e t ; / 60 S e t s t h e v a l u e o f t h e s t r e e t p r o p e r t y. 61 v a l u e a l l o w e d o b j e c t i S t r i n g / 65 public void s e t S t r e e t ( S t r i n g value ) this. s t r e e t = value ; / 71 Gets t h e v a l u e o f t h e housenumber p r o p e r t y / 74 public int gethousenumber ( ) return housenumber ; / 80 S e t s t h e v a l u e o f t h e housenumber p r o p e r t y / 83 public void sethousenumber ( int value ) this. housenumber = value ; // Programlista : Az x j c á l t a l g e n e r á l t Employee o s z t á l y 2 3 // 4 // This f i l e was g e n e r a ted by t h e JavaTM A r c h i t e c t u r e f o r XML Binding (JAXB) Reference Implementation, v // See <a h r e f="h t t p :// j a v a. sun. com/xml/ j a x b">h t t p :// j a v a. sun. com/xml/ jaxb </a> 6 // Any m o d i f i c a t i o n s to t h i s f i l e w i l l be l o s t upon r e c o m p i l a t i o n o f t h e source schema. 7 // Generated on : at 0 6 : 4 9 : 0 4 PM GMT 8 // 9 package t e s t. ceg. org ; import javax. xml. bind. annotation. XmlAccessType ; 12 import javax. xml. bind. annotation. XmlAccessorType ; 13 import javax. xml. bind. annotation. XmlElement ; 14 import javax. xml. bind. annotation. XmlRootElement ; 8

9 JAXB - A Java és XML összekötése 15 import javax. xml. bind. annotation. XmlType ; / 18 <p>java c l a s s f o r employee complex t y p e <p>the f o l l o w i n g schema fragment s p e c i f i e s t h e e x p e c t e d c o n t e n t contained 21 w i t h i n t h i s c l a s s <pre> 24 & l t ; complextype name="employee"> 25 & l t ; complexcontent> 26 &l t ; r e s t r i c t i o n base=" h t t p ://www. w3. org /2001/XMLSchemaanyType"> 27 &l t ; sequence> 28 &l t ; element name="address " t y p e="org. ceg. t e s t address " minoccurs="0"/> 29 &l t ; element name="name" t y p e=" h t t p ://www. w3. org /2001/XMLSchema s t r i n g " minoccurs="0" form=" q u a l i f i e d "/> 30 &l t ; element name="sex " t y p e=" h t t p ://www. w3. org /2001/XMLSchema s t r i n g " minoccurs ="0"/> 31 &l t ; element name="kor " t y p e=" h t t p ://www. w3. org /2001/XMLSchema i n t "/> 32 &l t ; element name="s u l y " t y p e=" h t t p ://www. w3. org /2001/XMLSchema d o u b l e "/> 33 &l t ; / sequence> 34 &l t ; / r e s t r i c t i o n > 35 &l t ; / complexcontent> 36 &l t ; / complextype> 37 </pre> / ( namespace = " org. ceg. t e s t " ) ( XmlAccessType. FIELD) name = " employee ", proporder = " a d d r e s s ", 46 "name", 47 " sex ", 48 " kor ", 49 " s u l y " 50 ) 51 public class Employee protected Address a d d r e s s ; ( namespace = " org. ceg. t e s t " ) 56 protected S t r i n g name ; 57 protected S t r i n g sex ; 58 protected int kor ; 59 protected double s u l y ; / 62 Gets t h e v a l u e o f t h e address p r o p e r t y. 63 p o s s i b l e o b j e c t i Address / 67 public Address getaddress ( ) return a d d r e s s ; / 73 S e t s t h e v a l u e o f t h e address p r o p e r t y. 74 v a l u e a l l o w e d o b j e c t i Address / 9

10 JAXB - A Java és XML összekötése 78 public void setaddress ( Address value ) this. a d d r e s s = value ; / 84 Gets t h e v a l u e o f t h e name p r o p e r t y. 85 p o s s i b l e o b j e c t i S t r i n g / 89 public S t r i n g getname ( ) return name ; / 95 S e t s t h e v a l u e o f t h e name p r o p e r t y. 96 v a l u e a l l o w e d o b j e c t i S t r i n g / 100 public void setname ( S t r i n g value ) this. name = value ; / 106 Gets t h e v a l u e o f t h e sex p r o p e r t y. 107 p o s s i b l e o b j e c t i S t r i n g / 111 public S t r i n g getsex ( ) return sex ; / 117 S e t s t h e v a l u e o f t h e sex p r o p e r t y. 118 v a l u e a l l o w e d o b j e c t i S t r i n g / 122 public void s e t S e x ( S t r i n g value ) this. sex = value ; / 128 Gets t h e v a l u e o f t h e kor p r o p e r t y / 131 public int getkor ( ) return kor ; / 137 S e t s t h e v a l u e o f t h e kor p r o p e r t y / 140 public void setkor ( int value ) this. kor = value ; 10

11 JAXB - A Java és XML összekötése / 146 Gets t h e v a l u e o f t h e s u l y p r o p e r t y / 149 public double g e t S u l y ( ) return s u l y ; / 155 S e t s t h e v a l u e o f t h e s u l y p r o p e r t y / 158 public void s e t S u l y ( double value ) this. s u l y = value ; // Programlista : Az x j c á l t a l g e n e r á l t ObjectFactory o s z t á l y 2 3 // 4 // This f i l e was g e n e r a ted by t h e JavaTM A r c h i t e c t u r e f o r XML Binding (JAXB) Reference Implementation, v // See <a h r e f="h t t p :// j a v a. sun. com/xml/ j a x b">h t t p :// j a v a. sun. com/xml/ jaxb </a> 6 // Any m o d i f i c a t i o n s to t h i s f i l e w i l l be l o s t upon r e c o m p i l a t i o n o f t h e source schema. 7 // Generated on : at 0 6 : 4 9 : 0 4 PM GMT 8 // package t e s t. ceg. org ; import javax. xml. bind. JAXBElement ; 14 import javax. xml. bind. annotation. XmlElementDecl ; 15 import javax. xml. bind. annotation. XmlRegistry ; 16 import javax. xml. namespace. QName; / 20 This o b j e c t c o n t a i n s f a c t o r y methods f o r each 21 Java c o n t e n t i n t e r f a c e and Java element i n t e r f a c e 22 g e n e rated in t h e t e s t. ceg. org package. 23 <p>an ObjectFactory a l l o w s you to p r o g r a m a t i c a l l y 24 c o n s t r u c t new i n s t a n c e s o f t h e Java r e p r e s e n t a t i o n 25 f o r XML c o n t e n t. The Java r e p r e s e n t a t i o n o f XML 26 c o n t e n t can c o n s i s t o f schema d e r i v e d i n t e r f a c e s 27 and c l a s s e s r e p r e s e n t i n g t h e b i n d i n g o f schema 28 t y p e d e f i n i t i o n s, element d e c l a r a t i o n s and model 29 groups. Factory methods f o r each o f t h e s e are 30 p r o v i d e d in t h i s c l a s s / 34 public class ObjectFactory private f i n a l s t a t i c QName _Employee_QNAME = new QName( " org. ceg. t e s t ", " employee " ) ; / 39 Create a new ObjectFactory t h a t can be used to c r e a t e new i n s t a n c e s o f schema d e r i v e d c l a s s e s f o r package : t e s t. ceg. org / 42 public ObjectFactory ( ) 11

12 JAXB - A Java és XML összekötése / 46 Create an i n s t a n c e o Employee / 49 public Employee createemployee ( ) 50 return new Employee ( ) ; / 54 Create an i n s t a n c e o Address / 57 public Address c r e a t e A d d r e s s ( ) 58 return new Address ( ) ; / 62 Create an i n s t a n c e o <@link > / ( namespace = " org. ceg. t e s t ", name = " employee " ) 66 public JAXBElement<Employee> createemployee ( Employee value ) 67 return new JAXBElement<Employee>(_Employee_QNAME, Employee. class, null, value ) ; Szeretnénk kiemelni, hogy az Employee classhoz mi írtuk oda annotációt, mert az xjc ezt valami miatt nem tette meg. Ettől eltekintve korrekt Java forrás jött létre, gyakorlatilag kézzel is ezt írtuk meg korábban. Az Employee.xml XML fájl beolvasása ezekkel a generált osztályokkal természetesen ugyanúgy működik, ha kipróbáljuk. Az ObjectFactory osztály gyártómetódusokat ad az Employee és Address objektumok előállítására, de ezek csak kényelmi funkciók. Néhány apró változtatás A példa befejezéseként teszünk néhány változtatást az eredeti 2 Java osztályunkon, majd megnézzük, hogy milyen sémát lehet velük generálni. A megváltoztatott 2 bean-t az és Programlisták mutatják. // Programlista : Employee. j a v a package org. c s. t e s t. t t t ; import javax. xml. bind. annotation. XmlElement ; import javax. xml. bind. annotation. XmlRootElement ; import javax. xml. bind. annotation. XmlType ( namespace = " org. ceg. t e s t ", name = " Dolgozo " namespace = " org. ceg. t e s t " ) public class ( name=" cim", namespace = " http : / / org. c s. a d d r e s s " ) Address a d d r e s s ( name=" nev ", namespace = " org. ceg. t e s t " ) S t r i n g name ( name="nem" ) S t r i n g sex int kor double s u l y ; // Programlista : Address. j a v a package org. c s. t e s t. t t t ; import javax. xml. bind. annotation. XmlElement ; 12

13 JAXB - A Java és XML összekötése import javax. xml. bind. annotation. XmlType name=" cim", namespace = " org. ceg. t e s t " ) public class ( name=" utca " ) S t r i n g s t r e e t ; Ahol nem volt magyar az adatmező neve, ott magyar name értékre állítottuk a generált címke nevet. Példa: street utca. Az address mezőt egy minden eddigitől eltérő másik, nevű névtérbe ( name=" hazszam" ) int housenumber ; A változtatások ezek voltak: A schemagen parancs futtatása után most 2 XSD fájl keletkezett, amit az és Programlisták mutatnak. 1 // P r o g r a m l i s t a : schema1. xsd 2 3 <?xml version=" 1. 0 " encoding="utf 8" standalone=" yes "?> 4 <x s:schema version=" 1. 0 " targetnamespace=" org. ceg. t e s t " x m l n s : n s 1=" h t t p : // org. c s. a d d r e s s " x m l n s : t n s=" org. ceg. t e s t " xm 5 6 <xs: import namespace=" http: // org. cs. address " schemalocation=" schema2. xsd "/> 7 8 <xs: element name=" Dolgozo " type=" tns: employee "/> 9 10 <xs:complextype name=" employee "> 11 <x s : s e q u e n c e> 12 <xs: element r e f=" ns1:cim " minoccurs="0"/> 13 <x s : e l e m e n t name=" nev " type=" x s : s t r i n g " form=" q u a l i f i e d " minoccurs="0"/> 14 <x s : e l e m e n t name="nem" type=" x s : s t r i n g " minoccurs="0"/> 15 <x s : e l e m e n t name=" kor " type=" x s : i n t "/> 16 <xs: element name=" suly " type=" xs: double "/> 17 </ x s : s e q u e n c e> 18 </ xs:complextype> <xs:complextype name=" cim "> 21 <x s : s e q u e n c e> 22 <x s : e l e m e n t name=" utca " type=" x s : s t r i n g " minoccurs="0"/> 23 <xs: element name=" hazszam " type=" x s : i n t "/> 24 </ x s : s e q u e n c e> 25 </ xs:complextype> 26 </ x s :schema> 1 // P r o g r a m l i s t a : schema2. xsd 2 3 <?xml version=" 1. 0 " encoding="utf 8" standalone=" yes "?> 4 <xs:schema version=" 1. 0 " targetnamespace=" http: // org. cs. address " xmlns:ns1=" org. ceg. t e s t " xmlns:xs=" http: //www. w3. org 5 6 <x s : i m p o r t namespace=" org. ceg. t e s t " schemalocation=" schema1. xsd "/> 7 8 <xs: element name="cim " type=" ns1:cim "/> 9 </xs:schema > Mit tanulhatunk ebből? Az első, amit észrevehetünk, hogy az XML tag neveket megváltoztattuk, azaz nem automatikusan a Java bean property névből képződnek ott, ahol eredetileg angol mező nevek voltak. A másik lényeges és megjegyzésre érdemes momentum az, hogy a 2 névtér miatt 2 darab XSD keletkezett, amik egymást beimportálják. Ezzel lehetővé vált, hogy mindkét targetnamespace létezzen és a megfelelően adjuk meg a névtérbe tartozó XML sématípust. Az XML sémák fordítása Az előző példában minden alapvető dolgot megtanultunk, ezért a továbbiakban csak a tudásunkat mélyítjük egy kicsit tovább. Az Programlistán látható XML séma egy minden nap használt, produktív megoldás része. A következőkben megnézzük, hogy milyen Java kód gene- 13

14 JAXB - A Java és XML összekötése rálható erre és az egyes típusokhoz milyen Java típusok tartoznak majd. A sémával kapcsolatosan a következőkre hívjuk fel a figyelmet: Van benne 4 darab complextype A targetnamespace: urn:jaxbtest/xsd2java Mindegyik XSD skalár típus megtalálható benne Van olyan, ahol a maxoccurs="unbounded", azaz a címke akárhányszor ismétlődhet. Amikor nem adjuk meg egy sémarészhez a minoccurs és maxoccurs attribútumokat, akkor az elem pontosan 1 alkalommal kell, hogy előforduljon. A minoccurs="0" azt jelenti, hogy 0 darab is lehet 1 XML-ben ebből a tag-ból, míg a maxoccurs="unbounded" pedig azt engedi, hogy akármennyi. Ekkor itt egy Java tömb vagy List várható majd a generálás eredményeként. Ennyi előzmény után futtassuk le a következő xjc parancsot, ami legyártja a Java class-okat: x j c p c s. org. jaxb. t e s t j a x b T e s t. xsd A -p kapcsolóval azt adtuk meg, hogy a forrás milyen Java csomagba kerüljön, így a generált kód az cs/org/jaxb/test könyvtárba került. 1 // P r o g r a m l i s t a : jaxbtest. xsd 2 3 <?xml version=" 1. 0 " encoding="utf 8"?> 4 <x s:schema a t t r i b u t e F o r m D e f a u l t=" u n q u a l i f i e d " elementformdefault=" q u a l i f i e d " targetnamespace=" u r n : j a x b t e s t / xsd2java " xmlns:xs=" http: //www. w3. org /2001/XMLSchema"> 5 <x s : e l e m e n t name=" s e l e c t " type=" s c h : s e l e c t T y p e " x m l n s : s c h=" u r n : j a x b t e s t / x s d 2 j a v a "/> 6 <xs:complextype name=" datatype "> 7 <x s : s e q u e n c e minoccurs="0" maxoccurs="unbounded "> 8 <x s : e l e m e n t type=" sch:rowtype " name="row" x m l n s : s c h=" u r n : j a x b t e s t / x s d 2 j a v a "/> 9 </ x s : s e q u e n c e> 10 </ xs:complextype> 11 <xs:complextype name="rowtype"> 12 <x s : s e q u e n c e> 13 <x s : e l e m e n t type=" x s : s t r i n g " name=" t e s t S t r i n g "/> 14 <x s : e l e m e n t type=" x s : i n t e g e r " name=" t e s t I n t e g e r "/> 15 <x s : e l e m e n t type=" x s : i n t " name=" t e s t I n t "/> 16 <x s : e l e m e n t type=" x s : l o n g " name=" t e s t L o n g "/> 17 <x s : e l e m e n t type=" x s : s h o r t " name=" t e s t S h o r t "/> 18 <xs: element type=" xs: decimal " name=" testdecimal "/> 19 <x s : e l e m e n t type=" x s : f l o a t " name=" t e s t F l o a t "/> 20 <xs: element type=" xs: double " name=" testdouble "/> 21 <xs: element type=" xs: boolean " name=" testboolean "/> 22 <xs: element type=" xs: byte " name=" testbyte "/> 23 <x s : e l e m e n t type="xs:qname" name="testqname"/> 24 <xs: element type=" xs:datetime " name=" testdatetime "/> 25 <xs: element type=" xs: base64binary " name=" testbase64binary "/> 26 <xs: element type=" xs: hexbinary " name=" testhexbinary "/> 27 <xs: element type=" xs: unsignedint " name=" testunsignedint "/> 28 <xs: element type=" xs: unsignedshort " name=" testunsignedshort "/> 29 <xs: element type=" xs: unsignedbyte " name=" testunsignedbyte2 "/> 30 <xs: element type=" xs: time " name=" testtime "/> 31 <xs: element type=" xs: date " name=" testdate "/> 32 <xs: element type=" xs:anysimpletype " name=" testanysimpletype "/> 33 <x s : e l e m e n t type=" x s : d u r a t i o n " name=" t e s t D u r a t i o n "/> 34 </ x s : s e q u e n c e> 35 </ xs:complextype> 36 <xs:complextype name=" controlltype "> 37 <x s : s e q u e n c e> 38 <x s : e l e m e n t type=" x s : s t r i n g " name=" theme "/> 39 <xs: element type=" xs:datetime " name=" timestamp "/> 40 <x s : e l e m e n t type=" x s : s t r i n g " name=" query "/> 41 <x s : e l e m e n t type=" x s : s t r i n g " name=" t a b l e "/> 42 <x s : e l e m e n t type=" x s : s t r i n g " name=" d a t a s o u r c e "/> 43 <x s : e l e m e n t type=" x s : l o n g " name=" rowcnt "/> 44 <x s : e l e m e n t type=" x s : l o n g " name=" r e s u l t s e t i d "/> 45 </ x s : s e q u e n c e> 46 </ xs:complextype> 47 <xs:complextype name=" selecttype "> 48 <x s : s e q u e n c e> 49 <x s : e l e m e n t type=" s c h : c o n t r o l l T y p e " name=" c o n t r o l l " x m l n s : s c h=" u r n : j a x b t e s t / x s d 2 j a v a "/> 50 <x s : e l e m e n t type=" sch:datatype " name=" data " x m l n s : s c h=" u r n : j a x b t e s t / x s d 2 j a v a "/> 51 </ x s : s e q u e n c e> 52 </ xs:complextype> 53 </ x s :schema> 14

15 JAXB - A Java és XML összekötése 1 // Programlista : ControllType. j av a 2 3 // 4 // This f i l e was g e n e r a ted by t h e JavaTM A r c h i t e c t u r e f o r XML Binding (JAXB) Reference Implementation, v // See <a h r e f="h t t p :// j a v a. sun. com/xml/ j a x b">h t t p :// j a v a. sun. com/xml/ jaxb </a> 6 // Any m o d i f i c a t i o n s to t h i s f i l e w i l l be l o s t upon r e c o m p i l a t i o n o f t h e source schema. 7 // Generated on : at 0 2 : 5 9 : 4 5 PM GMT 8 // package c s. org. jaxb. t e s t ; import javax. xml. bind. annotation. XmlAccessType ; 14 import javax. xml. bind. annotation. XmlAccessorType ; 15 import javax. xml. bind. annotation. XmlElement ; 16 import javax. xml. bind. annotation. XmlSchemaType ; 17 import javax. xml. bind. annotation. XmlType ; 18 import javax. xml. datatype. XMLGregorianCalendar ; / 22 <p>java c l a s s f o r c o n t r o l l T y p e complex t y p e <p>the f o l l o w i n g schema fragment s p e c i f i e s t h e e x p e c t e d c o n t e n t contained w i t h i n t h i s c l a s s <pre> 27 &l t ; complextype name="c o n t r o l l T y p e"> 28 & l t ; complexcontent> 29 &l t ; r e s t r i c t i o n base=" h t t p ://www. w3. org /2001/XMLSchemaanyType"> 30 &l t ; sequence> 31 &l t ; element name="theme" t y p e=" h t t p ://www. w3. org /2001/XMLSchema s t r i n g "/> 32 &l t ; element name="timestamp " t y p e=" h t t p ://www. w3. org /2001/XMLSchemadateTime"/> 33 &l t ; element name="query " t y p e=" h t t p ://www. w3. org /2001/XMLSchema s t r i n g "/> 34 &l t ; element name=" t a b l e " t y p e=" h t t p ://www. w3. org /2001/XMLSchema s t r i n g "/> 35 &l t ; element name="d atasource " t y p e =" h t t p ://www. w3. org /2001/XMLSchema s t r i n g "/> 36 &l t ; element name="rowcnt " t y p e=" h t t p ://www. w3. org /2001/XMLSchema l o n g"/> 37 &l t ; element name=" r e s u l t s e t i d " t y p e=" h t t p ://www. w3. org /2001/XMLSchema l o n g"/> 38 &l t ; / sequence> 39 &l t ; / r e s t r i c t i o n > 40 &l t ; / complexcontent> 41 &l t ; / complextype> 42 </pre> / ( XmlAccessType. FIELD) name = " c o n t r o l l T y p e ", proporder = 48 "theme", 49 " timestamp ", 50 " query ", 51 " t a b l e ", 52 " d a t a s o u r c e ", 53 " rowcnt ", 54 " r e s u l t s e t i d " 55 ) 56 public class ControllType 57 ( r e q u i r e d = true ) 59 protected S t r i n g theme ; ( r e q u i r e d = true ) ( name = " datetime " ) 62 protected XMLGregorianCalendar timestamp ; ( r e q u i r e d = true ) 15

16 JAXB - A Java és XML összekötése 64 protected S t r i n g query ; ( r e q u i r e d = true ) 66 protected S t r i n g t a b l e ; ( r e q u i r e d = true ) 68 protected S t r i n g d a t a s o u r c e ; 69 protected long rowcnt ; 70 protected long r e s u l t s e t i d ; s e t t e r é s g e t t e r metódusok 73 / 74 Gets t h e v a l u e o f t h e timestamp p r o p e r t y p o s s i b l e o b j e c t i s link XMLGregorianCalendar / 81 public XMLGregorianCalendar gettimestamp ( ) 82 return timestamp ; / 86 S e t s t h e v a l u e o f t h e timestamp p r o p e r t y. 87 v a l u e 89 a l l o w e d o b j e c t i s link XMLGregorianCalendar / 93 public void settimestamp ( XMLGregorianCalendar value ) 94 this. timestamp = value ; // Programlista : RowType. j a v a 2 3 package c s. org. jaxb. t e s t ; 4 5 import java. math. BigDecimal ; 6 import java. math. B i g I n t e g e r ; 7 import javax. xml. bind. annotation. XmlAccessType ; 8 import javax. xml. bind. annotation. XmlAccessorType ; 9 import javax. xml. bind. annotation. XmlElement ; 10 import javax. xml. bind. annotation. XmlSchemaType ; 11 import javax. xml. bind. annotation. XmlType ; 12 import javax. xml. bind. annotation. a d a p t e r s. HexBinaryAdapter ; 13 import javax. xml. bind. annotation. a d a p t e r s. XmlJavaTypeAdapter ; 14 import javax. xml. datatype. Duration ; 15 import javax. xml. datatype. XMLGregorianCalendar ; 16 import javax. xml. namespace. QName; / 20 <p>java c l a s s f o r rowtype complex t y p e <p>the f o l l o w i n g schema fragment s p e c i f i e s t h e e x p e c t e d c o n t e n t contained w i t h i n t h i s c l a s s <pre> 25 & l t ; complextype name="rowtype"> 26 & l t ; complexcontent> 27 &l t ; r e s t r i c t i o n base=" h t t p ://www. w3. org /2001/XMLSchemaanyType"> 28 &l t ; sequence> 29 &l t ; element name=" t e s t S t r i n g " t y p e=" h t t p ://www. w3. org /2001/XMLSchema s t r i n g "/> 30 &l t ; element name=" t e s t I n t e g e r " t y p e=" h t t p ://www. w3. org /2001/XMLSchema i n t e g e r "/> 31 &l t ; element name=" t e s t I n t " t y p e=" h t t p ://www. w3. org /2001/XMLSchema i n t "/> 16

17 JAXB - A Java és XML összekötése 32 &l t ; element name="t e s t L o n g " t y p e =" h t t p ://www. w3. org /2001/XMLSchema l o n g"/> 33 &l t ; element name=" t e s t S h o r t " t y p e=" h t t p ://www. w3. org /2001/XMLSchema s h o r t "/> 34 &l t ; element name="t e s t D e c i m a l " t y p e=" h t t p ://www. w3. org /2001/XMLSchema decimal"/> 35 &l t ; element name=" t e s t F l o a t " t y p e=" h t t p ://www. w3. org /2001/XMLSchema f l o a t "/> 36 &l t ; element name="t e s t D o u b l e " t y p e=" h t t p ://www. w3. org /2001/XMLSchema d o u b l e "/> 37 &l t ; element name="t e s t B o o l e a n " t y p e=" h t t p ://www. w3. org /2001/XMLSchema boolean"/> 38 &l t ; element name="t e s t B y t e " t y p e=" h t t p ://www. w3. org /2001/XMLSchema b y t e "/> 39 &l t ; element name="testqname" t y p e=" h t t p ://www. w3. org /2001/XMLSchemaQName"/> 40 &l t ; element name="testdatetime " t y p e=" h t t p ://www. w3. org /2001/XMLSchemadateTime"/> 41 &l t ; element name="testbase64binary " t y p e=" h t t p ://www. w3. org /2001/XMLSchema base64binary"/> 42 &l t ; element name="testhexbinary " t y p e=" h t t p ://www. w3. org /2001/XMLSchema hexbinary"/> 43 &l t ; element name="t e s t U n s i g n e d I n t " t y p e=" h t t p ://www. w3. org /2001/XMLSchema u n s i g n e d I n t "/> 44 &l t ; element name="t e s t U n s i g n e d S h o r t " t y p e=" h t t p ://www. w3. org /2001/XMLSchema unsignedshort"/> 45 &l t ; element name="testunsignedbyte2 " t y p e=" h t t p ://www. w3. org /2001/XMLSchema unsignedbyte"/> 46 &l t ; element name="testtime " t y p e=" h t t p ://www. w3. org /2001/XMLSchema time"/> 47 &l t ; element name="t e s t D a t e " t y p e=" h t t p ://www. w3. org /2001/XMLSchema date"/> 48 &l t ; element name="testanysimpletype " t y p e=" h t t p ://www. w3. org /2001/XMLSchema anysimpletype"/> 49 &l t ; element name="t e s t D u r a t i o n " t y p e=" h t t p ://www. w3. org /2001/XMLSchema d u r a t i o n"/> 50 &l t ; / sequence> 51 &l t ; / r e s t r i c t i o n > 52 &l t ; / complexcontent> 53 &l t ; / complextype> 54 </pre> / ( XmlAccessType. FIELD) name = "rowtype", proporder = 60 " t e s t S t r i n g ", 61 " t e s t I n t e g e r ", 62 " t e s t I n t ", 63 " testlong ", 64 " t e s t S h o r t ", 65 " t e s t D e c i m a l ", 66 " t e s t F l o a t ", 67 " testdouble ", 68 " t e s t B o o l e a n ", 69 " t e s t B y t e ", 70 "testqname", 71 " testdatetime ", 72 " testbase64binary ", 73 " testhexbinary ", 74 " t e s t U n s i g n e d I n t ", 75 " t e s t U n s i g n e d S h o r t ", 76 " testunsignedbyte2 ", 77 " testtime ", 78 " t e s t D a t e ", 79 " testanysimpletype ", 80 " t e s t D u r a t i o n " 81 ) 82 public class RowType 83 ( r e q u i r e d = true ) 85 protected S t r i n g t e s t S t r i n g ; ( r e q u i r e d = true ) 87 protected B i g I n t e g e r t e s t I n t e g e r ; 88 protected int t e s t I n t ; 89 protected long testlong ; 90 protected short t e s t S h o r t ; ( r e q u i r e d = true ) 17

18 JAXB - A Java és XML összekötése 92 protected BigDecimal t e s t D e c i m a l ; 93 protected f l o a t t e s t F l o a t ; 94 protected double testdouble ; 95 protected boolean t e s t B o o l e a n ; 96 protected byte t e s t B y t e ; ( r e q u i r e d = true ) 98 protected QName testqname ; ( r e q u i r e d = true ) ( name = " datetime " ) 101 protected XMLGregorianCalendar testdatetime ; ( r e q u i r e d = true ) 103 protected byte [ ] testbase64binary ; ( r e q u i r e d = true, type = S t r i n g. class ) ( HexBinaryAdapter. class ) ( name = " hexbinary " ) 107 protected byte [ ] testhexbinary ; ( name = " u n s i g n e d I n t " ) 109 protected long t e s t U n s i g n e d I n t ; ( name = " unsignedshort " ) 111 protected int t e s t U n s i g n e d S h o r t ; ( name = " unsignedbyte " ) 113 protected short testunsignedbyte2 ; ( r e q u i r e d = true ) ( name = " time " ) 116 protected XMLGregorianCalendar testtime ; ( r e q u i r e d = true ) ( name = " date " ) 119 protected XMLGregorianCalendar t e s t D a t e ; ( r e q u i r e d = true ) ( name = " anysimpletype " ) 122 protected Object testanysimpletype ; ( r e q u i r e d = true ) 124 protected Duration t e s t D u r a t i o n ; s e t t e r é s g e t t e r metódusok A létrehozott Java osztályok közül most csak a ControllType és RowType egy-egy részlete került be a fenti programlistákba.a további generált Java forrásfájlok ezek: DataType.java a datatype complextype részére SelectType.java a selecttype complextype részére ObjectFactory kényelmi osztály Figyeljük meg a RowType tanulmányozásával, hogy az egyes XML séma típusok milyen Java típusokra képződtek le. required = true attribútuma azt jelenti, hogy ez a mező kötelezően megjelenő az XML, ami azért van, mert itt nem adtuk meg a minoccurs és maxoccurs paramétereket, tehát az előfordulás értéke 1. További érdekesség, hogy annotációnál létrejött a propordert is, ami felsorolásként tartalmazza azt a tag sorrendet, amit az érvényes XML-nek prezentálnia kell. Ez nem véletlen, hiszen ez az XSD xs:sequence részénél felsorolt elemeket jelenti. Dinamikus XML feldolgozás Gyakori feladat, hogy különféle XML szövegek érkeznek, amiket a típusuktól függően kell feldolgoznunk. Kommunikációs, integrációs környezetekben például egy sorba (Queue) érkezhetnek ezek az XML üzenetek, amiket más-más módon kell kezelnünk. Ebben a pontban azt mutatjuk 18

19 JAXB - A Java és XML összekötése meg, hogy az ilyen típusú feladatokat milyen módon tudjuk kezelni JAXB környezetben. Példaként tekintsük az és Programlistákat, amikhez tartozó XSD-ket is láthatjuk (1-20. és S t r i n g t i t l e int pages ; // Programlista : C l a s s F i r s t. j a v a package org. c s. jaxb. t e s t ; import javax. xml. bind. annotation. XmlElement ; import javax. xml. bind. annotation. XmlRootElement ; import javax. xml. bind. annotation. XmlType ( namespace = " org. c s. jaxb. t e s t " namespace = " org. c s. jaxb. t e s t " ) public class C l a s s F i r s S t r i n g name int value ; // P r o g r a m l i s t a : C l a s s F i r s t. xsd <?xml version=" 1. 0 " encoding="utf 8" standalone=" yes "?> <xs: schema version=" 1. 0 " targetnamespace=" org. c s. jaxb. t e s t " x m l n s : t n s=" org. c s. jaxb. t e s t " xmlns:xs=" h t t p : //www. w3. org / <x s : e l e m e n t name=" c l a s s F i r s t " type=" t n s : c l a s s F i r s t "/> <xs:complextype name=" c l a s s F i r s t "> <x s : s e q u e n c e > <x s : e l e m e n t name="name" type=" x s : s t r i n g " minoccurs=" 0"/> <x s : e l e m e n t name=" value " type=" x s : i n t "/> </x s : s e q u e n c e > </xs:complextype> </xs:schema> // Programlista : ClassSecond. j a v a package org. c s. jaxb. t e s t ; import javax. xml. bind. annotation. XmlElement ; import javax. xml. bind. annotation. XmlRootElement ; import javax. xml. bind. annotation. XmlType ( namespace = " org. c s. jaxb. t e s t " namespace = " org. c s. jaxb. t e s t " ) public class S t r i n g d e s c r i p t i o n ; // P r o g r a m l i s t a : ClassSecond. xsd <?xml version=" 1. 0 " encoding="utf 8" standalone=" yes "?> <xs: schema version=" 1. 0 " targetnamespace=" org. c s. jaxb. t e s t " x m l n s : t n s=" org. c s. jaxb. t e s t " xmlns:xs=" h t t p : //www. w3. org / <x s : e l e m e n t name=" c l a s s S e c o n d " type=" t n s : c l a s s S e c o n d "/> <xs:complextype name=" c l a s s S e c o n d "> <x s : s e q u e n c e > <x s : e l e m e n t name=" d e s c r i p t i o n " type=" x s : s t r i n g " minoccurs="0"/> <x s : e l e m e n t name=" t i t l e " type=" x s : s t r i n g " minoccurs=" 0"/> <x s : e l e m e n t name=" pages " type=" x s : i n t "/> </x s : s e q u e n c e > </xs:complextype> </xs:schema> A GenXML osztály (1-23. Programlista) segítségével legyártottuk a ClassFirst.xml és ClassSecond.xml XML fájlokat, ezek lesznek a minta üzenetek, amiket különféle módon kell feldolgozni. A sorok között létrehozzunk egyegy ClassFirst és ClassSecond objektumot. A 27. sor nagyon fontos, mert ez egy olyan Class[] tömböt hoz létre, ami azokat az osztályokat sorolja fel, amiket majd a JAXB kontextusban kezelni, ismerni akarunk. A 29. sor ennek megfelelően hoz létre egy JAXBContext objektumot, amitől a következő sorban egy Marshaller objektumot igénylünk. A sorokban mindkét előzetesen létrehozott objektumunkat XML fájlba perzisztáljuk. Most, hogy van 2 különböző XML üzenetünk, elérkeztünk oda, hogy be tudjuk mutatni az azok egyedi kezelését megvalósító XMLProcessor osztályt (1-24. Programlista). Nézzük meg röviden a működését! A sorok jelentése már bizonyára mindenkinek világos, ezért a 25. sorban lévő unmarshal() metódushívásra hívnánk fel először a figyelmet, ahol a beolvasott XML egy általános Object sta- 19

20 JAXB - A Java és XML összekötése tikus típusú objektumba kerül. A trükk igazából csak ennyi, mert utána az egyes elágazásokban az instanceof utasításra épülő döntés már segít a konkrét esetek szétválasztásában és feldolgozásában. 1 // Programlista : GenXML. j a v a 2 3 package org. c s. jaxb. t e s t ; 4 5 import java. i o. F i l e ; 6 import javax. xml. bind. JAXBContext ; 7 import javax. xml. bind. JAXBException ; 8 import javax. xml. bind. M a r s h a l l e r ; 9 import t e s t. ceg. org. Employee ; public class GenXML public s t a t i c void main ( S t r i n g [ ] a r g s ) throws JAXBException C l a s s F i r s t c f = new C l a s s F i r s t ( ) ; 16 c f. name = " N y i r i Imre " ; 17 c f. value = 5 ; ClassSecond c s = new ClassSecond ( ) ; 20 c s. d e s c r i p t i o n = "Ez egy j ó l e c k e v o l t. " ; 21 c s. pages = ; 22 c s. t i t l e = " I n f o r m a t i k a i Navigátor " ; F i l e x m l f i l e 1 = new F i l e ( "/home/ t a n u l a s /xml/ C l a s s F i r s t. xml" ) ; 25 F i l e x m l f i l e 2 = new F i l e ( "/home/ t a n u l a s /xml/ ClassSecond. xml" ) ; C l a s s [ ] c l a s s e s = new C l a s s [ ] C l a s s F i r s t. class, ClassSecond. class ; JAXBContext jaxbcontext = JAXBContext. newinstance ( c l a s s e s ) ; 30 M a r s h a l l e r j a x b M a r s h a l l e r = jaxbcontext. c r e a t e M a r s h a l l e r ( ) ; 31 j a x b M a r s h a l l e r. s e t P r o p e r t y ( M a r s h a l l e r.jaxb_formatted_output, Boolean.TRUE) ; 32 j a x b M a r s h a l l e r. marshal ( cf, x m l f i l e 1 ) ; 33 j a x b M a r s h a l l e r. marshal ( cs, x m l f i l e 2 ) ; // Programlista : XMLProcessor. j av a 2 3 package org. c s. jaxb. t e s t ; 4 5 import java. i o. F i l e ; 6 import javax. xml. bind. JAXBContext ; 7 import javax. xml. bind. JAXBException ; 8 import javax. xml. bind. Unmarshaller ; 9 10 public class XMLProcessor public s t a t i c void main ( S t r i n g [ ] a r g s ) throws JAXBException C l a s s [ ] c l a s s e s = new C l a s s [ ] org. c s. jaxb. t e s t. C l a s s F i r s t. class, 17 org. c s. jaxb. t e s t. ClassSecond. class 18 ; JAXBContext jaxbcontext = JAXBContext. newinstance ( c l a s s e s ) ; 21 Unmarshaller jaxbunmarshaller = jaxbcontext. c r e a t e U n m a r s h a l l e r ( ) ; F i l e x m l f i l e = new F i l e ( "/home/ t a n u l a s /xml/ ClassSecond. xml" ) ; 20

21 JAXB - A Java és XML összekötése Object xmlobject = jaxbunmarshaller. unmarshal ( x m l f i l e ) ; i f ( xmlobject instanceof C l a s s F i r s t ) C l a s s F i r s t c f = ( C l a s s F i r s t ) xmlobject ; 30 System. out. p r i n t l n ( c f. name ) ; 31 System. out. p r i n t l n ( c f. value ) ; else i f ( xmlobject instanceof ClassSecond ) ClassSecond c f = ( ClassSecond ) xmlobject ; 36 System. out. p r i n t l n ( c f. d e s c r i p t i o n ) ; 37 System. out. p r i n t l n ( c f. pages ) ; 38 System. out. p r i n t l n ( c f. t i t l e ) ; else System. out. p r i n t l n ( " I s m e r e t l e n XML! " ) ; Érdekes XML séma lehetőségek Ebben a pontban az Programlista sémáját néhány helyen megváltoztatjuk és tanulmányozzuk, hogy mindez milyen hatással van a generált Java osztályokra. Ez a módszer azért lesz tanulságos, mert azután mi is tudunk így annotált class-okat készíteni, azaz sokat tanulhatunk a -okról. Ismétlődések és XML tag számosságok Eddig nem mutattuk meg, hogy milyen lett a generált DataType class, pedig lehet belőle tanulni, emiatt nézzük is meg! Amit meg kell figyelnünk, az a protected List<RowType> row sor (45. sor), ugyanis a row tag 0 vagy több ismétlődéssel lehet a séma szerint, amit ez a konstrukció jól leképez. 1 // Programlista : DataType. j a v a 2 3 // 4 // This f i l e was g e n e r a ted by t h e JavaTM A r c h i t e c t u r e f o r XML Binding (JAXB) Reference Implementation, v // See <a h r e f="h t t p :// j a v a. sun. com/xml/ j a x b">h t t p :// j a v a. sun. com/xml/ jaxb </a> 6 // Any m o d i f i c a t i o n s to t h i s f i l e w i l l be l o s t upon r e c o m p i l a t i o n o f t h e source schema. 7 // Generated on : at 0 4 : 2 2 : 1 6 PM GMT 8 // package c s. org. jaxb. t e s t ; import java. u t i l. ArrayList ; 14 import java. u t i l. L i s t ; 15 import javax. xml. bind. annotation. XmlAccessType ; 16 import javax. xml. bind. annotation. XmlAccessorType ; 17 import javax. xml. bind. annotation. XmlType ; / 21 <p>java c l a s s f o r datatype complex t y p e <p>the f o l l o w i n g schema fragment s p e c i f i e s t h e e x p e c t e d c o n t e n t contained w i t h i n t h i s c l a s s <pre> 21

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 13. előadás Throwable Error Exception RuntimeException IOException Saját (általában) Nem ellenörzött kivételek (Unchecked

Részletesebben

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek. Programozás III CSOMAGOK Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek. A Java is csomagok halmaza: csomagokban van a fejlesztő környezet és az osztálykönyvtárak is: rt.jar fájl

Részletesebben

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit. Sapientia - EMTE 2008 Az előadás célja JPA - - perzisztencia ORM - - Objektumrelációs leképzés - Entitásbabok Állandóság Mechanizmus amely során az alkalmazás adatai megőrzésre kerülnek valamely perzisztens

Részletesebben

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07.

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. Java VI. Öröklődés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. Java VI.: Öröklődés JAVA6 / 1 Egy kis kitérő: az UML UML: Unified Modelling Language Grafikus eszköz objektum

Részletesebben

Java programozási nyelv 6. rész Java a gyakorlatban

Java programozási nyelv 6. rész Java a gyakorlatban Java programozási nyelv 6. rész Java a gyakorlatban Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. október A Java programozási nyelv Soós Sándor 1/16 Tartalomjegyzék

Részletesebben

2011.11.29. JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

2011.11.29. JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése Tartalom Integrált fejlesztés Java platformon JUnit JUnit használata Tesztelési technikák Demo 2 A specifikáció alapján teszteljük a program egyes részeit, klasszikus V-modell szerint Minden olyan metódust,

Részletesebben

Java Server Pages - JSP. Web Technológiák. Java Server Pages - JSP. JSP lapok életciklusa

Java Server Pages - JSP. Web Technológiák. Java Server Pages - JSP. JSP lapok életciklusa Web Technológiák Java Server Pages - JSP Répási Tibor egyetemi tanársegéd Miskolc Egyetem Infomatikai és Villamosmérnöki Tanszékcsoport (IVM) Általános Informatikai Tanszék Iroda: Inf.Int. 108. Tel: 2101

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java 2. gyakorlat Függvények Általános prototípus Módosítószavak Láthatóság: public, protected, private. Ha nem definiált, akkor úgynevezett package-private láthatóság. Lehet abstract

Részletesebben

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o Miért Java? széleskörben elterjedt Micro Edition - beágyazott rendszerek, régi telefonok Standard Edition - PC, android ezen alapul Enterprise Edition - vállalati programok, web service-ek multiplatform

Részletesebben

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Programozási nyelvek II. JAVA EA+GY 1. gyakolat Programozási nyelvek II. JAVA EA+GY 1. gyakolat EÖTVÖS LORÁND TUDOMÁNYEGYTEM INFORMATIKAI KAR PROGRAMOZÁSI NYELVEK ÉS FORDÍTÓPROGRAMOK TANSZÉK 2017/2018. őszi félév Tartalom 1 Amit tudni kell a félévről

Részletesebben

117. AA Megoldó Alfréd AA 117.

117. AA Megoldó Alfréd AA 117. Programozás alapjai 2. (inf.) pót-pótzárthelyi 2011.05.26. gyak. hiányzás: kzhpont: MEG123 IB.028/117. NZH:0 PZH:n Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,

Részletesebben

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22 Szerializáció Tóth Zsolt Miskolci Egyetem 2014 Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 1 / 22 Tartalomjegyzék 1 Szerializációs Alapfogalmak 2 Szerializációs Megoldások Object Szerializáció XML

Részletesebben

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN vizsgatételek 1. Az objektumorientált programozás szemlélete, az objektum fogalma 2. Az objektumorientált programozás alapelvei 3. A Java nyelv története, alapvető

Részletesebben

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia Öröklés ism. Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia Szeberényi Imre BME IIT Egy osztályból olyan újabb osztályokat származtatunk, amelyek rendelkeznek

Részletesebben

Bevezető. Servlet alapgondolatok

Bevezető. Servlet alapgondolatok A Java servlet technológia Fabók Zsolt Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem Utolsó módosítás: 2008. 03. 06. Servlet Bevezető Igény a dinamikus WEB tartalmakra Előzmény: CGI Sokáig

Részletesebben

C#, OOP. Osztályok tervezése C#-ban

C#, OOP. Osztályok tervezése C#-ban C#, OOP Osztályok tervezése C#-ban OOP Létrehozás (creating) Megszüntetés (destroying) Túlterhelés (overlading) Felsorolás típus (enumerated types) 2 Hajó osztály Sailboat class using System; class Sailboat

Részletesebben

Programozási nyelvek JAVA EA+GY 1. gyakolat

Programozási nyelvek JAVA EA+GY 1. gyakolat Programozási nyelvek JAVA EA+GY 1. gyakolat EÖTVÖS LORÁND TUDOMÁNYEGYTEM INFORMATIKAI KAR PROGRAMOZÁSI NYELVEK ÉS FORDÍTÓPROGRAMOK TANSZÉK 2018/2019. tavaszi félév Tartalom 1 A Java alapjai 2 Java program

Részletesebben

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem C# nyelv alapjai Krizsán Zoltán 1 Általános Informatikai Tanszék Miskolci Egyetem Objektumorientált programozás C# alapokon tananyag Tartalom Bevezetés Lokális változó Utasítások Szójáték Why do all real

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java statikus programszerkezet Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 2. előadás csomag könyvtárak könyvtárak forrásfájlok bájtkódok (.java) (.class) primitív osztály

Részletesebben

JNDI - alapok. Java Naming and Directory Interface

JNDI - alapok. Java Naming and Directory Interface JNDI - alapok Java Naming and Directory Interface Naming Service Naming service: nevek hozzárendelése objektumokhoz, elérési lehetőség (objektumok/szolgáltatások lokalizálása), információk központosított

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 9. előadás Interface - típust vezet be, de osztálypéldány nem készíthető belőle (statikus típust ad) - több osztály is

Részletesebben

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft Java-ról Kotlinra Ekler Péter peter.ekler@aut.bme.hu BME AUT Tartalom Java és Kotlin kapcsolata Hogyan próbálhatjuk ki? Kotlin kultúra kialakítása cégen belül Milyen a Kotlin a Java-hoz képest? Történet

Részletesebben

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés Tartalom D Szoftvertechnológia elıadás Architektúra D vs CORBA Példá 2 1987 Dynamic Data Exchange (DDE) Windows 2.0-ban Windows alkalmazások közötti adatcsere Ma is használatos (pl. vágólap) NetDDE NetBIOS

Részletesebben

XML sémanyelvek Jeszenszky, Péter

XML sémanyelvek Jeszenszky, Péter XML sémanyelvek Jeszenszky, Péter XML sémanyelvek Jeszenszky, Péter Publication date 2010 Szerzői jog 2010 Jeszenszky Péter A tananyag a TÁMOP-4.1.2-08/1/A-2009-0046 számú Kelet-magyarországi Informatika

Részletesebben

Osztályok. 4. gyakorlat

Osztályok. 4. gyakorlat Osztályok 4. gyakorlat Az osztály fogalma Az objektumok formai leírása, melyek azonos tulajdonsággal és operációkkal rendelkeznek. Osztályból objektum készítését példányosításnak nevezzük. Minden objektum

Részletesebben

Szervlet-JSP együttműködés

Szervlet-JSP együttműködés Java programozási nyelv 2007-2008/ősz 10. óra Szervlet-JSP együttműködés Kérés továbbítás technikái legradi.gabor@nik.bmf.hu szenasi.sandor@nik.bmf.hu Szervlet-JSP együttműködés Témakörök Osztálykönyvtár

Részletesebben

Segédanyag: Java alkalmazások gyakorlat

Segédanyag: Java alkalmazások gyakorlat Segédanyag: Java alkalmazások gyakorlat Készítette: Szabó Attila 2009/2010-2 félév, 2. gyakorlat 1 Osztályok és objektumok default, public, protected, private láthatóság a metódusokra és adattagokra (első

Részletesebben

OOP: Java 8.Gy: Abstract osztályok, interfészek

OOP: Java 8.Gy: Abstract osztályok, interfészek OOP: Java 8.Gy: Abstract osztályok, interfészek 26/1 B ITv: MAN 2019.04.03 Abszrakt metódus és absztrakt osztály. Gyakran előfordul a tervezés során, hogy egy osztály szintjén tudjuk, hogy valamilyen metódus

Részletesebben

Metamodellezés. Simon Balázs BME IIT, 2011.

Metamodellezés. Simon Balázs BME IIT, 2011. Metamodellezés Simon Balázs BME IIT, 2011. Bevezetés Metamodellezés EMF & ecore Tartalom (C) Simon Balázs, BME IIT, 2011. 2 Hétfő: Simon Balázs Bevezetés hetente felváltva: előadás és gyakorlat metamodellezés

Részletesebben

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN Objektum Orientált Programozás 11. Kivételkezelés 44/1B IT MAN B IT v: 2016.05.03 MAN Pici elmélet A Java kivételkezelésének célja a programfutás során keletkezett hibák kiszűrése és megfelelő kezelése.

Részletesebben

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás Számítástechnika II. BMEKOKAA153 5. Előadás Dr. Bécsi Tamás Kivételkezelés try Azon utasítások kerülnek ide, melyek hibát okozhatnak, kivételkezelést igényelnek catch( típus [név]) Adott kivételtípus esetén

Részletesebben

3. SZÁMÚ MELLÉKLET. Elektronikus számla - XML definíciók. a) Számla. 1. ábra Számla

3. SZÁMÚ MELLÉKLET. Elektronikus számla - XML definíciók. a) Számla. 1. ábra Számla 3. SZÁMÚ MELLÉKLET Elektronikus számla - XML definíciók a) Számla 1. ábra Számla 2. ábra Számla fejléce 3. ábra Számlatételek 4. ábra Számla összesítése DTD definíció

Részletesebben

SQLServer. DB Recovery modes

SQLServer. DB Recovery modes SQLServer 13. téma Szöveges állományok kezelése XML DB Recovery modes A DML műveletek hatékonyságának fontos eleme a naplózás módozata: - FULL Recovery mode: minden elemi művelet naplózódik költséges,

Részletesebben

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben? 1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben? 3. Ismertesse a névtér fogalmát! 4. Mit értünk a "változó hatóköre"

Részletesebben

Modellinformációk szabványos cseréje. Papp Ágnes, Debreceni Egyetem EFK

Modellinformációk szabványos cseréje. Papp Ágnes, Debreceni Egyetem EFK Modellinformációk szabványos cseréje Papp Ágnes, agi@delfin.unideb.hu Debreceni Egyetem EFK Tartalom MOF, UML, XMI Az UML és az XML séma MDA - Model Driven Architecture Networkshop 2004 2 Az OMG metamodell

Részletesebben

A Java EE 5 plattform

A Java EE 5 plattform A Java EE 5 platform Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem Utolsó módosítás: 2007. 11. 13. A Java EE 5 platform A Java EE 5 plattform A J2EE 1.4 után következő verzió. Alapvető továbbfejlesztési

Részletesebben

Szoftvertechnológia alapjai Java előadások

Szoftvertechnológia alapjai Java előadások Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz e-mail: fandrew@mit.bme.hu tárgy honlap: http://home.mit.bme.hu/~fandrew/szofttech_hu.html A mai előadás tartalma: Miért pont Java?

Részletesebben

Általános nyomtatványok xml szerkezete. (v1.3)

Általános nyomtatványok xml szerkezete. (v1.3) Általános nyomtatványok xml szerkezete (v1.3) BEVEZETŐ... 3 1.1 FOGALOMMAGYARÁZAT... 3 2 A NYOMTATVÁNYOK XML FORMÁTUMA... 4 2.1 AZ XML MODELL... 4 2.2 A NYOMTATVÁNYOK XML FELÉPÍTÉSE... 4 2.2.1 Megkötések...

Részletesebben

Generikus Típusok, Kollekciók

Generikus Típusok, Kollekciók Generikus Típusok, Kollekciók Tóth Zsolt Miskolci Egyetem 2013 Tóth Zsolt (Miskolci Egyetem) Generikus Típusok, Kollekciók 2013 1 / 26 Tartalomjegyzék 1 Enumeráció 2 Generikus Típusok 3 Kollekciók System.Collections

Részletesebben

3. SZÁMÚ MELLÉKLET. Elektronikus számla - XML definíciók. a) Számla. 1. ábra Számla

3. SZÁMÚ MELLÉKLET. Elektronikus számla - XML definíciók. a) Számla. 1. ábra Számla 3. SZÁMÚ MELLÉKLET Elektronikus számla - XML definíciók a) Számla 1. ábra Számla 1 2. ábra Számla fejléce eladó és vevő tekintetében 2 3. ábra Számla fejléce képviselő és számlainformáció tekintetében

Részletesebben

Programozási alapismeretek 4.

Programozási alapismeretek 4. Programozási alapismeretek 4. Obejktum-Orientált Programozás Kis Balázs Bevezetés I. Az OO programozási szemlélet, egy merőben más szemlélet, az összes előző szemlélettel (strukturális, moduláris, stb.)

Részletesebben

Gépi tanulás a Rapidminer programmal. Stubendek Attila

Gépi tanulás a Rapidminer programmal. Stubendek Attila Gépi tanulás a Rapidminer programmal Stubendek Attila Rapidminer letöltése Google: download rapidminer Rendszer kiválasztása (iskolai gépeken Other Systems java) Kicsomagolás lib/rapidminer.jar elindítása

Részletesebben

XmlGessünk 13. rész - Az XML Schema II.

XmlGessünk 13. rész - Az XML Schema II. XmlGessünk 13. rész - Az XML Schema II. Az elz részben láthattuk, hogyan kell közvetlen egymásba ágyazással, referenciákkal és típusok definiálásával egyszerbb sémákat szerkeszteni. Részletesen megnéztük

Részletesebben

Se S r e ial a iza z t a ion o n (in n Ja J v a a v ) a Szerializáció

Se S r e ial a iza z t a ion o n (in n Ja J v a a v ) a Szerializáció Serialization (in Java) Szerializáció Java Serialization API Standard eljárás az objektumok állapotának adatfolyamba történő kiírására (elmentésére egy bájtszekvenciába), és visszatöltésére Perzisztencia

Részletesebben

Javadoc. Dokumentációs megjegyzés (2) Dokumentációs megjegyzés (1) Dokumentációs megjegyzés felépítése

Javadoc. Dokumentációs megjegyzés (2) Dokumentációs megjegyzés (1) Dokumentációs megjegyzés felépítése Javadoc Dokumentációs megjegyzés (2) Jeszenszky Péter Debreceni Egyetem, Informatikai Kar jeszenszky.peter@inf.unideb.hu Verzió: 2015.0 Utolsó módosítás: 2015. április 21. Tartalmazhatja a forráskódban

Részletesebben

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*; Java osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. ( Előfeltétel 12. Tétel ) Az osztály egy olyan típus leíró struktúra, amely

Részletesebben

Adatbázis-kezelés ODBC driverrel

Adatbázis-kezelés ODBC driverrel ADATBÁZIS-KEZELÉS ODBC DRIVERREL... 1 ODBC: OPEN DATABASE CONNECTIVITY (NYÍLT ADATBÁZIS KAPCSOLÁS)... 1 AZ ODBC FELÉPÍTÉSE... 2 ADATBÁZIS REGISZTRÁCIÓ... 2 PROJEKT LÉTREHOZÁSA... 3 A GENERÁLT PROJEKT FELÉPÍTÉSE...

Részletesebben

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18 C# Nyelvi Elemei Tóth Zsolt Miskolci Egyetem 2013 Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei 2013 1 / 18 Tartalomjegyzék 1 Object 2 Típusok 3 String 4 RegEx Tóth Zsolt (Miskolci Egyetem) C# Nyelvi

Részletesebben

XML adatkezelés. 5. témakör. Nincs explicit névtér kijelölve. <?xml version="1.0"?> <xs:schema xmlns:xs="

XML adatkezelés. 5. témakör. Nincs explicit névtér kijelölve. <?xml version=1.0?> <xs:schema xmlns:xs= XML adatkezelés 5. témakör Az XMLSchema speciális elemei ME GEIAL dr Kovács Lászl szló Nincs explicit névtér kijelölve > séma

Részletesebben

Segédanyag: Java alkalmazások gyakorlat

Segédanyag: Java alkalmazások gyakorlat Segédanyag: Java alkalmazások gyakorlat Készítette: Szabó Attila 2010/2011-2 félév, 11. gyakorlat (az előző 2 gyak közül az egyiken ZH volt, a másik szünet miatt elmaradt) 1 JAR fájl készítés A JAR (Java

Részletesebben

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI) Eötvös Loránd Tudományegyetem Informatikai Kar Webes alkalmazások fejlesztése 8. előadás (ASP.NET WebAPI) 2016 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto A webszolgáltatás

Részletesebben

C# osztályok. Krizsán Zoltán

C# osztályok. Krizsán Zoltán C# osztályok Krizsán Zoltán Fogalma Önálló hatáskőrrel rendelkező, absztrakt adattípus, amely több, különböző elemet tartalmazhat. Minden esetben a heap-en jön létre! A programozó hozza létre, de a GC

Részletesebben

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra Programozás II. 2. gyakorlat Áttérés C-ről C++-ra Tartalom Új kommentelési lehetőség Változók deklarációjának helye Alapértelmezett függvényparaméterek Névterek I/O műveletek egyszerűsödése Logikai adattípus,

Részletesebben

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor Java Programozás 4. Gy: Java GUI Tipper, MVC kalkulátor 15/1 B ITv: MAN 2018.03.10 1. Feladat: Tipper Készítsük el a tippelős programunk grafikus változatát. Az üzleti logika kódja megvan, a felület pedig

Részletesebben

BME MOGI Gépészeti informatika 8.

BME MOGI Gépészeti informatika 8. BME MOGI Gépészeti informatika 8. 1. feladat Készítse beosztottak és vezetők munkahelyi adatait kezelő alkalmazást! A feladat megoldásához hozza létre a következő osztályokat! Beosztott osztály: adatmező

Részletesebben

Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven Objektumorientált programozás C# nyelven 2. rész Öröklés és többalakúság Nemvirtuális metódusok, elrejtés Virtuális metódusok, elrejtés Típuskényszerítés, az is és as operátorok Absztrakt osztályok, absztrakt

Részletesebben

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés Bevezetés a programozásba 2 7. Előadás: Objektumszű és osztályszű elemek, hibakezelés ISMÉTLÉS Osztály class Particle { public: Particle( X, X, Y); virtual void mozog( ); ); virtual void rajzol( ) const;

Részletesebben

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni? A "java Villa -v" parancs jelentése: A java interpreter elindítja a Villa osztály statikus main metódusát, és átadja neki paraméterként a "-v" stringet. A java interpreter elindítja először a Villa osztály

Részletesebben

1. Alapok. Programozás II

1. Alapok. Programozás II 1. Alapok Programozás II Elérhetőség Név: Smidla József Elérhetőség: smidla dcs.uni-pannon.hu Szoba: I916 2 Irodalom Bjarne Stroustrup: A C++ programozási nyelv 3 Irodalom Erich Gamma, Richard Helm, Ralph

Részletesebben

Java programozási nyelv 10. rész Input/output kezelés

Java programozási nyelv 10. rész Input/output kezelés Java programozási nyelv 10. rész Input/output kezelés Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/28 Tartalomjegyzék

Részletesebben

OOP: Java 4.Gy: Java osztályok

OOP: Java 4.Gy: Java osztályok OOP: Java 4.Gy: Java osztályok. 36/1 B ITv: MAN 2019.03.02 Feladat Készítsen el egy Employee osztályt és egy Employee osztályt használó osztályt (EmpProgram). Az Employee osztálynak: van name és salary

Részletesebben

Web-technológia PHP-vel

Web-technológia PHP-vel Web-technológia PHP-vel A PHP programnyelv 2, futtatókörnyezet beálĺıtások Erős Bence February 26, 2013 Erős Bence () Web-technológia PHP-vel February 26, 2013 1 / 19 Szuperglobális változók $ GET : request

Részletesebben

Hello World Servlet. Készítsünk egy szervletet, amellyel összeadhatunk két számot, és meghívásakor üdvözlőszöveget ír a konzolra.

Hello World Servlet. Készítsünk egy szervletet, amellyel összeadhatunk két számot, és meghívásakor üdvözlőszöveget ír a konzolra. Hello World Servlet Készítsünk egy szervletet, amellyel összeadhatunk két számot, és meghívásakor üdvözlőszöveget ír a konzolra. Hozzunk létre egy Dynamic Web projectet File New Other itt a következőket

Részletesebben

OOP #14 (referencia-elv)

OOP #14 (referencia-elv) OOP #14 (referencia-elv) v1.0 2003.03.19. 21:22:00 Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. e-mail: aroan@ektf.hu web: http://aries.ektf.hu/~aroan OOP OOP_14-1 - E jegyzet

Részletesebben

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN OOP: Java 11.Gy: Enumok, beágyazott osztályok 13/1 B ITv: MAN 2019.04.24 ArrayList Rugalmas tömb A tömbök korlátai Fix méret, nem lehet menet közben megnövelni Ha túl nagyra választjuk, fölösleges helyfoglalás

Részletesebben

Informatika terméktervezőknek

Informatika terméktervezőknek Informatika terméktervezőknek C# alapok Névterület (namespace) using Osztály (class) és Obejtumok Metódus (function, procedure, method) main() static void string[] arg Szintaxis // /* */ \n \t Névadások

Részletesebben

Collections. Összetett adatstruktúrák

Collections. Összetett adatstruktúrák Collections Összetett adatstruktúrák Collections framework Előregyártott interface-ek és osztályok a leggyakoribb összetett adatszerkezetek megvalósítására Legtöbbször módosítás nélkül használhatók Időt,

Részletesebben

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat Szimuláljuk különféle élőlények túlélési versenyét. A lények egy pályán haladnak végig, ahol váltakozó viszonyok vannak. Egy lénynek

Részletesebben

Sorosítás (szerializáció) és helyreállítás. 1. Bináris sorosítás és helyreállítás. 1.1. Szükséges névterek. 1.2. Attribútumok. 1.3.

Sorosítás (szerializáció) és helyreállítás. 1. Bináris sorosítás és helyreállítás. 1.1. Szükséges névterek. 1.2. Attribútumok. 1.3. Sorosítás (szerializáció) és helyreállítás Cél: a memóriában tárolt adatok egyszerű lemezre mentése és visszatöltése. A sorosítás során létrehozunk egy állományt és egy sorosítást kezelő objektumot. Ez

Részletesebben

3. Osztályok II. Programozás II

3. Osztályok II. Programozás II 3. Osztályok II. Programozás II Bevezető feladat Írj egy Nevsor osztályt, amely legfeljebb adott mennyiségű nevet képes eltárolni. A maximálisan tárolható nevek számát a konstruktorban adjuk meg. Az osztályt

Részletesebben

Kalapácsvetés 2016 szöveges

Kalapácsvetés 2016 szöveges Kalapácsvetés 2016 Ebben a feladatban a 2016. évi nyári olimpiai játékokon az atlétika férfi kalapácsvetés döntőjének eredményeit kell feldolgoznia. A döntő 6 dobási sorozatból állt, de a 3. sorozat után

Részletesebben

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat Kivételkezelés, beágyazott osztályok Nyolcadik gyakorlat Kivételkezelés Nem minden hibát lehet fordítási időben megtalálni Korábban (pl. C-ben) a hibakezelést úgy oldották meg, hogy a függvény hibakódot

Részletesebben

Cikktípusok készítése a Xarayában

Cikktípusok készítése a Xarayában Cikktípusok készítése a Xarayában A Xaraya legfontosabb tulajdonsága az egyedi cikktípusok egyszerű készítésének lehetősége. Ezzel kiküszöbölhető egyedi modulok készítése, hiszen néhány kattintással tetszőleges

Részletesebben

Webes alkalmazások fejlesztése 12. fejezet. Szolgáltatás alapú kommunikáció (WCF) Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Webes alkalmazások fejlesztése 12. fejezet. Szolgáltatás alapú kommunikáció (WCF) Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar Eötvös Loránd Tudományegyetem Informatikai Kar Webes alkalmazások fejlesztése 12. fejezet Szolgáltatás alapú kommunikáció (WCF) Giachetta Roberto A jegyzet az ELTE Informatikai Karának 2016. évi jegyzetpályázatának

Részletesebben

5. téma XML DB. Az adatkezelés és XML kapcsolata. Miért fontos az XML használata az adatbázis kezelésben?

5. téma XML DB. Az adatkezelés és XML kapcsolata. Miért fontos az XML használata az adatbázis kezelésben? Adatbázis modellek 5. téma XML DB Az adatkezelés és XML kapcsolata Miért fontos az XML használata az adatbázis kezelésben? Adattárolás alapformái: - strukturált - szabad-szöveges - szemi struktúrált -

Részletesebben

Java Programozás 1. Gy: Java alapok. Ismétlés ++

Java Programozás 1. Gy: Java alapok. Ismétlés ++ Java Programozás 1. Gy: Java alapok Ismétlés ++ 24/1 B ITv: MAN 2018.02.18 Feladat Készítsünk egy komplett konzolos alkalmazást, mely generál egy számot 0 és 100 között (mindkét határt beleértve), feladatunk

Részletesebben

Java I. A Java programozási nyelv

Java I. A Java programozási nyelv Java I. A Java programozási nyelv története,, alapvető jellemzői Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2007. 02. 12. Java I.: Történet, jellemzők, JDK JAVA1 / 1 Egy kis történelem

Részletesebben

Java Programozás 11. Ea: MVC modell

Java Programozás 11. Ea: MVC modell Java Programozás 11. Ea: MVC modell 20/1 B ITv: MAN 2018.03.02 MVC Model-View-Controller A modell-nézet-vezérlő a szoftvertervezésben használatos szerkezeti minta. Az MVC célja elválasztani az üzleti logikát

Részletesebben

Előszó. Bevezetés. Java objektumok leképzése relációs adatbázisokra OJB-vel Viczián István (viczus@freemail.hu) Viczián István

Előszó. Bevezetés. Java objektumok leképzése relációs adatbázisokra OJB-vel Viczián István (viczus@freemail.hu) Viczián István Java objektumok leképzése relációs adatbázisokra -vel Viczián István (viczus@freemail.hu) Előszó E cikk olyan haladó programozóknak nyújt segítséget, kik tisztában vannak a Java nyelvvel, és többször is

Részletesebben

Programozási nyelvek II.: JAVA

Programozási nyelvek II.: JAVA Programozási nyelvek II.: JAVA 13. gyakorlat 2017. december 11-15. 13. gyakorlat Programozási nyelvek II.: JAVA 1 / 32 Az 13. gyakorlat tematikája Generikus típusokés öröklődés Clone Comparator Névtelen

Részletesebben

Java és web programozás

Java és web programozás Budapesti Műszaki Egyetem 2015. 02. 11. 2. Előadás Mese Néhány programozási módszer: Idők kezdetén való programozás Struktúrált Moduláris Funkcionális Objektum-orientált... Mese Néhány programozási módszer:

Részletesebben

C++ programozási nyelv Konstruktorok-destruktorok

C++ programozási nyelv Konstruktorok-destruktorok C++ programozási nyelv Konstruktorok-destruktorok Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. szeptember A C++ programozási nyelv Soós Sándor 1/20 Tartalomjegyzék

Részletesebben

Java és web programozás

Java és web programozás Budapesti Műszaki Egyetem 2015. 04. 08. 9. Előadás Kivétel kezelés a kivétel (exception) egy esemény, mely futás közben megbontja a program normális futási folyamatát például kivétel dobódik amikor 0-val

Részletesebben

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani. Vizuális programozás 1. A gyakorlat célja A gyakorlat célja a Könyvtár alkalmazás folytatása az előző gyakorlaton elkészített grafikus felület felhasználásával. Elsőként lemásoljuk az előző gyakorlat eredményeként

Részletesebben

OOP: Java 8.Gy: Gyakorlás

OOP: Java 8.Gy: Gyakorlás OOP: Java 8.Gy: Gyakorlás 43/1 B ITv: MAN 2019.04.10 43/2 Egy régebbi beszámoló anyaga 1. Feladat: Készítsen egy Szemely nevű osztályt a szokásos konvenciók betartásával, amely tárolja egy ember nevét

Részletesebben

Programozási technológia

Programozási technológia Programozási technológia Swing GUI készítése NetBeans IDE segítségével Dr. Szendrei Rudolf ELTE Informatikai Kar 2018. Bevezető Eddig a grafikus felhasználói felületet kódból hoztuk létre kézzel. A mi

Részletesebben

Java programozási nyelv 5. rész Osztályok III.

Java programozási nyelv 5. rész Osztályok III. Java programozási nyelv 5. rész Osztályok III. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/20 Tartalomjegyzék

Részletesebben

JAVA SE/ME tanfolyam tematika

JAVA SE/ME tanfolyam tematika JAVA SE/ME tanfolyam tematika TANFOLYAM TEMATIKA: A JAVA MEGISMERÉSE Java története, miért készült, miért népszerű NETBEANS környezet telepítése, megismerése Programozási alapok java nyelven Változók,primitív

Részletesebben

és az instanceof operátor

és az instanceof operátor Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában

Részletesebben

Java gyakorlat feladatai e s megolda sai (2014.04.10)

Java gyakorlat feladatai e s megolda sai (2014.04.10) Java gyakorlat feladatai e s megolda sai (2014.04.10) 1. Feladat Számítsuk ki a Fibonacci sorozat első 20 tagját! / Fibonacci számsorozat tagjait kiszámoló, egyetlen osztályból álló program @author Bence

Részletesebben

Osztály és objektum fogalma

Osztály és objektum fogalma Osztály és objektum fogalma A C++ programozási nyelv I. CPP1/ 1 Az osztály (class) class: adatok és módszerek (method) (függvények) együttese, amely absztrakt adattípusként működik. objektum: egy osztály

Részletesebben

PHP5 Új generáció (2. rész)

PHP5 Új generáció (2. rész) PHP5 Új generáció (2. rész)...avagy hogyan használjuk okosan az osztályokat és objektumokat PHP 5-ben. Cikksorozatom elõzõ részében képet kaphattunk arról, hogy valójában mik is azok az objektumok, milyen

Részletesebben

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában

Részletesebben

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans Enterprise JavaBeans Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem Az Enterprise JavaBeans Az Enterprise Javabeans Az Enterprise JavaBeans (EJB) server oldali komponens, amely Az üzleti

Részletesebben

Bevezetés a programozásba I.

Bevezetés a programozásba I. Bevezetés a programozásba I. 6. gyakorlat C++ alapok, szövegkezelés Surányi Márton PPKE-ITK 2010.10.12. Forrásfájlok: *.cpp fájlok Fordítás: a folyamat, amikor a forrásfájlból futtatható állományt állítunk

Részletesebben

Bánsághi Anna anna.bansaghi@mamikon.net

Bánsághi Anna anna.bansaghi@mamikon.net ESEMÉNYVEZÉRELT PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 2. ELŐADÁS - C# ÁTTEKINTÉS - 2 2015 Bánsághi Anna 1 of 64 TEMATIKA I. C# ÁTTEKINTÉS II. WPF III. Modern UI 2015 Bánsághi Anna 2 of 64

Részletesebben

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni: Excel objektumok Az excelben az osztályokat úgynevezett class modulokként hozzuk létre. Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni: View-ba

Részletesebben

SZOFTVERES SZEMLÉLTETÉS A MESTERSÉGES INTELLIGENCIA OKTATÁSÁBAN _ Jeszenszky Péter Debreceni Egyetem, Informatikai Kar jeszenszky.peter@inf.unideb.

SZOFTVERES SZEMLÉLTETÉS A MESTERSÉGES INTELLIGENCIA OKTATÁSÁBAN _ Jeszenszky Péter Debreceni Egyetem, Informatikai Kar jeszenszky.peter@inf.unideb. SZOFTVERES SZEMLÉLTETÉS A MESTERSÉGES INTELLIGENCIA OKTATÁSÁBAN _ Jeszenszky Péter Debreceni Egyetem, Informatikai Kar jeszenszky.peter@inf.unideb.hu Mesterséges intelligencia oktatás a DE Informatikai

Részletesebben

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java Függvények, csomagok Csomagok Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges számú osztályt tartalmazhat Pl.: java.util.scanner Könyvtárhierarhiát fed: Pl.: java/util/scanner.java Célja:

Részletesebben