Java Programozás 7. Ea: A java.util csomag. A svájci bicska

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

Download "Java Programozás 7. Ea: A java.util csomag. A svájci bicska"

Átírás

1 Java Programozás 7. Ea: A java.util csomag A svájci bicska 117/1 B ITv: MAN

2 A java.util csomag Tartalma: Gyűjtemények Property, preferencia Dátum, idő kezelés Nemzetköziség Erőforrás kezelés Logolás Egyebek 117/2

3 117/3

4 Gyűjtemény keretrendszer A gyűjtemények -tárolók, konténerek, kollekciók- olyan típuskonstrukciós eszközök, melynek célja egy vagy több típusba tartozó objektumok memóriában történő összefoglaló jellegű tárolása, manipulálása és lekérdezése. A gyűjtemény keretrendszer (Java Collections Framework, JCF) egy egységes architektúra, ami a gyűjtemények használatára és manipulálására szolgál. 117/4

5 Gyűjtemény keretrendszer Jellemzők: Csökkenti a fejlesztési időt Mivel kész adatstruktúrák és algoritmusok állnak rendelkezésünkre, a Gyűjtemény keretrendszer lehetővé teszi, hogy a program fontosabb részével foglalkozzunk, ahelyett, hogy alacsonyszintű programozással kelljen foglalkoznunk. Növeli a programozás sebességét és minőségét A JCF gyors és jó minőségű algoritmus-, és adatstruktúraimplementációkkal rendelkezik. A különböző implementációk minden egyes interfésznél felcserélhetők, így a programokat könnyen össze lehet hangolni a gyűjtemény implementációkkal. 117/5

6 Gyűjtemény keretrendszer Jellemzők: 117/6 Megengedi az együttműködést a nem kapcsolódó API-k között Ha két különböző függvénykönyvtár nem illeszthető egymáshoz közvetlenül, akkor lehet akár a keretrendszer a közös nevező az illesztés megteremtése érdekében. Csökkenti az új API-k használatának és tanulásának nehézségét Régen minden egyes API-nál egy kis segéd API-t készítettek arra, hogy manipulálja az egyes gyűjteményeket. Kevés összefüggés volt az erre a célra készült gyűjtemények segéd API-jai között, így különkülön meg kell tanulni azokat, így könnyen hibát ejthetünk ezek használatával. Az általános gyűjtemény interfészek megjelenésétől ez a probléma már a múlté.

7 Gyűjtemény keretrendszer Jellemzők: Megkönnyíti az új API-k tervezését A tervezőknek és a kivitelezőknek nem kell újra kidolgozni az API-t, valahányszor készítenek egy gyűjteményekre alapozott API-t, hanem az általános gyűjtemény interfészt használhatják. Elősegíti a szoftver újrafelhasználhatóságát Az gyűjtemény interfészekkel összhangba hozott új adatstruktúrák természetesen újra felhasználhatók. Hasonlóan, új algoritmus fejlesztésekor könnyen hozzákapcsolható lesz az összes létező eddigi megvalósításhoz. 117/7

8 Gyűjtemény keretrendszer Tartalma: Öt adatmodell (halmaz, lista, sor, kétvégű sor, map) műveleteit leíró interfészeket, Ezen modellek néhány konkrét megvalósítását, Bejárókat (iterátorok), Néhány algoritmust, Az adatszerkezetek szinkronizált használatához szükséges módozatokat. A használhatóság érdekében az összes interfész, illetve ezek implementációja generikus típus. Ez egyben azt is jelenti, hogy elemi típust csak becsomagolva tudunk gyűjteményben tárolni. 117/8

9 Gyűjtemény keretrendszer Adatmodellek: Halmaz: A matematikai halmaz fogalomnak felel meg. Nem tartalmaz duplikált elemeket, az elemek sorrendje nem feltétlenül meghatározott. Lista (szekvencia): Az elemeket egy index (sorszám) segítségével is elérhetjük. Tartalmazhat duplikált elemeket. Sor (Queue): FIFO sor. Az új elem a sor végére, kivenni elemet a sor elejéről. Kétvégű sor (Deque): Egy mindkét végén manipulálható sor. Használható veremként is. Map: Kulcs-érték párok tárolására. A kulcsok egyediek kell legyenek. 117/9

10 Gyűjtemény keretrendszer Négy további adatszerkezet: Rendezett halmaz: Néhány olyan extra funkció, ami az elemek rendezettségét használja ki. "Navigable" halmaz: Egy rendezett halmaz még további funkciókkal. Rendezett map: A kulcs-érték párok a kulcs szerint rendezve tárolódnak. Navigable map: Rendezett map még további funkciókkal. A régebbi adatszerkezeteket úgy módosították, hogy igazodjon a Collection Framework-ben definiáltakhoz, így azok is használhatóak. 117/10

11 Gyűjtemény keretrendszer Collection interface: A map-ek kivételével a többi adatmodellt megvalósító interfészek közös őse. Közvetlen megvalósítása nincs, csak abstract implementációi vannak. Nem minden metódusát kötelező megvalósítani. Azok a metódusai, amelyek opcionálisak úgy vannak deklarálva, hogy dobhatnak UnsupportedOperationException-t. Collection Map Set List Queue SortedMap 117/11 SortedSet

12 Gyűjtemény keretrendszer Collection interface tartalma: Nem opcionális elemek: Szeretnék ha az implementáció készítők felüldefiniálnák: boolean equals(object o) int hashcode() Elemek száma: int size() Üres-e: boolean isempty() Tartalmazás vizsgálat: boolean contains(object element) 117/12 Iterátor készítés: Iterator<E> iterator() Elemek tömbként kinyerése: Object[] toarray() <T> T[] toarray(t[] a)

13 Gyűjtemény keretrendszer Collection interface tartalma: Opcionális elemek: Elem hozzáadása: boolean add(e element) Elem törlése: boolean remove(object element) Tartalmazás vizsgálat: boolean containsall(collection<?> c) Több elem hozzáadása: boolean addall(collection<? extends E> c) Több elem törlése: boolean removeall(collection<?> c) boolean retainall(collection<?> c) Összes elem törlése: void clear() 117/13

14 Gyűjtemény keretrendszer Halmaz (Set) interface 117/14 Nem tartalmazhat duplikált elemeket. Azaz nem lehet két olyan eleme, amelyre igaz, hogy e1.equals(e2). Az add metódus hamisat ad ha már van olyan elem a halmazban. Tartalma: ugyanaz, mint Collection interface-é. A halmazműveletek: Elem betétele (add), kivétele (remove), tartalmazás vizsgálat (contains), részhalmaz vizsgálat (containsall), unió (addall), metszet (retainall), különbség (removeall)

15 Gyűjtemény keretrendszer Rendezett halmaz (SortedSet) interface 117/15 A Set leszármazottja. Rendezettség lehet természetes sorrend vagy Comparator alapján (lásd később) Plussz tartalom: Részhalmaz kinyerések: SortedSet<E> subset(e fromelement, E toelement) SortedSet<E> headset(e toelement) SortedSet<E> tailset(e fromelement) Első, utolsó elem kinyerés: E first() E last() Comparator lekérdezés: Comparator<? super E> comparator()

16 Gyűjtemény keretrendszer Navigálható halmaz (NavigableSet) interface A SortedSet leszármazottja. Plussz tartalma részletezés nélkül: legkisebb elem, legnagyobb elem, egy megadott elemtől nagyobb következő elem, egy megadott elemet megelőző elem, egy adott elemtől nagyobb (kisebb) elemek részhalmaza, stb. 117/16

17 Gyűjtemény keretrendszer Halmaz implementációk: 117/17 HashSet: Hash táblás tároláson alapuló megvalósítás. A leggyorsabb halmaz megvalósítás. Elemek sorrendje nem értelmezhető, ismételt bejárás más sorrend. A hash táblás tárolásból adódóan létrehozáskor célszerű megadni kezdő kapacitást és load faktor-t. A Set-hez képest nem definiál plussz funkciókat. LinkedHashSet: Hash táblás és láncolt listás tárolás együttes alkalmazása. Valamivel lassabb, mint a HashSet, de az elemek bejárási sorrend állandó (a beszúrási sorrend), valamint az elemek bejárása is gyorsabb. Funkciói megegyeznek a HashSet-tel.

18 Gyűjtemény keretrendszer Halmaz implementációk: TreeSet: Kiegyensúlyozott fán tárol. A leglassabb halmaz implementáció, de a SortedSet és a NavigableSet interface-ket is implementálja vagyis az elemek sorrendje kezelhető. EnumSet: Egy speciális halmaz, amely enum elemeket tartalmazhat és plussz funkciókkal rendelkezik az enum elemeinek kezeléséhez. Egyéb implementációk: nem részei a CF-nek. Többnyire a konkurens hozzáférés támogatásával kapcsolatosak. 117/18

19 Gyűjtemény keretrendszer Bejárók (Iterator, ListIterator) 117/19 A Collection alapú gyűjtemények elemeinek bejárására valók. Az iterátor kinyerése a Collection-ban deklarált Iterator iterator() metódussal. A ListIterator az Iterator leszármazottja. Csak a List-ek esetén használható. Kinyerése a ListIterator listiterator() metódussal. Iterator tartalma: boolean hasnext() igaz, ha van következő elem. E next() : a következő elemet adja, ha nincs, akkor kivételt dob. void remove(): opcionális, törli a next()-el előzőleg megkapott elemet.

20 Gyűjtemény keretrendszer Bejárók (Iterator, ListIterator): 117/20 A ListIterator tartalma: ua. mint Iterator, egyéb metódusok: boolean hasprevious() E previous() : visszafele bejárás int nextindex() int previousindex() : visszaadja az indexét a következő vagy előző elemnek. void set(e e): opcionális, megváltoztatja az aktuális elemet (utoljára visszaadott) void add(e e): opcionális, beszúr az aktuális elem után Bejárók (Enumerator): Egy régebbi bejáró az Iterator-ral egyenértékű, de hosszabb metódusneveket használ.

21 Gyűjtemény keretrendszer Bejárás: (c egy Collection fajta) Iterator<E> it = c.iterator(); while (it.hasnext()) { E elem = it.next(); //műveletek elemmel Vagy: for (E elem : c) { //műveletek elemmel Collection módosítása bejárás közben: csak a bejáró metódusaival lehetséges, különben hiba keletkezik. while (it.hasnext()) { c.remove(objektum); //hiba!! System.out.println(it.next()); 117/21

22 Példakód HashSet import java.util.hashset; import java.util.iterator; public class Util_1 { public static void main(string[] args) { HashSet<String> set = new HashSet<String>(); set.add("alma"); set.add("barack"); set.add("ananász"); set.remove("barack"); //equals alapján keres set.add("szilva"); set.add("málna"); set.add("alma"); //nem rakja bele, false vissza System.out.println("List 1:"); for (String elem : set) System.out.println(elem); 117/22

23 Példakód HashSet System.out.println("List 2:"); Iterator<String> it = set.iterator(); while (it.hasnext()) System.out.println(it.next()); String[] st = new String[set.size()]; //elemek tömbbe rakása set.toarray(st); System.out.println("List 3:"); for (String elem : st) System.out.println(elem); it = set.iterator(); System.out.println("Delete:"); while (it.hasnext()) { String elem = it.next(); if (elem.startswith("a")) it.remove(); System.out.println("List 4:"); for (String elem : set) System.out.println(elem); 117/23

24 public class Employee implements Comparable<Employee> { private String name; private int age; Példakód SortedSet public Employee(String name, int age) { super(); this.name = name; this.age = age; public String getname() { return name; public void setname(string name) { this.name = name; public int getage() { return age; public void setage(int age) { this.age = age; public int compareto(employee o) { return this.age - o.getage(); 117/24

25 Példakód SortedSet import java.util.iterator; import java.util.sortedset; import java.util.treeset; public class EmpSortedSet { public static void main(string[] args) { SortedSet set = new TreeSet(); set.add(new Employee("Béla", 60)); set.add(new Employee("Eszmeralda", 50)); set.add(new Employee("Rómeó", 10)); set.add(new Employee("Ödön", 20)); set.add(new Employee("Hümér", 40)); set.add(new Employee("Lujza", 30)); 117/25 System.out.println("Set after sorting:"); Iterator it = set.iterator(); while (it.hasnext()) { Employee epm = (Employee) it.next(); System.out.println("Employee "+epm.getname()+ ", his age: "+epm.getage());

26 Példakód SortedSet System.out.println("\nFirst Employee: " + ((Employee)set.first()).getName()); System.out.println("Last Employee: " + ((Employee)set.last()).getName()); System.out.println("\nheadSet(-30) result:"); SortedSet headset = set.headset(new Employee("Lujza", 30)); Iterator headsetit = headset.iterator(); while (headsetit.hasnext()) { Employee epm = (Employee) headsetit.next(); System.out.println("Employee " + epm.getname() + " his age: " + epm.getage()); 117/26

27 Példakód SortedSet System.out.println("\nsubSet(10-50) result:"); SortedSet subset = set.subset(new Employee("Rómeó", 10), new Employee("Eszmeralda", 50)); Iterator subsetit = subset.iterator(); while (subsetit.hasnext()) { Employee epm = (Employee) subsetit.next(); System.out.println("Employee " + epm.getname() + " his age: " + epm.getage()); 117/27 System.out.println("\ntailSet(40-) result:"); SortedSet tailset = set.tailset(new Employee("Hümér", 40)); Iterator tailsetit = tailset.iterator(); while (tailsetit.hasnext()) { Employee epm = (Employee) tailsetit.next(); System.out.println("Employee " + epm.getname() + " his age: " + epm.getage());

28 Gyűjtemény keretrendszer Lista (List) interface 117/28 Tartalma: Ua., mint Collection. További lehetőségek: Nem opcionális elemek: Elérés index alapján: E get(int index) Elem keresése: int indexof(object o) int lastindexof(object o) Egy többet tudó iterátor (a ListIterator) kinyerése: ListIterator<E> listiterator() ListIterator<E> listiterator(int index) Rész lista kinyerése: List<E> sublist(int from, int to)

29 Gyűjtemény keretrendszer Lista (List) interface Opcionális elemek: Adott indexű elem felülírása: E set(int index, E element) Elem beszúrása: void add(int index, E element) Adott indexű elem törlése: E remove(int index) Több elem beszúrása: boolean addall(int index, Collection<? extends E> c) 117/29

30 Gyűjtemény keretrendszer Lista implementációk: ArrayList: 117/30 Dinamikus tömb tárolású. Fontos jellemzője a kezdő kapacitás és a növekmény. A List interfésze opcionális elemeit is megvalósítja, nem definiál további funkcionalitást. Általában gyorsabb, mint a LinkedList, főleg indexes elérés használata esetén. LinkedList: Láncolt lista tárolású. A List interfészen kívül megvalósítja a Queue és Deque interfészeket is, tehát sorként és veremként is használható. Sok elem esetén a hozzáadás, törlés gyorsabb, mint az ArrayList.

31 Gyűjtemény keretrendszer Lista implementációk: Vector: Nem része a gyűjtemény keretrendszernek. Egy korábbi megvalósítás, amelyet utólag módosítottak úgy, hogy implementálja a List-et. Megfelel egy ArrayList-nek, amely szinkronizált metódusokkal rendelkezik. Stack: Szintén egy régebbi megvalósítás, a Vector leszármazottja. További verem használati funkciók. Helyette a Deque implementációi célszerűek. Egyéb megvalósítások: léteznek, nem részei a CF-nek. 117/31

32 Példakód ArrayList import java.util.arraylist; public class ArrayListExample { public static void main(string args[]) { ArrayList<String> arrl = new ArrayList<String>(); arrl.add("albertin"); arrl.add("helka"); arrl.add("cinnia"); arrl.add("stella"); arrl.add("abdon"); System.out.println("Current elements:"+arrl); System.out.println("Current 2. element:"+arrl.get(1)); System.out.println("\nIndex of Cinnia: "+arrl.indexof("cinnia")); System.out.println("Helka is in array: "+arrl.contains("helka")); arrl.set(2, "Flamina"); System.out.println("Current elements:"+arrl); 117/32

33 Példakód ArrayList arrl.add(0, "Riza"); arrl.add(1, "Jarmila"); System.out.println("\nCurrent elements:"+arrl); System.out.println("Current 2. element:"+arrl.get(1)); arrl.remove("damáz"); //Nem dob hibát! arrl.remove("helka"); //Indexek módosulnak! System.out.println("\nCurrent elements:"+arrl); System.out.println("Current 2. element:"+arrl.get(1)); arrl.remove(1); System.out.println("\nCurrent elements:"+arrl); System.out.println("Current 2. element:"+arrl.get(1)); for (int j = 0; j < arrl.size(); j++) if (j == 1 j == 3) arrl.remove(j); //Hibás logika!! System.out.println("\nCurrent elements:"+arrl); 117/33

34 Gyűjtemény keretrendszer A FIFO sor (Queue) interface: Létezhetnek kapacitás korláttal rendelkező megvalósításai. Tartalma: A Collection-ból öröklődtek az elemek, módosult az add úgy hogy IllegalStateException-t dob, ha tele van a sor. boolean offer(e e) : ua, mint add csak nem kivételt dob ha tele van, hanem false az eredmény E element() : Visszaadja a sor elején levő elemet, kivételt dob, ha üres a sor. E peek() : ua. mint element(), csak null-t ad ha üres a sor E remove() : visszaadja és kitörli a sor elején levő elemet, kivételt dob, ha üres a sor E poll() : ua. mint remove, csak null-t ad ha üres a sor. 117/34

35 Gyűjtemény keretrendszer A Queue implementációi: LinkedList: Lásd korábban a listáknál 117/35 PriorityQueue: Egy kapacitás korlát nélküli sor, amelyben az elemek nem berakás sorrendjében, hanem egy megadott rendezettségi sorban vannak. A lista eleje mindig a rendezettségi sor eleje. További funkcionalitás: a Comparator (Lásd később összehasonlítás, rendezés) objektum lekérdezhető. ArrayDeque: Megvalósítás dinamikus tömbön. Az elemek sorrendje a berakási sorrend. Megvalósítja a Queue és a Deque interface-t is. Egyéb megvalósítások: nem részei a CF-nek.

36 Példakód Queue import java.util.linkedlist; import java.util.queue; public class QueueExample { public static void main(string args[]) { Queue<Integer> myq=new LinkedList<Integer>(); myq.add(1); myq.add(6); myq.add(3); System.out.println(myQ); int first=myq.poll(); System.out.println("First out: "+first); System.out.println(myQ); 117/36

37 Gyűjtemény keretrendszer A kétvégű sor (Deque) interface 117/37 Double Ended Queue. A Queue leszármazottja. Műveletei: Beszúrás: addfirst, offerfirst, addlast, offerlast, add==addlast, offer==offerlast, push==addfirst Kiolvasás törléssel: removefirst, pollfirst, removelast, polllast, remove==removefirst, poll==pollfirst, pop==removefirst Kiolvasás: getfirst, peekfirst, getlast, peeklast, element==getfirst, peek==peekfirst Kétvégű sor implementációk: LinkedList: már volt róla szó ArrayDeque: már volt róla szó

38 Példakód Queue import java.util.linkedlist; import java.util.deque; public class DequeExample { public static void main(string args[]) { Deque<Integer> dq=new LinkedList<Integer>(); dq.addlast(11); dq.addlast(16); dq.addfirst(42); dq.addfirst(45); 117/38 System.out.println(dq); System.out.println("Deque size : "+dq.size()); System.out.println("\nPeek Last Value : "+dq.peeklast()); System.out.println("Remove Last Value : "+dq.polllast()); System.out.println("Remove Last Value : "+dq.polllast()); System.out.println("Remove Last Value : "+dq.polllast()); System.out.println(dq);

39 Gyűjtemény keretrendszer Collection List Queue Set ArrayList PriorityQueue HashSet Stack Dequeue LinkedHashSet LinkedList ArrayDequeue SortedSet Vector TreeSet 117/39 Final Class Interface NavigableSet

40 Gyűjtemény keretrendszer A Map interface: 117/40 Kulcs-érték párok. Nem tartalmazhat duplikált kulcsot! Tartalma: V put(k key, V value); V get(object key); V remove(object key); boolean containskey(object key); boolean containsvalue(object value); int size(); boolean isempty(); void putall(map<? extends K,? extends V> m); void clear(); public Set<K> keyset(); public Collection<V> values(); public Set<Map.Entry<K,V>> entryset();

41 Gyűjtemény keretrendszer A SortedMap interface: A Map leszármazottja Az elemek rendezett tárolásához. A rendezettség természetes vagy Comparator alapján. Tartalma: Comparator<? super K> comparator(); SortedMap<K, V> submap(k fromkey, K tokey); SortedMap<K, V> headmap(k tokey); SortedMap<K, V> tailmap(k fromkey); K firstkey(); K lastkey(); 117/41

42 Gyűjtemény keretrendszer A NavigableMap interface: 117/42 A SortedMap leszármazottja További funkciók részletezés nélkül: ugyanazok, mint a NavigableSet esetén, de mindenből kettő létezik: pl. legkisebb elem helyett:» legkisebb kulcs kinyerése» legkisebb kulcsú kulcs-értékpár kinyerése legkisebb kulcsú elem, legnagyobb kulcsú elem, egy megadott kulcstól nagyobb kulcsú következő elem, illetve előző elem, egy adott kulcstól nagyobb (kisebb) kulcsú elemek részmap-je, stb.

43 Gyűjtemény keretrendszer A Map implementációi: HashMap: Hash táblás megvalósítás. Sebesség jó, elemek sorrendisége nincs. Plusz funkcionalitás nincs. LinkedHashMap: Hash tábla és láncolt lista tárolás. Beszúrási sorrend. Sebesség kicsivel kisebb. TreeMap: Kiegyensúlyozott fán tárol. A Map interface-n kívül megvalósítja a NavigableMap és a SortedMap interface-ket is. Tehát a sebesség kisebb, de rendezett elemeket kapunk. EnumMap: A kulcsok egy enum típus konstansai. WeakHashMap: A kulcsok gyenge referenciával. Ha egy kulcsra nincs külső referencia, törlődik. 117/43

44 Gyűjtemény keretrendszer A Map implementációi: IdentityHashMap: Speciális. Nem equals()-t használ egyezőségre, hanem ==-t HashTable: Nem tartozik a CF-hez. Egy korábbi megvalósítás utólag módosítva úgy, hogy implementálja a Map-et. Megfelel a HashMap-nek csak szinkronizált. Properties: Szintén régebbi gyűjtemény fajta. A HashTable leszármazottja. A kulcsok és az értékek csak String-ek lehetnek. Léteznek letárolással, visszatöltéssel kapcsolatos metódusai. Lásd még később. Egyéb megvalósítások: Léteznek, nem részei a CF-nek. 117/44

45 Java Map keretrendszer Map AbstractMap HashTable SortedMap HashMap Properties NavigableMap LinkedHashMap TreeMap 117/45 IdentityHashMap WeakHashMap EnumMap Final Class Interface

46 import java.util.map; import java.util.hashmap; public class HashMapExample { public static void main(string args[]) { HashMap<Integer,String> Hm=new HashMap<Integer,String>(); Hm.put(1,"Steven"); Hm.put(null,null); Hm.put(6,"Clark"); Hm.put(3,"Jack"); Hm.put(3,"Jack"); System.out.println(Hm); System.out.println("Item Removed : "+Hm.remove(1)); Hm.put(null,"Dorotea"); System.out.println(Hm); Példakód HashMap changekey(hm, null, 4); Print(Hm); public static void changekey (HashMap<Integer,String> hm, Integer key, Integer newkey){ Object obj = hm.remove(key); hm.put(newkey, (String)obj); public static void Print (HashMap<Integer,String> hm){ for(map.entry m:hm.entryset()) System.out.println("Key: "+m.getkey()+" Value= "+m.getvalue()); 117/46

47 Gyűjtemény keretrendszer Egyenlőség: A gyűjtemények mindegyike az elemek egyenlőségének vizsgálatához (contains, indexof, stb.) az elem equals() metódusát használja! Sorrendiség: Azoknál a gyűjteményeknél, ahol rendezettség van, vagy bármiféle kisebb, nagyobb reláció kétféle módon hasonlíthatunk össze elemeket: Természetes sorrend alapján, Comparator objektum alapján. 117/47

48 Gyűjtemény keretrendszer Természetes sorrend: Az elemnek implementálnia kell a java.lang.comparable interface-t, amely egyetlen metódust tartalmaz: int compareto(t m) A metódus természetes logika szerinti működése: x.compareto(y) <0, ha x < y x.compareto(y) >0, ha x > y x.compareto(y) ==0, ha x.equals(y) 117/48

49 Gyűjtemény keretrendszer Sorrend a Comparator objektum alapján: A sorrendiség megállapításához mindig meg kell adni egy java.util.comparator interfészt implementáló objektumot. Ennek előnye, hogy több különböző Comparator objektumom is lehet, tehát leht több rendező szempontom. Comparator tartalma: int compare(t o1, T o2) boolean equals(object o) 117/49

50 Gyűjtemény keretrendszer Algoritmusok 117/50 Számos algoritmust készítettek, amelyet gyűjtemények elemein lehet végrehajtani. Ezeket a Collections osztályba tették. Algoritmusok: Rendezés, Keverés, Minimum (maximum) keresés, Bináris keresés, Elemek sorrendjének megfordítása, Feltöltés egy értékkel, Másolás egy másik gyűjteménybe, Elemek felcserélése, stb.

51 Példakód Algoritmusok private static final Comparator<Alkalmazott> NEVCOMP = new Comparator<Alkalmazott>(){ public int compare(alkalmazott o1, Alkalmazott o2) { return o1.getnev().compareto(o2.getnev()); ; private static final Comparator<Alkalmazott> FIZCOMP = new Comparator<Alkalmazott>(){ public int compare(alkalmazott o1, Alkalmazott o2) { return (int)math.signum(o1.getfizetes()- o2.getfizetes()); ; Collections.sort(alkList, NEVCOMP); for (Alkalmazott alk : alklist) System.out.println(alk); Collections.sort(alkList, FIZCOMP); for (Alkalmazott alk : alklist) System.out.println(alk); 117/51

52 Teszt 1. Mekkora egy HashMap alapértelmezett kapacitása (mérete)? /52

53 Teszt 2. Mi lesz a kód kimenete? import java.util.*; public class COL { public static void main(string a[]){ Map s = new HashMap(); s.put("1","one"); s.put("3","three"); s.put("2","two"); System.out.println(s); [java.util.hashmap@69d60e531] Valamilyen (előre nem definiálható sorrendben kiíródnak az adatok {1=one, 2=two, 3=three 117/53 {1=one, 3=three, 2=two

54 Teszt 3. Mi lesz a kód kimenete? import java.util.*; public class COL { public static void main(string a[]){ Map s = new LinkedHashMap(); s.put("1","one"); s.put("3","three"); s.put("2","two"); System.out.println(s); [java.util.hashmap@69d60e531] Valamilyen (előre nem definiálható sorrendben kiíródnak az adatok {1=one, 2=two, 3=three 117/54 {1=one, 3=three, 2=two

55 Teszt 4. Mi lesz a kód kimenete? import java.util.*; public class COL { public static void main(string a[]){ Map s = new Hashtable(); s.put("3","three"); s.put(null,null); s.put("1","one"); System.out.println(s); Fordítási hiba: index cannot null in java.util.hashtable Futási hiba: NullPointerException {null=null, 1=one, 2=two 117/55 {3=three, null=null, 1=one

56 Teszt 5. Lehet null értéket hozzáadni egy List-hez (listához)? IGEN NEM 117/56

57 Teszt 6. Melyik interfészt kell használnunk, ha olyan gyűjteményt akarunk készíteni, amelyikben egy kulcs azonosít egy értéket? SortedSet Map NavigableList NavigableSet 117/57

58 Teszt 7. Mi lesz a kód kimenete? import java.util.*; public class COL { public static void main(string a[]){ List<Integer> integer = new ArrayList<Integer>(); integer.add(1); integer.add(2); List<Number> number = (List)integer; System.out.println(number); Fordítási hiba: error ' ; ' excepted-new ArrayList<Integer> ^ Fordítási hiba: cannot find symbol class Number Futási hiba: ClassCastException 117/58 [1, 2]

59 Teszt 8. Mi lesz a kód kimenete? import java.util.*; public class ABC { public static void main(string[] a){ HashSet<String> hset = new HashSet<String>(); hset.add("b"); hset.add("c"); hset.add("a"); hset.add("b"); System.out.println(hset); 117/59 [B, C, A, B] [A, B, B, C] [A, B, C] [B, C, A]

60 Teszt 9. Az alábbi sor deklaráció helyes? Queue que = new Queue<String>; IGEN NEM 117/60

61 Teszt 10. Adott az alábbi kódrészlet. Mely utasítások helyesek (hiba nélkül végrehajthatók)? Queue<String> myq=new LinkedList<String>(); myq.add("a"); myq.add("c"); myq.add("h"); 117/61 System.out.println(myQ); System.out.println(myQ.element()); System.out.println(myQ.peek()); System.out.println(myQ.peekLast()); myq.remove(); myq.removeall(); System.out.println(myQ.size()); myq.addlast("w");

62 java.util.date 117/62 bybsalvador IT MAN Dali

63 Dátum, idő kezelés Date: Egy időpont miliszekundumos pontossággal. Legtöbb metódusa elavult, nem használatos. Használatos: Date(), equals(), tostring(), gettime(), settime() TimeZone: Absztrakt osztály időzónák kezeléséhez. SimpleTimeZone: A jelenleg használatos időzóna és téli nyári időszámítás megvalósítás. Calendar: Absztrakt osztály dátum, idő, naptár kezeléséhez. GregorianCalendar: A Calendar leszármazottja. Az összes dátum, idő, naptár kezelő funkció. 117/63

64 java.util.calendar Aktuális időpont lekérése: public static Calendar getinstence(); Metódusok: int get(int field_constant); void set(int field_constant, value_constant); Field Constants: ERA YEAR MONTH WEEK_OF_YEAR DATE AM_PM WEEK_OF_MONTH DAY_OF_MONTH 117/64 Field Constants: Value Constants: HOUR SUNDAY to SATURDAY DAY_OF_YEAR JANUARY to DECEMBER DAY_OF_WEEK AM, PM MINUTE HOUR_OF_DAY MILLISECOND SECOND DAY_OF_WEEK_IN_MONTH

65 Példakód import java.util.calendar; import java.util.date; import java.util.gregoriancalendar; import java.text.simpledateformat; public class DatumMuveletek { private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm"); public static void main(string[] args) { System.out.println(aktualisDatum()); System.out.println(DtoS(aktualisDatum())); Date d1=datummegadottadatokkal2(2020,11,29,5,17,14); System.out.println(DtoS(d1)); private static Date aktualisdatum() { return new Date(); private static String DtoS (Date d) { return sdf.format(d).tostring(); private static Date CaltoD (Calendar cal) { return cal.gettime(); 117/65

66 Példakód private static Calendar DtoCal (Date date) { Calendar calendar = Calendar.getInstance(); calendar.settime(date); return calendar; private static Calendar aktualisdatumcal() { return Calendar.getInstance(); private static Date datummegadottadatokkal(int ev, int honap, int nap, int ora, int perc, int mp) { Calendar cal = Calendar.getInstance(); cal.set(ev, honap-1, nap, ora, perc, mp); return cal.gettime(); private static Date datummegadottadatokkal2(int ev, int honap, int nap, int ora, int perc, int mp) { Calendar cal = new GregorianCalendar(ev,honap-1,nap,ora,perc,mp); return cal.gettime(); 117/66

67 Példakód private static Calendar datumtocalendar(date d) { Calendar cal = Calendar.getInstance(); cal.settime(d); return cal; private static int[] datumreszei(date d) { int[] reszek = new int[6]; Calendar cal = datumtocalendar(d); reszek[0] = cal.get(calendar.year); reszek[1] = cal.get(calendar.month) + 1; reszek[2] = cal.get(calendar.day_of_month); reszek[3] = cal.get(calendar.hour_of_day); reszek[4] = cal.get(calendar.minute); reszek[5] = cal.get(calendar.second); return reszek; private static long ketdatumkulonbsegemasodpercben(date elso, Date masik) { long elsomilisec = datumtocalendar(elso).gettimeinmillis(); long masikmilisec = datumtocalendar(masik).gettimeinmillis(); return (elsomilisec - masikmilisec) / 1000; 117/67

68 Példakód private static Date datumevemegvaltoztatas(date datum, int ujev) { Calendar cal = datumtocalendar(datum); cal.set(calendar.year, ujev); return cal.gettime(); private static Date datumcsokkentve(date datum, int napok) { Calendar cal = datumtocalendar(datum); cal.add(calendar.day_of_year, -50); return cal.gettime(); private static boolean datumelsokisebbe(date d1, Date d2) { return d1.before(d2); 117/68

69 Példakód import java.util.*; public class GregCalDem { public static void main(string[] args) { GregorianCalendar cal = (GregorianCalendar)GregorianCalendar.getInstance(); System.out.println("" + cal.gettime()); int year = cal.get(gregoriancalendar.year); boolean isleapyear = cal.isleapyear(year); System.out.println(""+year+" is leap year:" + isleapyear); isleapyear = cal.isleapyear(2020); System.out.println("2020 is leap year:" + isleapyear); cal.add(gregoriancalendar.date, -5); System.out.println("Date:" + cal.gettime()); 117/69 cal.roll(gregoriancalendar.hour, 4); System.out.println("Date:" + cal.gettime());

70 Teszt 11. Az alábbi metódus kódja helyes? public String DateToString(Date d) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm"); return sdf.format.tostring(); IGEN NEM 117/70

71 Teszt 12. Az alábbi metódus kódja helyes? public Date CalendarToDate (Calendar cal) { return cal.getdate(); IGEN NEM 117/71

72 Teszt 13. Melyik osztály(oka)t kell importálni, hogy a kód megfelelően működjön! public String DateToString(Date d) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm"); return sdf.format(d).tostring(); 117/72 java.util.date java.util.simpledateformat java.util.dateformat java.util.textformat java.text.format java.text.simpledateformat

73 Teszt 14. Melyik osztály(oka)t kell importálni, hogy a kód megfelelően működjön! public Date CalendarToDate (Calendar cal) { return cal.gettime(); java.util.date java.util.calendar java.util.gregoriancalendar java.util.calendar.gregoriancalendar 117/73

74 Teszt 15. Melyik kód írja ki helyesen a dátumot? import java.util.calendar; import java.text.simpledateformat; public class ABC { public static void main(string[] a){ Calendar cal = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd"); String fd =??? System.out.println(fd); 117/74 format.sdf(cal.gettime()); sdf(cal.gettime()); sdf.format(cal.gettime()); format.sdf(cal.gettime()).tostring();

75 Teszt 16. Mit ír ki az alábbi kód? import java.util.calendar; public class ABC { public static void main(string[] a){ Calendar cal = Calendar.getInstance(); cal.set(calendar.hour, 73); cal.set(calendar.minute, 158); cal.set(calendar.second, 60); System.out.print(cal.get(Calendar.HOUR) + ":"); System.out.print(cal.get(Calendar.MINUTE) + ":"); System.out.print(cal.get(Calendar.SECOND)); 1:38:0 117/75 1:39:0 3:39:0 73:158:60 Egyéb időpontot

76 Teszt 17. Jelölje meg az aktuális dátum lekérésének összes helyes módját! Calendar cal = Calendar.getInstance(); Date date = new Date(); LocalDateTime now = LocalDateTime.now(); Calendar cal=null; cal.settime(new Date()); Date date=null; date=new Calendar().getTime(); Date date=null; date=new GregorianCalendar().getTime(); 117/76

77 Heló! Namastḕ! Hello! Hallo! Hola! 117/77 java.util.locale Nemzetköziség

78 Nemzetköziség Internationalization (i18n) Localization (l10n) Az internacionalizálás és a honosítás (más szavakkal kulturális beágyazás vagy nyelvi lokalizáció) olyan módszerek, melyekkel termékeket vagy szoftvereket viszünk át (adaptálunk) más, nem belföldi környezetbe, főként más országokba és kultúrákba. Programok esetén ezek azon elemek, amelyek függnek a nyelvi, régió környezettől: szám, dátum, idő, pénz formátumok szöveges részek (feliratok), szöveg sorrendiség egyéb interfész elemek: képek, hangok, multimédia elemek, méretek stb. 117/78

79 Nemzetköziség A nemzetköziségre felkészített program esetén a lokalizáció a program megváltoztatása nélkül mehet végbe. Megoldás: az adatok (szövegek, formátumok, stb.) nincsenek fixen beépítve a programba, hanem a programon kívül tárolódnak, minden lehetséges (szükséges) környezetre. A program az aktuális környezetnek megfelelőt fogja használni. A JVM átveszi a host-tól a felhasználó által beállított környezetet. Ez lesz az alapértelmezett környezet. A Javaban nem kötelező a teljes programban végig ugyanazt a környezetet használni, bármelyik környezetfüggő művelethez megadhatunk új környezetet. 117/79

80 Nemzetköziség A java.util.locale osztály Azonosít: egy nyelvet, földrajzi helyet, egyéb körülményt azaz egy környezetet. 117/80 Az első paraméter egy ISO-639 szerinti nyelvkód (pl. en, de, hu). A második paraméter egy ISO-3166 szerinti országkód (pl. GB, DE, HU). Harmadik paraméterként legtöbbször platformot szokás megadni (UNIX, WIN). Létrehozás a konstruktorral: Locale a = new Locale("de") //csak nyelvet azonosít Locale b = new Locale("de", "DE"); //nyelv és ország Locale b = Locale.GERMANY; //teljes azonosítás

81 Nemzetköziség Locale műveletei: Lekérdezni az alapértelmezettet: static Locale getdefault() Lekérdezni az összes elérhetőt: static Locale[] getavailablelocales() Beállítani az alapértelmezettet: static void setdefault(locale) Lekérdezni a részeit: getcountry(), getlanguage(), getvariant(), getdisplaylanguage(), stb. 117/81

82 Nemzetköziség Szám, dátum, idő, pénznem formátum beállítása A java.util.text csomagban található osztályokkal Szám, pénznem, százalék formázás: NumberFormat (abstract), DecimalFormat 1. lépés: A format objektum legyártása A NumberFormat osztály statikus metódusaival: Az aktuális Locale-hoz: NumberFormat getxxxinstance() Megadott Locale-hoz: NumberFormat getxxxinstance(locale) 117/82

83 Nemzetköziség Szám, pénznem, százalék formázás: A getxxxinstance-ban az XXX lehet: Integer: egész formázáshoz Number: valós formázáshoz Currency: pénznem formázáshoz Percent: százalék formázáshoz Például: NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMANY); 117/83

84 Nemzetköziség Szám, pénznem, százalék formázás: A DecimalFormat konstruktorával egy megadott pattern és az aktuális Locale szerint formázó objektumot kaphatunk. Például: NumberFormat nf = new DecimalFormat("#,##0.0"); Egy megadott Locale és megadott pattern formázóját felhasználva: Például: NumberFormat nf = NumberFormat.getNumberInstance(loc); DecimalFormat df = (DecimalFormat)nf; df.applypattern(pattern); 117/84

85 Nemzetköziség Szám, pénznem, százalék formázás: 2. lépés: Ha szükséges, állítsuk be a formázót Leggyakoribb beállítások: setgroupingused(boolean newvalue) setroundingmode(roundingmode roundmode) setminimumfractiondigits(int newvalue) 3. lépés: formázás vagy parse-olas Formázás a formázó objektum format metódusával String s = nf.format( ); Parse-olás a parse metódussal. 117/85

86 Nemzetköziség Szám, pénznem, százalék formázás: Lehetséges még a formátumban használt szimbólumokat is megváltoztatni (tizedes jel, ezres elválasztó jel, stb.) a DecimalFormatSymbols osztály segítségével. Példa: DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(loc); dfs.setdecimalseparator('.'); dfs.setgroupingseparator(','); DecimalFormat df = (DecimalFormat)DecimalFormat.getInstance(); df.setdecimalformatsymbols(dfs); System.out.println(df.format( )); 117/86

87 Nemzetköziség Dátum, idő formázás: Kezelése: DateFormat, SimpleDateFormat A megfelelő Locale formátumainak lekérése: DateFormat getdateinstance() DateFormat gettimeinstance() DateFormat getdatetimeinstance() Paramétereik lehetnek a dátum stílus (rövid, hosszú, stb), idő stílus (rövid, hosszú, stb.), Locale. Használata hasonló a NumberFormat osztályhoz. 117/87

88 Nemzetköziség Dátum, idő formázás A dátum, idő megjelenítésben használt szimbólumok (pl. hónap nevek, nap nevek, stb.) a DateFormatSymbols osztállyal kezelhetőek. Példa: DateFormatSymbols dfs = new DateFormatSymbols(); String[] napok = {"Vas", "He", "Kedd", "Szer", "Csüt", "Pént", "Szomb"; dfs.setweekdays(napok); 117/88

89 Nemzetköziség Szöveg formázás A megjelenős szövegeket sem célszerű összefűzéssel előállítani. String s = "A kör kerülete: "+ker+", területe: "+ter; Ilyen összefűzéssel nem lehet megfelelően átfordítani más nyelvekre. Van nyelv pl., ahol a szövegben máshol helyezkedne el az adat. Használjuk a MessageFormat osztályt, amely lehetővé teszi, hogy egyetlen String-ben megadjuk a szöveget és az adatokat. Hasonló a printf-hez. 117/89

90 Nemzetköziség Szöveg formázás: példák: String s = MessageFormat.format("A kör kerülete: {0, number, területe: {0, number", ker, ter); String c = MessageFormat.format("Most {1,date,long és van {0,number feladat.", 2.34, new Date()); 117/90

91 Példakód Locale import java.util.date; import java.text.dateformat; import java.text.numberformat; import java.util.locale; public class Formats { public static void main(string[] args) { Locale defloc = Locale.getDefault(); 117/91 Print(defLoc); Print(new Locale("us", "US")); Print(new Locale("fr", "FR")); public static void Print (Locale loc){ System.out.println("\nLocale params: "+loc.tostring()); System.out.println("Language: "+loc.getdisplaylanguage(loc)); DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, loc); Date date = new Date(); String formatteddate = df.format(date); System.out.println("Date format: "+formatteddate); double x = ; NumberFormat nf = NumberFormat.getInstance(loc); System.out.println("Number format: "+nf.format(x));

92 Nemzetköziség Erőforrás kezelés Erőforrások: Locale-függő szövegek, adatok Kezelés: 1. Azonosítsuk a Locale-függő adatokat 2. Különítsük el a programtól, készítsünk belőlük minden szükséges Locale-hoz. (ResourceBundle) 3. A programban betöltjük és használjuk az éppen szükséges Locale-hoz tartozót. (ResourceBundle loading) A ResourceBundle absztrakt osztály, illetve ennek leszármazottai használhatók az elkülönített erőforrások tárolására. 117/92

93 Nemzetköziség Erőforrás kezelés A ResourceBundle osztálynak két leszármazottja van: PropertyResourceBundle: szöveges file-okban (.properties) tárolja az adatokat. Csak szöveges (szöveggé alakítható) adatok tárolására. ListResourceBundle: Osztályokban tárolja az adatokat. Bármilyen típusúak lehetnek. 117/93

94 Nemzetköziség Erőforrás kezelés Az erőforrások betöltése: A ResourceBundle statikus getbundle() metódusával, amelynek kötelező megadni az erőforráscsoport nevét és a locale-t. Ez megkeresi és betölti a megfelelő erőforrás file-t (osztályt). Például: Locale curloc=new Locale("hu","HU","UNIX"); ResourceBundle a = ResourceBundle.getBundle("Feliratok", curloc); 117/94

95 Nemzetköziség Erőforrás kezelés Keresési sor: Feliratok_hu_HU_UNIX, ha nincs Feliratok_hu_HU Feliratok_hu Feliratok_alapertnyelv_alapertorsz Feliratok_alapertnyelv Feliratok Ha egyik sincs, akkor MissingResourceException-t dob. A getbundle() először ilyen nevű osztályt keres, ha az nincs, akkor ilyen nevű.properties kiterjesztésű file-t keres. 117/95

96 Nemzetköziség Erőforrás kezelés 117/96 Betöltött erőforrás használata: Adott kulcsú elem kinyerése: String getstring(string kulcs) Object getobject(string kulcs) Kulcsok kinyerése: Set<String> keyset() A.properties file szerkezete: kulcsnév érték Az erőforrás szerkezetének lekérése: public Object[][] getcontents(); ahol a tömb egy sora a kulcsot és az értéket tartalmazza.

97 Nemzetköziség A fejlesztő eszközök (pl. eclipse, netbeans) képesek egy osztályt átalakítani erőforrás kezelést használóra, de csak a string-eket derítik fel és teszik ki erőforrás fileba. (externalize strings) Nem képesek szám, dátum stb. formázásokat átalakítani. Léteznek külön eszközök, amelyek igen! 117/97

98 Példakód ResourceBundle import java.util.locale; import java.util.resourcebundle; public class RBP { public static void main(string[] args) { Locale loc = Locale.getDefault(); ResourceBundle rb = ResourceBundle.getBundle("MyLabels"); Print(); Locale.setDefault(new Locale("en", "US")); Print(); Locale.setDefault(new Locale("fr", "FR")); Print(); public static void Print () { Locale loc = Locale.getDefault(); ResourceBundle rb = ResourceBundle.getBundle("MyLabels"); System.out.println("Say: how are you in "+loc.getcountry()+ " in "+loc.getdisplaylanguage(loc)+ " language: "+rb.getstring("how_are_you")); 117/98 MyLabels_hu_HU.properties how_are_you = Hogy vagy? MyLabels_en_US.properties how_are_you = How are you? MyLabels_fr_FR.properties how_are_you = Comment allez-vous?

99 Példakód Properties import java.io.fileoutputstream; import java.io.ioexception; import java.io.outputstream; import java.util.properties; public class PropApp1 { public static void main(string[] args) { Properties prop = new Properties(); OutputStream output = null; try { output = new FileOutputStream("config.properties"); prop.setproperty("database", "localhost"); prop.setproperty("dbuser", "BitMan"); prop.setproperty("dbpassword", "*#>^<#*"); prop.store(output, null); output.close(); catch (IOException io) {io.printstacktrace(); config.properties #Sun Feb 04 16:36:48 CET 2018 dbpassword=*\#>^<\#* database=localhost 117/99 dbuser=bitman

100 Példakód Properties import java.io.fileinputstream; import java.io.ioexception; import java.io.inputstream; import java.util.properties; public class PropApp2 { public static void main(string[] args) { Properties prop = new Properties(); InputStream input = null; try { input = new FileInputStream("config.properties"); prop.load(input); 117/100 System.out.println(prop.getProperty("database")); System.out.println(prop.getProperty("dbuser")); System.out.println(prop.getProperty("dbpassword")); input.close(); catch (IOException io) {io.printstacktrace();

101 Teszt 18. Melyik Locale megadás helyes? Locale loc = new Locale("hu"); Locale loc = new Locale("hu", "HU"); Locale loc = new Locale("HUNGARY"); Locale loc = Locale.HUNGARY; Locale loc = new Locale("hu", "HU", "Win"); Locale loc = Locale.UK; Locale loc = new Locale("xx", "XX"); Locale loc = Locale.getDefault(); 117/101

102 Teszt 19. Mi a tartalma egy.properties fájlnak? name = "Joe" number = 23 name = Joe number = 23 "name" = "Joe" "number" = "23" name=joe number=23 "name" = Joe "number" = 23 name="joe" number="23" 117/102

103 Teszt 20. Hogyan olvassuk ki egy ResourceBundle (erőforrás) tartalmát? rb.getbundle("param"); rb.getparam("param"); rb.getproperties("param"); rb.getstring("param"); rb.getobject("param"); rb.getresource("param"); rb.get("param"); 117/103

104 Logolás java.util.logging 117/104

105 Logolás Naplózás. Egy program a végrehajtása alatt üzeneteket ír egy központi helyre (konzol, fájl). Az üzenetek lehetnek: felhasználói tevékenységek (bejelentkezés, kijelentkezés ), normál tevékenységek üzenetei (folyamat indítása, adat beírás ), figyelmeztetések (hibás adat beírása ), hibák (programhibák). Az üzenetek felhasználhatók: statisztikák készítéséhez, tevékenységek analizálásához, hibák kereséséhez, hibajavításhoz. 117/105

106 Logolás Javaban a java.util.logging csomag biztosítja a logolást, a Logger osztály használatával. Logger létrehozása: Logger(String name, String resourcebundlename) name: a logger neve resourcebundlename: nemzetközi erőforrás kezelő neve Értéke lehet null 117/106

107 Logolás Naplózási szint: az események 7 súlyossági kategóriába sorolhatók: 117/ SEVERE WARNING INFO CONFIG FINE FINER FINEST Súlyos Figyelmeztető Információs Beállítási Jó Jobb Legjobb

108 Logolás A naplózási szint beállítása LOGGER.setLevel(szint); LOGGER.setLevel(Level.INFO); Azok az üzenetek naplózódnak, melyek legalább a beállított szint súlyosságával rendelkeznek. A példában az információs, a figyelmeztető és a súlyos szintű üzenetek naplózódnak. 117/108

109 Logolás Naplózás: logger.xxx("message"); Az xxx metódus az egyes szintek nevével egyezik meg. logger.setlevel(level.info); logger.severe("info Log"); logger.warning("info Log"); logger.info("info Log"); logger.finest("really not important"); Csak azok az üzenetek naplózódnak, amelyek legalább a beállított szinttel rendelkeznek! 117/109

110 Logolás A loggerek több handlerhez (kezelőhöz) is kapcsolódhatnak. A kezelő megkapja az üzenetet a naplózóból, és a beállított cél felé továbbítja. 117/110 ConsoleHandler: Az üzeneteket a konzolra írja ki FileHandler: Az üzeneteket fájlba írja ki Az INFO és a magasabb szintek automatikusan a konzolra kerülnek, de ez kikapcsolható: logger.setuseparenthandlers(false); A kezelő kikapcsolható a setlevel (Level.OFF) módszerrel, és bekapcsolható a setlevel() metódussal. A kezelők kimenete formázóval konfigurálható Rendelkezésre álló formázók: SimpleFormatter: Minden üzenetet szövegként generál XMLFormatter: XML-kimenetet hoz létre a naplóüzenetekhez

111 Példakód Logger import java.util.logging.*; import java.io.*; public class LogPrb { private static Logger logger = Logger.getLogger("LogPrb loger"); private static FileHandler fh; public static void main(string[] args) { makefilelogger("c:/java8/logprb.log"); logger.setlevel(level.info); logger.info("logger Name: "+logger.getname()); logger.warning("hiba!"); logger.info("program OK!"); logger.finest("lényegtelen megjegyzés."); public static void makefilelogger (String fnev) { try { fh = new FileHandler(fnev); logger.addhandler(fh); logger.setuseparenthandlers(false); SimpleFormatter formatter = new SimpleFormatter(); fh.setformatter(formatter); catch (SecurityException e) {e.printstacktrace(); catch (IOException e) {e.printstacktrace(); 117/111

112 Példakód Logger 117/112

113 Logolás A java.util.logging csomag (részlete) Logger Handler External System Filter Filter Formatter 117/113

114 Teszt 21. Melyik csomagban van a Logger osztály? java.util.logger java.util.logging java.util java.util.logger.logging 117/114

115 Teszt 22. Hogyan lehet írni egy megnyitott Logger fájlba? logger.info("data"); logger.warning("data"); logger.server("data"); logger.error("data"); logger.log("data"); logger.exception("data"); logger.finest("data"); 117/115

116 Teszt 23. Milyen formázók állnak rendelkezésre a logoláshoz? SimpleLogFormatter SimpleTextFormatter LogFileFormatter XMLFormatter SimpleFormatter HTMLFormatter 117/116

117 VÉGE VÉGE 117/117

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

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java 12.gyakorlat Gyűjtemény keretrendszer (Collections Framework) A java.util.* csomag részei. Objektumok memóriában való tárolására, lekérdezésére és manipulálására szolgálnak. Általános

Részletesebben

Programozási technológia

Programozási technológia Programozási technológia Generikus osztályok Gyűjtemények Dr. Szendrei Rudolf ELTE Informatikai Kar 2018. Generikus osztályok Javaban az UML paraméteres osztályainak a generikus (sablon) osztályok felelnek

Részletesebben

Generikus osztályok, gyűjtemények és algoritmusok

Generikus osztályok, gyűjtemények és algoritmusok Programozási, gyűjtemények és algoritmusok bejárása Informatikai Kar Eötvös Loránd Tudományegyetem 1 Tartalom 1 bejárása 2 bejárása 2 Java-ban és UML-ben bejárása Az UML-beli paraméteres osztályok a Java

Részletesebben

Java és web programozás

Java és web programozás Budapesti M szaki Egyetem 2013. október 2. 4. El adás Adatszerkezetek A java által deniált adatszerkezetek: Enumeration BitSet Vector Stack Dictionary Hashtable Properties Adatszerkezetek A java által

Részletesebben

Java és web programozás

Java és web programozás Budapesti M szaki Egyetem 2015. 03. 18. 5. El adás Ismétlés: osztály, konstruktor, objektum public class Complex { private float repart_; private float impart_; public Complex(float repart, float impart)

Részletesebben

Reader /Writer InputStreamReader, OutputStreamWriter

Reader /Writer InputStreamReader, OutputStreamWriter 9. gyakorlat Input, output A Java adatfolyamokkal dolgozik (stream). [Ez olyan objektum, ahova tesszük vagy kapjuk az adatot úgy, hogy nem kell foglalkozunk a file-al, hálózattal,stb.] 2 típusa van: InputStream

Részletesebben

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error Generics Egyszerűbb példák (java.util csomagból): public interface List { void add(e x); Iterator iterator(); public interface Iterator { E next(); boolean hasnext(); E - formális típusparaméter,

Részletesebben

Dinamikus adatszerkezetek. 2D generikus tömb: C++ 2D generikus tömb: C++

Dinamikus adatszerkezetek. 2D generikus tömb: C++ 2D generikus tömb: C++ Dinamikus adatszerkezetek 2D generikus tömb: C++ template class CArray2D protected: TYPE **m_array; long m_row, m_col; public: CArray2D(long row, long col) // konstruktor m_array = new TYPE*[row];

Részletesebben

Dinamikus adatszerkezetek. 2D generikus tömb: C++ 2D generikus tömb: C++ 2D tömb: Java versus C++ 2D tömb: Java.

Dinamikus adatszerkezetek. 2D generikus tömb: C++ 2D generikus tömb: C++ 2D tömb: Java versus C++ 2D tömb: Java. 2D generikus tömb: C++ Dinamikus adatszerkezetek template class CArray2D protected: TYPE **m_array; long m_row, m_col; public: CArray2D(long row, long col) // konstruktor m_array = new TYPE*[row];

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

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

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák Gelle Kitti 2017. 10. 25. Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák 2017. 10. 25. 1 / 20 Hasítótáblák T 0 h(k 2)

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

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

Tömbök, kollekciók és egyéb alaposztályok

Tömbök, kollekciók és egyéb alaposztályok Tömbök, kollekciók és egyéb alaposztályok Néhány alaposztály, amit ismerni illik Object String StringBuffer Integer, Double,... System Math Object Minden más osztálynak az őse. (Alapértelmezett, ha nincs.)

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

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java 11.gyakorlat Operációsrendszertől függő tulajdonságok PATH elválasztó Unix ":" Windows ";" final String PATH_SEPARATOR = File.pathSeparator; Ugyanaz, csak karakterkent final char

Részletesebben

Java tutorial. Object. Nehany alaposztaly, amit ismerni illik. tostring. equals vs. ==

Java tutorial. Object. Nehany alaposztaly, amit ismerni illik. tostring. equals vs. == Tombok, kollekcié k es egyeb alaposzta lyok Nehany alaposztaly, amit ismerni illik ő Object ő String ő StringBuffer ő Integer, Double,... ő System ő Math Object é Minden mas osztalynak az se. (Alapertelmezett,

Részletesebben

Kivételkezelés, naplózás. Exception handling, logging

Kivételkezelés, naplózás. Exception handling, logging Kivételkezelés, naplózás Exception handling, logging Try-catch try { // Kódrészlet, amely kivételt eredményezhet catch (Exception1 object1 ) { // Az Exception1 kivétel kezelésének megfelelő kód catch (Exception2

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 13. előadás Throwable Error Exception RuntimeException IOException Saját (általában) Nem ellenörzött kivételek (Unchecked

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

Magas szintű programozási nyelvek 2 Előadás jegyzet

Magas szintű programozási nyelvek 2 Előadás jegyzet Magas szintű programozási nyelvek 2 Előadás jegyzet 1. Rendszerfejlesztés 0. lépés: Elemzés (analízis) 1. lépés: Tervezés a, technológia független rész b, technológia függő rész 2. lépés: Megvalósítás

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

Programozás I. 8. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozás I. 8. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar Programozás I. 8. gyakorlat 1 StringTokenizer osztály Stringeket darabolhatunk fel vele részekre Alapértelmezetten 5 esetben darabol: Szóköz Tab Újsor karakter Carriage return (kocsi vissza) karakter Line

Részletesebben

.Net adatstruktúrák. Készítette: Major Péter

.Net adatstruktúrák. Készítette: Major Péter .Net adatstruktúrák Készítette: Major Péter Adatstruktúrák általában A.Net-ben számos nyelvvel ellentétben nem kell bajlódnunk a változó hosszúságú tömbök, listák, sorok stb. implementálásával, mert ezek

Részletesebben

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek Tömb Ugyanolyan típusú elemeket tárol A mérete előre definiált kell legyen és nem lehet megváltoztatni futás során Legyen n a tömb mérete. Ekkor:

Részletesebben

Programozási nyelvek II.: JAVA

Programozási nyelvek II.: JAVA Programozási nyelvek II.: JAVA 12. gyakorlat 2017. december 4-8. 12. gyakorlat Programozási nyelvek II.: JAVA 1 / 39 Az 12. gyakorlat tematikája equals és hashcode metódusok Comparable Set, Map Absztrakt

Részletesebben

Java osztálykönyvtár és használata

Java osztálykönyvtár és használata 3. óra Java osztálykönyvtár és használata Csomagok Kivételkezelés Osztálykönyvtárak és használatuk legradi.gabor@nik.bmf.hu szenasi.sandor@nik.bmf.hu Java osztálykönyvtár és használata Témakörök Csomagok

Részletesebben

Programozási technológia

Programozási technológia Programozási technológia Bevezetés Dr. Szendrei Rudolf ELTE Informatikai Kar 2018. Információk Képzés Programtervező Informatikus BSc, nappali tagozat, C szakirány Tárgykód: IP-17cPROGT1EG Előfeltétel

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

OOP: Java 6.Gy: Java osztályok. Definíció, static, túlterhelés

OOP: Java 6.Gy: Java osztályok. Definíció, static, túlterhelés OOP: Java 6.Gy: Java osztályok Definíció, static, túlterhelés 45/1 B ITv: MAN 2019.03.18 Feladat Készítsen egy Alkalmazott osztályt saját csomagban, név, kor és fizetés adatokkal. Legyen egy osztályszintű

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 Programozás 3. Gy: Java GUI. Swing, AWT

Java Programozás 3. Gy: Java GUI. Swing, AWT Java Programozás 3. Gy: Java GUI Swing, AWT 35/1 B ITv: MAN 2018.02.25 Feladat Készítsük el az Emp osztály kezelő programját úgy, hogy ArrayList-et (listatömb, tömblista, rugalmas tömb) használunk. A java.util.arraylist

Részletesebben

Globalizáció, Lokalizáció

Globalizáció, Lokalizáció Globalizáció, Lokalizáció Tóth Zsolt Miskolci Egyetem 2013 Tóth Zsolt (Miskolci Egyetem) Globalizáció, Lokalizáció 2013 1 / 19 Tartalomjegyzék 1 Bevezetés 2 System.Globalization 3 System.Resources Tóth

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

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

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

ZH mintapélda. Feladat. Felület

ZH mintapélda. Feladat. Felület ZH mintapélda Feladat Írjon Java alkalmazást, amely képes hallgatók rekordjaittárolni és azokat különbözo rendezo kulcsok szerint sorba rendezni. A program grafikus felhasználói felületén keresztül új

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

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

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani Mi a legabsztraktabb típus a JAVA-ban? Object Mikor preferált interface-ek használata a konkrét típusok helyett? Ha egy osztály több interfacet is használhasson, vagy ha fvek implementálását a az osztályra

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

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

Abstract osztályok és interface-ek. 7-dik gyakorlat

Abstract osztályok és interface-ek. 7-dik gyakorlat Abstract osztályok és interface-ek 7-dik gyakorlat Abstract metódusok és osztályok Az OO fejlesztés során olyan osztályokat is kialakíthatunk, melyeket csak továbbfejlesztésre, származtatásra lehet használni,

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

7. K: JAVA alapok Konzultáció

7. K: JAVA alapok Konzultáció Objektum Orientált Programozás 7. K: JAVA alapok Konzultáció 35/1B IT MAN B IT v: 2017.05.03 MAN Hiba, biztonságos program 01. Szintaktikai hiba imt i = 0; system.out.println( alma ); for (int i = 0, i

Részletesebben

OOP: Java 5.Gy: Osztály, referencia, konstruktor

OOP: Java 5.Gy: Osztály, referencia, konstruktor OOP: Java 5.Gy: Osztály, referencia, konstruktor 36/1 B ITv: MAN 2019.03.10 Osztály fogalma A Circle osztály definíciója: public class Circle { private int cx; private int cy; private int rad; public Circle(int

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

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés Kivételek kezelése (exception handling) Hibakezelés old style class Szamolo { void szamol( String s, int i ) { int d; if (i!= 0) d = (i+1)/i; else if (s!= null) d = s.length(); else if (i > 10) // applikációs

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

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

Java programozási nyelv

Java programozási nyelv Szoftvertechnológia sáv Java programozási nyelv Dirk Louis-Peter Müller: Java (Belépés az internet világába) Panem kiadó, Budapest, 2002. Webvilág sorozat Készítette: Gregorics Tibor Vázlatos áttekintés

Részletesebben

Elemi adatszerkezetek

Elemi adatszerkezetek 2017/12/16 17:22 1/18 Elemi adatszerkezetek < Programozás Elemi adatszerkezetek Szerző: Sallai András Copyright Sallai András, 2011, 2014 Licenc: GNU Free Documentation License 1.3 Web: http://szit.hu

Részletesebben

C++ Standard Template Library (STL)

C++ Standard Template Library (STL) Programozási Nyelvek és Fordítóprogramok Tanszék Programozási Nyelvek I. Témák 1 STL alapok 2 STL fogalmak 3 Konténerek 4 Iterátorok 5 Funktorok C++ STL Ne fedezzük fel újra spanyolviaszt! Sok adatszerkezet/algoritmus

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

Generikusok, Collections Framework JAVA PROGRAMOZÁS 5. GYAKORLAT

Generikusok, Collections Framework JAVA PROGRAMOZÁS 5. GYAKORLAT Generikusok, Collections Framework JAVA PROGRAMOZÁS 5. GYAKORLAT Amiről ma szó lesz Generikusok A java.util csomag: Collections Framework Collection interface Map interface Collection implementációk Map

Részletesebben

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL ) Célok: a Java DB adatbázis-kezelő rendszer használatának ismertetése, adatbázisok használata Java alkalmazásokban - kétrétegű architektúra, egyszerű kliens-szerver architektúra használata hálózati alkalmazásokhoz.

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

Széchenyi István Egyetem. Programozás III. Varjasi Norbert varjasin@sze.hu

Széchenyi István Egyetem. Programozás III. Varjasi Norbert varjasin@sze.hu Programozás III. Varjasi Norbert varjasin@sze.hu 1 A java virtuális gép (JVM) Képzeletbei, ideális számítógép. Szoftveresen megvalósított működési környezet. (az op. rendszer egy folyamata). Feladata:

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 8. előadás Öröklődés - megnyitunk egy osztályt egy másik előtt zárt egységeket szeretünk készíteni (láthatósági kérdés:

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

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, 12. gyakorlat 1 Távoli metódushívás Java-ban (RMI) Java-ban a távoli metódushívás ( Remote Method Invocation, RMI) egy

Részletesebben

Szoftvertechnolo gia gyakorlat

Szoftvertechnolo gia gyakorlat Szoftvertechnolo gia gyakorlat Dr. Johanyák Zsolt Csaba http://johanyak.hu 1. Dependency Injection (függőség befecskendezés) tervezési minta A tervezési minta alapgondolata az, hogy egy konkrét feladatot

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

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

Fejlett programozási nyelvek C++ Iterátorok

Fejlett programozási nyelvek C++ Iterátorok Fejlett programozási nyelvek C++ Iterátorok 10. előadás Antal Margit 2009 slide 1 Témakörök I. Bevezetés II. Iterátor definíció III. Iterátorok jellemzői IV. Iterátorkategóriák V. Iterátor adapterek slide

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

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

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

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

Felhasználó által definiált adattípus

Felhasználó által definiált adattípus Felhasználó által definiált adattípus C++ Izsó Tamás 2017. február 24. Izsó Tamás Felhasználó által definiált adattípus/ 1 Irodalom Izsó Tamás Felhasználó által definiált adattípus/ 2 Programtervezési

Részletesebben

Imperatív programozás

Imperatív programozás Imperatív programozás 6. Előadás Python típusok (folytatás) Függvények Típusok + műveleteik Listák - mutable (változtatható) - heterogén lista >>> lista = ["szo", 12, 3.5] >>> lista[1] 12 >>> lista[1:3]

Részletesebben

Java Programozás 8. Gy: Java alapok. Adatkezelő 4.rész

Java Programozás 8. Gy: Java alapok. Adatkezelő 4.rész Java Programozás 8. Gy: Java alapok Adatkezelő 4.rész 37/1 B ITv: MAN 2018.04.15 A feladat Feladat: folytassuk a panel életre keltését! - Készítsük el a Módosítás funkciót - A Lista panelt másoljuk le,

Részletesebben

Programozási nyelvek II.: JAVA, 4. gyakorlat

Programozási nyelvek II.: JAVA, 4. gyakorlat Programozási nyelvek II.: JAVA, 4. gyakorlat 2017. október 2-6. Programozási nyelvek II.: JAVA, 4. gyakorlat 1 / 32 A 4. gyakorlat tematikája Tömbök A java.util.arrays osztály A String osztály A StringBuffer

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

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

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész Java Programozás 9. Gy: Java alapok Adatkezelő 5.rész 15/1 B ITv: MAN 2018.04.22 A Keresés funkció Programlogika: 1. A keresés az etm táblamodellben fog keresni, és a találat rekordokat átmásolja egy másik

Részletesebben

C++ programozási nyelv

C++ programozási nyelv C++ programozási nyelv Gyakorlat - 13. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. december A C++ programozási nyelv Soós Sándor 1/10 Tartalomjegyzék Objektumok

Részletesebben

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar Programozás I. 5. gyakorlat 1 Objektumorientáltság Egységbezárás és információ elrejtése (absztrakt adattípus) Adatok és rajtuk végzett műveletek egységbezárása (osztályok írása, múlt hét) Öröklődés Polimorfizmus

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

Programozás I. Második ZH segédlet

Programozás I. Második ZH segédlet Programozás I. Második ZH segédlet Ezen az oldalon: interfész létrehozás, megvalósítás; absztrakt osztály, metódus; belső osztály Interfész létrehozása: public interface InterfeszNeve { //Metódusok deklarációja

Részletesebben

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14. Informatika 1 2011 Második előadás, vezérlési szerkezetek Szabó Adrienn 2011. szeptember 14. Tartalom Algoritmusok, vezérlési szerkezetek If - else: elágazás While ciklus For ciklus Egyszerű típusok Összetett

Részletesebben

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész Java Programozás 6. Gy: Java alapok Adatkezelő 2.rész 25/1 B ITv: MAN 2018.04.13 A feladat Feladat: folytassuk a panel életre keltését! - Alakítsuk ki a Lista panelt - Betöltéskor olvassuk be az adatokat

Részletesebben

Újdonságok a Java nyelvben

Újdonságok a Java nyelvben Újdonságok a Java nyelvben Kozsik Tamás kto@elte.hu http://kto.web.elte.hu/ Eötvös Loránd Tudományegyetem Programozási Nyelvek és Fordítóprogramok Tanszék 2008. Kozsik Tamás (ELTE) Újdonságok a Java nyelvben

Részletesebben

JAVA PROGRAMOZÁS 3.ELŐADÁS

JAVA PROGRAMOZÁS 3.ELŐADÁS Dr. Pál László, Sapientia EMTE, Csíkszereda JAVA PROGRAMOZÁS 3.ELŐADÁS 2014-2015 tavasz Polimorfizmus, absztrakt osztályok, interfészek 2 Példa - Hengerprogram 3 Példa - Hengerprogram 4 Példa - Hengerprogram

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

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) közönséges felhasználók SQL*Plus Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP dolgozó), DEPT osztály) "közönséges" felhasználók Adatszótár: metaadatokat tartalmazó, csak olvasható táblák táblanév-prefixek:

Részletesebben

Programozási nyelvek II.: JAVA, 11. gyakorlat

Programozási nyelvek II.: JAVA, 11. gyakorlat Programozási nyelvek II.: JAVA, 11. gyakorlat 2017. november 27-december 1. Programozási nyelvek II.: JAVA, 11. gyakorlat 1 / 54 A 11. gyakorlat tematikája Örökl dés Osztályhierarchia Az Object osztály

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

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

Programozási nyelvek és módszerek Java Thread-ek

Programozási nyelvek és módszerek Java Thread-ek Programozási nyelvek és módszerek Java Thread-ek Laki Sándor lakis@inf.elte.hu 2006. május 3. 0-0 Szálak (Threads) Ahhoz, hogy egy mai rendszer m ködhessen több 10-100 folyamatnak kell futnia. A folyamatok

Részletesebben

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások Osztálytervezés és implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 04. 24. Osztálytervezés és implementációs kérdések OTERV / 1 Osztály tervezés Egy nyelv

Részletesebben

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread Végrehajtási szálak Runnable, Thread Végrehajtási szálak Java-ban A Java program az operációs rendszer egy folyamatán (process) belül fut. A folyamat adat és kód szegmensekből áll, amelyek egy virtuális

Részletesebben

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások Osztálytervezés és implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 04. 24. Osztálytervezés és implementációs kérdések OTERV / 1 Osztály tervezés Egy nyelv

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

Láncolt lista Bináris keresőfa Gráf Hasító táblázat. Programozás II. labor 2. rész (Adatszerkezetek)

Láncolt lista Bináris keresőfa Gráf Hasító táblázat. Programozás II. labor 2. rész (Adatszerkezetek) Láncolt lista Bináris keresőfa Gráf Hasító táblázat Programozás II. labor 2. rész (Adatszerkezetek) Programozás II. Láncolt lista Generikus típusok Láncolt lista megvalósítása Bináris keresőfa Bejáró tervezési

Részletesebben

mul : S T N 1 ha t S mul(s, t) := 0 egyébként Keresés Ezt az eljárást a publikus m veletek lenti megvalósításánál használjuk.

mul : S T N 1 ha t S mul(s, t) := 0 egyébként Keresés Ezt az eljárást a publikus m veletek lenti megvalósításánál használjuk. Érdi Gerg EF II. 2/2. Feladat Készítsen egy zsák típust! lkalmazzon osztályt! zsákokat rendezett láncolt listával ábrázolja! Implementálja a szokásos m veleteket, egészítse ki az osztályt a kényelmes és

Részletesebben

Adatbázisok webalkalmazásokban

Adatbázisok webalkalmazásokban Sapientia - EMTE, Pannon Forrás,,Egységes erdélyi felnőttképzés a Kárpát-medencei hálózatban 2010 A JDBC API A Data Access Object tervezési minta Adatforrás - DataSource JDBC architektúra A JDBC API java.sql

Részletesebben