Abstract osztályok és interface-ek Beolvasás és kiíratás 7. gyakorlat.

Slides:



Advertisements
Hasonló előadás
© Kozsik Tamás Különböző nyelvekhez igazítás Internationalization - i18n.
Advertisements

Osztály leszármaztatás
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
C++ programozási nyelv Gyakorlat hét
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Adatbányászati technikák (VISZM185)
Öröklődés 2..
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
© Kozsik Tamás Be- és kimenet kezelése.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
Bevezetés a Java programozásba
Bevezetés a Java programozásba
Öröklődés Polimorfizmus Csomagok Absztrakt osztályok, interfészek
Kollekciók IO stream-ek Generikus kollekciók.  objektumokat tartalmaznak  nincsen előre meghatározott méretük, bármennyi objektumot pakolhatok beléjük.
Fájlkezelés, IO Kivételkezelés Belső osztályok
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 8. Gyakorlat Operator overloading II.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 5. Gyakorlat Öröklődés, virtuális függvények,
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 9. Gyakorlat Alap file műveletek.
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Tömbök ismétlés Osztályok Java-ban Garbage collection
Az objektum-orientált tervezési alapelvek kritikai vizsgálata
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
A Java programozási nyelvSoós Sándor 1/28 Java programozási nyelv 10. rész – Input/output kezelés Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 3. rész – Osztályok I.
A C++ programozási nyelvSoós Sándor 1/15 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
Java programozási nyelv 5. rész – Osztályok III.
C# tagfüggvények.
C# tagfüggvények.
Kivételkezelés.
P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.
P ROGRAMOZÁS I/O műveletek. S YSTEM.C ONSOLE A programjainknak fontos része a felhasználóval való kommunikáció. Adatokat kell kérni tőle, vagy közölnünk.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
J.Zs.Cs.: Vizuális programozás (c) 2010 Vizuális programozás Fájl- és állományrendszer kezelés Névtér: System.IO.
1. Gyakorlat - Alapok 1. Írjon konzolprogramot, amely kiírja a “Hello ELTE” üzenetet! Használja a System.out.println() -t! 2. Írjon konzolprogramot, amely.
A PHP 5 újdonságai Az OOP terén. Miről lesz szó? Osztályok kezelése – Új direktívák – Konstruktor – Destruktor Interfészek Kivételkezelés.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 7. gyakorlat.
Számítógépes Grafika 4. gyakorlat Programtervező informatikus (esti)‏ 2011/2012 őszi félév.
Java programozási nyelv Filekezelés
Java programozási nyelv Metódusok
Java programozási nyelv Adatbekérés konzolról
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
1 Objektum orientált programozás Öröklődés: többszörös öröklődés, konstruktorok, destruktorok, overloading Nagy Szilvia.
OOP ÖRÖKLŐDÉS, INTERFÉSZ
Programozás III OOP ÖRÖKLŐDÉS.
Programozás III KOLLEKCIÓK.
Programozás III KIVÉTEL.
Programozás III KIVÉTEL. KIVÉTELKEZELÉS Hibátlan program nincs!!! eddig hiba esetén leállt a program. Példa ilyen hibákra: ─ ArrayBoundsOfException (tömb.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 5. gyakorlat.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 7. gyakorlat.
Ficsor Lajos Objektumok inicializálása CPP4 / 1 Objektumok inicializálása Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 4. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 7. gyakorlat.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Be- és kimenet kezelése
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Előadás másolata:

Abstract osztályok és interface-ek Beolvasás és kiíratás 7. 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, vele objektumpéldány nem készíthető, azonban objektum-referencia igen. Az osztály fejlécében az abstract kulcsszóval hozunk létre abstract osztályt.

Az abstract osztályok további jellegzetessége, hogy bizonyos műveletek, amelyek szükségesek az osztály működéséhez, általában nincsenek kidolgozva – a függvény dekralációt pontosvessző zárja és nincs törzsük. Az ilyen metódusoknál is alkalmazni kell az abstract kulcsszót. Ilyenkor az abstract metódusok implementációját a származtatott osztályban kell megtenni. Amennyiben ezt nem tesszük meg, akkor a származtatott osztálynak is abstract-nak kell lennie! Ha egy osztályban van abstract metódus, akkor azt az osztály fejrésznél is jelezni kell. Abstract osztálynak nem kötelező minden függvényének, hogy abstract legyen. Abstract metódus nem lehet private és final! Abstract metódusok és osztályok

abstract class AOsztaly{ protected int a = 12; public abstract void kiir(); } class BOsztaly extends AOsztaly{ protected int b; public BOsztaly(){ b = 13; } public void kiir(){ System.out.println( a + ” ” + b ); } } Abstract metódusok és osztályok class COsztaly extends BOsztaly{ protected int c; public COsztaly(){ c = 23; } public void kiir(){ System.out.println(a + ” ” + b + ” ” + c ); } }

AOsztaly-ra hivatkozó referenciával példányosíthatunk BOsztaly és COsztaly objektumot. AOsztaly aoszt = new BOsztaly(); aoszt.kiir(); // a BOsztaly kiir metódusa fog meghívódni az AOsztaly referencián keresztül. Mivel minden osztály impliciten az Object osztályból száramzik, megtehetjük ezt is: Object o = new COsztaly(); ( ( COsztaly ) o ).kiir(); //de itt típus-átalakítást kell végrehajtani. Abstract metódusok és osztályok

Upcast (ősre konvertálás): Elveszítjük a konkrét típust, de a konverzió biztonságos. Downcast (leszármazottra konvertálás): visszanyerjük a konkrét típust (nem minden nyelven biztonságos). Java- ban ez biztonságos, ClassCastException kivétel dobódik, ha nem jól downcast-olunk. instanceof kulcsszóval tudjuk megvizsgálni, hogy az adott referencia objektuma milyen típusú. Object o = new COsztaly(); if ( o instanceof COsztaly ){ ((COsztaly)o).kiir(); //Downcast } Abstract metódusok és osztályok – Futás közbeni típusazonosítás

Interface-ek A Java nyelvben nincs többszörös öröklődés. A Java fejlesztői még is lehetőséget adtak a „többszörös öröklődésre”. ( Nem konkrét többszörös öröklődés, mint C++ nyelven. ) Interface = teljesen abstract osztály. interface kulcsszóval hozunk létre interface-t. Interface-ben csak konstans és public abstract metódus szerepelhet. Viszont nem kötelező interface esetén az abstract kulcszó. Fordításkor.class állomány jön létre. Az interface, csak formát ad meg implementáció nélkül. Protokollt biztosít az egyes osztályok között.

[public] interface InterfaceName{ [public] final int konstans = érték; //kötelező inicializálni [public] int metódus1(); [public] int metódus2(); } Interface-ek

Osztályba való implementáláshoz az implements kulcsszót kell használni. class Osztaly extends OsOsztaly implements Interface1, Interface2 …{} Több interface használatánál vesszővel válasszuk el az interface neveket. Az interface-t használó osztálynak minden interface-beli függvényt implementálni kell, különben abstract-nak kell hogy legyen.

Interface-ek Miért jó az interface? Protokollt biztosít különböző osztályok között. Pl: Egy függvény olyan objektum példányt vár paraméterül, amelynek az osztálya implementál egy adott interface-t. Ilyenkor a függvénynek bármely olyan objektumot átadhatunk, amelynek az osztálya implementálja az adott interface-t.

Interface-ek public interface Kiiro{ public void kiir(); } class Egyik imlements Kiiro{ public void kiir(){ System.out.println( ”Egyik” ); } } class Masik imlements Kiiro{ public void kiir(){ System.out.println( ”Masik” ); } } class Harmadik{ public static void print( Kiiro ki ){ ki.kiir(); } } class Futtato{ public static void main( String[] args ){ Egyik egyik = new Egyik(); Masik masik = new Masik(); Harmadik.print( egyik ); Harmadik.print( masik ); } }

Gyorstalpaló kötelezőprogramhoz- IO A Java IO használatákor mindig be kell importálni a java.io.*;-t! Console-ról való beolvasáshoz a BufferedReader osztályt használjuk. A BufferedReader konstruktorának meg kell adni egy Reader típusú objektumot, mi most az InputStreamReader-t adjuk meg, ennek pedig a konstruktorában meg kell mondani, hogy honnan olvasson! Tehát: BufferedReader reader = new BufferedReader( new InputStreamReader( System.in ) );

Beolvasás: Egy karaktert: char a = (char)reader.read(); // int-et ad vissza, át kell alakítani char-rá. Egész sor (String): String s = reader.readLine(); Le is kell zárni: reader.close(); Gyorstalpaló kötelezőprogramhoz- IO

A beolvasáshoz szükség lenne a kivételkezelésre, de ezt meg is tudjuk kerülni. Hátránya: hiba esetén nem várt mellékhatás, esetleg elszáll a program. Ahhoz, hogy kikerüljük a kivételek kezelését, jelezni kell a függvény fejnél, hogy milyen kivételt dobhat. A beolvasás IO kivételt dobhat, tehát: public void Beolvas() throws IOException{} throws kulcsszóval tudjuk jelezni, hogy milyen kivétel is fordulhat elő. Minden olyan függvényben, mely használ egy ilyen függvényt, ami kivételt dobhat, vagy le kell kezelni a kivételt, vagy ott is jelezni kell, hogy milyen kivétel várható Gyorstalpaló kötelezőprogramhoz- IO

File írás - olvasás File írás: Writer out = new BufferedWriter( new FileWriter( utvonal ) ); out.write( String ); //kiírás out.flush();//kiürítjük a stream-et. out.close();//lezárjuk a stream-et BufferedWriter out2 = new BufferedWriter( new FileWriter( utvonal ) ); plusz metódus: newLine(); //sortörést tesz.

File olvasás: BufferedReader reader = new BufferedReader( new FileReader( utvonal ) ); reader.readLine();//egész sor beolvasás String-ként. reader.close();//lezárás File írás - olvasás

StringTokenizer Szükség lehet a konzolról vagy fájlból beolvasott szövegek feldolgozására is. Ilyen célokra használható a java.util csomag StringTokenizer osztálya. A konstruktorában megadhatjuk, melyik String-et szeretnénk feldolgozni, és azt is, milyen jelek mentén szeretnénk felosztani (Ha nem adunk meg felosztó jelet, a szóközt fogja használni – ez az alapértelmezett felosztó)

StringTokenizer

Pélada progik  Alkoholos.java  Ital.java  AlkoholosItal.java  Gyumolcs.java  Gyumolcsle.java  ErjedtGyumolcs.java  Bor.java  Aszu.java  Absztinens.java  Iszakos.java