Programozási nyelvek Java

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

Programozási nyelvek Java

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Collections. Összetett adatstruktúrák

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

Programozási nyelvek JAVA EA+GY 1. gyakolat

Programozási nyelv Java

GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és. Függvénysablonok

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Programozási technológia

JAVA PROGRAMOZÁS 2.ELŐADÁS

J2SE 1.5 Tiger. Bevezetés. Metaadatok. Generikus típus. J2SE 1.5 Tiger. Viczián István (viczian.istvan a gmail-en)

Programozási nyelvek Java

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

Modellező eszközök, kódgenerálás

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

Programozási nyelvek Java

Programozási nyelvek II.: JAVA

Programozási nyelvek Java

és az instanceof operátor

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

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

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

OOP #14 (referencia-elv)

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

Web-technológia PHP-vel

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

Már megismert fogalmak áttekintése

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

Generikus Típusok, Kollekciók

Segédanyag: Java alkalmazások gyakorlat

Bevezetés, a C++ osztályok. Pere László

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

Objektumorientált programozás C# nyelven

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Programozási nyelvek Java

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

Programozás C++ -ban

Programozás II. 2. Dr. Iványi Péter

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

Programozási technológia I.

1. Egyszerű (primitív) típusok. 2. Referencia típusok

Webes alkalmazások fejlesztése 10. előadás. Webszolgáltatások tesztelése (ASP.NET Core) Cserép Máté

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

sallang avagy Fordítótervezés dióhéjban Sallai Gyula

C++ programozási nyelv Konstruktorok-destruktorok

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

A Java és a C++ összehasonlítása

Programozási nyelvek II.: JAVA

Programozási nyelvek Java

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

JAVA PROGRAMOZÁS 3.ELŐADÁS

Programozási nyelvek II. JAVA

Bevezetés a Python programozási nyelvbe

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?

Java. JIT (Just in Time) fordítók alkalmazása, optimalizálás AOT (Ahead of Time) fordítók alkalmazásának lehetősége

Programozási nyelvek Java

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

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

Modellek végrehajtása, kódgenerálás

C programozási nyelv Pointerek, tömbök, pointer aritmetika

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

Memóriakezelés, dinamikus memóriakezelés

3. Osztályok II. Programozás II

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

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

C programozási nyelv

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

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

Java 5. Ráth István

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Reader /Writer InputStreamReader, OutputStreamWriter

FUNKCIONÁLIS PROGRAMOZÁS

Programozási technológia

OOP. Alapelvek Elek Tibor

Java és web programozás

Programozás C++ -ban 2007/4

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1

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

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

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

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

Globális operátor overloading

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

Programozási Nyelvek: C++

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

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

S z á m í t ó g é p e s a l a p i s m e r e t e k

Algoritmusok és adatszerkezetek gyakorlat 07

1. Jelölje meg az összes igaz állítást a következők közül!

Interfészek. PPT 2007/2008 tavasz.

Smalltalk 3. Osztályok létrehozása. Készítette: Szabó Éva

C++ programozási nyelv

Programozási nyelvek II.: JAVA

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?

Térinformatikai algoritmusok Elemi algoritmusok

Programozás módszertan

Generikusok, Collections Framework JAVA PROGRAMOZÁS 5. GYAKORLAT

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

Osztályok. 4. gyakorlat

Átírás:

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 PATH_CHAR = File.pathSeparatorChar; Név szeparátor Unix "/" Windows "\" final String SEPARATOR = File.separator; Ugyanaz, csak karakterkent final char SEPARATOR_CHAR = File.separatorChar; Sorvége karakter Unix "\n" Windows "\r\n final String EOL = System.getProperty("line.separator");

Generic (Sablon) Osztálysablon készítésére alkalmas. Általánosan megírt sablonba, használatkor konkrét típusokat helyettesítünk be. Típussal paraméterezhető Type erasure: csak fordítási időben ismert a típusinformáció, utána automatikusan törli a fordító, bájtkódból nem szerezhető vissza Nem kötelező velük foglalkozni (@SupressWarnings("rawtypes", "unchecked")), de rendkívül hasznosak, fordítási időben tudunk potenciális hibalehetőségeket kiszúrni - persze ez is a programozón múlik Kényelmes, típusbiztos Collection-öknél aktívan használjuk őket: LinkedList<String> s = new LinkedList<String>(); Részletesen: http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf Példa Autoboxing-unboxing Autoboxing: automatikusan becsomagolja //pl: Integer i = 5; Unboxing: kicsomagolás a csomagoló osztályból //pl: int i = new Integer(5); Csak objektum referenciákat tárolhatnak, ezért primitív típusok helyett csomagoló (wrapper) osztályokat (Integer, Character, Double, etc.) kell használnunk - azonban ezek ilyen esetekben automatikusan konvertálódnak (ld. fenti példa) Amire figyelni kell: teljesítmény, == operátor, null unbox-olása NullPointerException-nel jár

Altípusosság Nem konvertálhatók, mert akkor lehetne ilyet csinálni: Egyszerűbb példák A java.util csomagban találhatóak a következő példák: A T formális típusparaméter, amely aktuális értéket a kiértékelésnél vesz fel (pl. Integer, etc.). Wildcardok Általános megoldást szeretnénk, amely minden collection-t elfogad, függetlenül az azokban tárolt elemektől (pl. ki szeretnénk őket írni), vagy nem tudjuk azok konkrét típusát (pl. legacy code). Collection<Object> nem őse (ld. előző bekezdés). Ha nem használunk generic-ket, akkor is megoldható, viszont warning-ot generál: A megoldás a wildcard használata: Collection<?> minden kollekcióra ráillik. Ilyenkor Object-ként hivatkozhatunk az elemekre:

Vigyázat!!! A? Object! Csak egy ismeretlen típust jelent. Így a következő kódrészlet is fordítási hibához vezet: Nem tudjuk, hogy mi van benne, lekérdezni viszont lehet (mert tudjuk, hogy minden objektum az Object leszármazottja). Bounded wildcard Amikor tudjuk, hogy adott helyen csak adott osztály leszármazottai szerepelhetnek, akkor használhatjuk őket. Első megközelítés (ROSSZ!!!): Azért rossz, mert a func() csak List<Super>-rel hívható meg, List<Sub1>, List<Sub2> nem lehet paramétere (nem altípus). Megoldás a bounded wildcard: Belepakolni ugyanúgy nem tudunk, mint a? esetén, azaz erre fordítási hibát kapunk: Felfelé is megköthető a wildcard a <? super T> jelöléssel.

Példa Generikus osztály

Generikus függvény

Feladatok 1. Készíts egy generikus reverse függvényt, amely egy tetszőleges lista elemeit képes megfordítani. 2. Készíts egy generikus addall függvényt, amely egy tetszőleges lista adatszerkezetbe beleteszi a második paraméterként megadott lista összes elemét! 3. Készíts egy olyan generikus min függvényt, amely egy tetszőleges kollekcióban megkeresi és visszaadja a minimális elemet! (Kell a Comparable interfész is!!!). 4. Készíts egy saját, generikus Stack implementációt! Az implementáció módját tetszőlegesen megválaszthatod, a reprezentációt is, de illeszkedjen az IStack interfészre! Az implementációk a generic.stack csomagban legyenek! Teszteljétek a Main fájl alapján! 5. Készítsd el az előző Stack adatszerkezetet úgy, hogy az elemeket Node típusban tárolod. A node egy olyan adatszerkezet, ami tartalmaz egy elemet és 2 referenciát: az előző és a következő node-ra. Ezt megtalálod a honapon. 6. Készítsd el a MyList generikus osztályodat úgy, hogy származtatod a LinkedList generikus osztályból. Az osztályodat egészítsd ki két függvénnyel: public T first(predicate<t> pred) és a public LinkedList<T> filter(predicate<t> pred) A first függvény visszaadja az első olyan elemet, amire a megadott predikátum test függénye igazzal tér vissza, míg a filter függvény egy listába rakja azokat az elemeket, amire igaz feltétel, majd visszatér vele. Készíts egy tesztfájlt, amiben teszteled a MyList osztályodat Integer típusra, a predikátumbeli test függvényed pedig a páros számokra térjen vissza igazzal. 7. Készítsünk egy egyszerű, általános bináris keresőfa implementációt! A fához lehessen elemet hozzáadni (add()), kiírni, valamint a minimum, maximum elemet megkeresni (min(), max()). A típusparaméterének összehasonlíthatónak kell lennie (< T extends Comparable<T> >).