1 / 28

4. gyakorlat

4. gyakorlat. Osztályok Garbage collection. Osztályok. Osztály írása. általában minden osztálynak vannak adattagjai és/vagy metódusai adattagok megadása: [láthatóság] [static] [final] [transient] [volatile] típus változóNév metódusok megadása:

langer
Download Presentation

4. gyakorlat

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 4. gyakorlat Osztályok Garbage collection

  2. Osztályok

  3. Osztály írása • általában minden osztálynak vannak adattagjai és/vagy metódusai • adattagok megadása: • [láthatóság] [static] [final] [transient] [volatile] típusváltozóNév • metódusok megadása: • [láthatóság] [static] [abstract] [final] [native] [synchronized] visszatérésiTípusmetódusNév ([paraméterek]) [throws kivételLista]

  4. Példa osztály írására osztálynév: mindig nagy kezdőbetűvel! public class Alma{ private int tomeg; private String szin; public void leesik(){ System.out.println(„Potty!”); } } • ezt így nem tudom futtatni, mert nincs benne main függvény! az osztály attribútumai az osztály metódusa

  5. Példa osztály írására public class Program{ public static void main(String[] args){ Alma a = new Alma(); a.leesik(); } } • 1 fájlba általában 1 osztályt írunk (public class-ból pedig szigorúan csak 1 lehet!) meghívódik a konstruktor meghívódik az „a” objektum leesik metódusa

  6. Még egy példa publicclass Pont { // adattagok private int x; private int y; publicdoubletavolsag(Pont p) { doubletav; // távolságot számoló kód… returntav; } }

  7. Láthatóság • az adattagok és a metódusok láthatóságát korlátozni kell • az OO egyik fontos eleme az implementáció elrejtése: a használó használhatja anélkül, hogy pontosan ismerné, mi van benne • hogy ki mit érhet el, azt a láthatóság beállításával szabhatjuk meg • ha nem adunk meg láthatóságot, az alapértelmezett a packageprivate/”friendly” • ez csomagon belül public, egyébként private • nincsen kulcsszava!

  8. Láthatóság • a láthatóság lehet még: • public: mindenkinek mindent megenged • private: csak az az osztály használhatja, amiben létrehozták • az adattagok általában private láthatóságúak • protected: az adott osztály és annak gyerekosztályai használhatják • a main függvény mindig public (különben a futtató környezet sem férne hozzá)

  9. Konstruktor • különleges metódus • garantálja az inicializálást az objektum létrejöttekor • neve meg kell hogy egyezzen az osztály nevével • visszatérési típusa nem lehet • új objektum létrehozásakor hívódik meg • általában az adattagok inicializálásáért felelős kódot helyezzük a törzsébe • általában public láthatóságú

  10. Default konstruktor • ha a konstruktornak nincsen paramétere, akkor default konstruktornak nevezzük (ellenkező esetben paraméteres konstruktornak) • alapértelmezett beállításokkal rendelkező objektum létrehozására használjuk • ha semmilyen konstruktort nem készítünk, akkor a fordító készít egy default-ot • ha viszont akár paraméteres, akár pataméter nélküli konstruktort készítünk, akkor nem jön létre default

  11. Példa konstruktorra • Default: public Pont() { x = 0; y = 0; } • Paraméteres: public Pont(int xKoord, int yKoord) { x = xKoord; y = yKoord; }

  12. Overloading • operáció kiterjesztése/overloading: ugyanaz a neve, de más a paraméterlista • pl. a konstruktorok esetén • de nemcsak konstruktorokat lehet kiterjeszteni, pl.: public void kortRajzol(){…}; public void kortRajzol(int sugar){…}; public void kortRajzol(int sugar, int x, int y){…};

  13. Static kulcsszó • Adattag esetén: ugyanazon a helyen tárolódik az összes példány  ugyanaz lesz az adattag értéke bármely objektumpéldány esetén • Pl.: Alma osztály adattagja legyen:private static int tomeg;  minden Alma típusú objektum tömege ugyanannyi lesz • a static adattag objektumpéldány nélkül is létezik

  14. Static kulcsszó • Metódus esetén: nem kell objektumpéldányt létrehozni ahhoz, hogy meg tudjuk hívni • Pl.: public static void main(), Integer.parseInt() • nem lehet felüldefiniálni! • Statikus környezetből csak statikus adattagok érhetők el

  15. Final kulcsszó • adattag esetén: nem változtathatja meg az értékét (adnunk kell neki kezdőértéket!) • Pl.: private static final int tomeg = 10; • metódusok esetén: gyerekosztályban nem lehet felüldefiniálni • Pl.: public final leesik(){…} • minden private metódus impliciten final

  16. Final kulcsszó • osztály esetén: nem lehet gyerekosztálya • Pl.: final class Alma{…} • minden metódusa impliciten final • nem primitív típusra használva nem az objektum lesz konstans, hanem a referencia

  17. Konstans • valódi konstans létrehozása: static és final kulcsszavakkal • kezdőértékük nem változtatható meg • nevüket csupa nagy betűvel kell írni, szóhatáron aláhúzásjellel elválasztva • Pl.: publicstaticfinal int TOMEG = 10; • elérése: publicclass Ember { publicstaticfinalbooleanFERFI=true; } … //elérés az osztályon kívülről: Ember.FERFI

  18. Getter és setter metódusok • az adattagok későbbi (konstruálás utáni) beállítására (setter) illetve lekérdezésére (getter) szolgálnak • elnevezésre vonatkozó szabályok: • getter: getAdattagNeve • setter: setAdattagNeve

  19. Példa getter/setter metódusokra • az Alma osztály tömeg adattagjához tartozó getter és setter: public int getTomeg(){ return tomeg; } public void setTomeg(int ujTomeg){ tomeg = ujTomeg; }

  20. Példa getter/setter metódusokra • A Kutya osztály fajtiszta adattagjához tartozó getter és setter (az adattag logikai típusú): public boolean isFajtiszta(){ return fajtiszta; } public void setFajtiszta(boolean fajtiszta){ this.fajtiszta = fajtiszta; }

  21. This kulcsszó • hivatkozás az aktuális objektumra • mikor használjuk? • ha egy metódus formális paraméterének neve megegyezik egy attribútum nevével • Pl.: public Pont(int x, int y) { this.x = x; this.y = y; }

  22. Garbagecollection • Objektumok élete Javában: • heap-en keletkeznek (ellentétben a primitív típusokkal) • létrehozás (new kulcsszó) • Felszabadítás: automatikus, a garbage collector (szemétgyűjtő) végzi • null kulcsszó: azt jelöli, hogy az adott referencia nincs beállítva semmilyen objektumra

  23. Példa Pont p1 = new Pont(6, 15); Pont p2 = new Pont(); ... p1 = null; … P2 = null;

  24. Objektumorientáltság, OO paradigma • egységbezárás és információ elrejtése (absztrakt adattípus) • adatok és a rajtuk végzett műveletek egységbezárása  osztályok írása • öröklődés • polimorfizmus (többalakúság)

  25. Példaprogram • Ember.java (pub) • Alma.java (honlapom) • PrivatEmber.java (pub, 5. hétnél) • PEMain.java (pub, 5. hétnél)

  26. Gyakorló feladatok • pub: feladat.txt (4. gyakorlat könyvtára)

  27. Szorgalmi feladat • szerda éjfélig küldhető el 2 pluszpontért nekem e-mailben • feladat: • Írj olyan osztályt, ami egy szobát reprezentál, a szobáról legyen eltárolva a területe és a belmagassága. • Írj paraméteres konstruktort, ami a mezőket inicializálja. • Írj getter és setter metódusokat az adattagokhoz. • Írj az órai minta alapján „info” metódust a Szoba osztályhoz. • Írj újabb osztályt, ami futtatható, és a parancssori paramétereknek megfelelően létrehoz egy objektumot a Szoba osztályból.

  28. Szorgalmi feladat • Pl.: java Szoba 15 2  15 m2 területű, 2 m belmagasságú szobát hozunk létre • Emellett a futtatható osztályban hozz létre egy „lakas” nevű tömböt is, ami 10 szobát tartalmaz • a 10 szoba területe egy véletlen szám 5 és 15 között, a belmagasságuk pedig 50-50% eséllyel 2 ill. 3 méter • A létrehozott Szoba objektumok jellemzőit az „info” metódus segítségével írasd ki a konzolra.

More Related