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: Betölti a használt osztályokat (.class állományok) Az ott található blokkokat, utasításokat értelmezi, átalakítja gépi kódú üzenetekké és futtatja. interpreter és compiler változatok. Optimalizál, ellenőriz. Memóriát kezel, kioszt, felszabadít. Op. rendszerrel kapcsolatot tart, erőforrásokat használ. 2
3
javac *.java 4
java Teszt 5
Osztályok használata Osztályok és objektumok életciklusa osztály betöltése a virtuális gépbe a példányosítás (a referenciák szerepe) az objektum megszüntetése (null referencia és garbage collector ) 6
Egybezártság - adatrejtés Osztályok szerepe az egybezártságban Hozzáférési kategóriák nyilvános tagok félnyilvános tagok védett tagok privát tagok Üzenetküldés 7
Öröklődés A közös ős szerepe Konstruktorok szerepe az öröklődéskor super() this() 8
Többalakúság Változók, referenciák dinamizmusa Metódusok felüldefiniálása (override) az öröklési láncban Metódusok felültöltése (overload) 9
Metódushívás az öröklési láncban Széchenyi István Egyetem 10
Absztrakt osztályok Közös adattípusok. Közös műveletek. Absztrakt (definíció nélküli) műveletek. Csak örökítési célból (az ős ismeri, de nem tudja). Közvetlenül nincs példányosítás, csak a leszármazottakból! 11
A változókról 12
Változók lehetséges szerepkörei Példányváltozó Példányonkénti egyedi tárterület. Kezdőértékkel rendelkezik. Általában a konstruktor inicializálja. Lokális változó Blokk-szintű: (paraméterek, blokkon belüli vált.) Korlátozott hatókör A veremben kap tárhelyet Osztályváltozó 13
Osztályváltozók, osztálymetódusok Az egész osztályra vonatkozó közös tulajdonságok, műveletek static kulcsszó Közös osztályhoz rendelt adatterület (vs. példányváltozó!) public class Alkalmazott{ //osztályváltozó: private static int nyugdijkorhatár = 62; //osztálymetódusok: public static void nyugdijkorhataremel(){ nyugdijkorhatár++; } public static void nyugdijkorhatarcsokk(){nyugdijkorhatár--;} // stb. } 14
Osztályváltozók, osztálymetódusok A main, mint osztálymetódus Speciális szerep: A virtuális gép indításakor megadott osztály betöltése után automatikusan lefut a main. public static void main (String args[]) {...} 15
Konstans értékek kezelése Konstans értékek 'B', 42, 55000l, szövegkonstans, 2.71f Konstans adattagok static final módosító Pl: static final int MAX_ELEMSZAM = 10000; Itt (és csakis itt) megengedett a publikus hozzáférés! 16
Interfészek A Java nyelvben nincs többszörös öröklés Az osztályok általánosítása: Osztály absztrakt osztály interfész Az interfész: konstans értékeket, és metódus deklarációkat tartalmaz. Az objektumoknak küldhető közös üzenetkezelést teszi lehetővé. 17
Interfészek 18
Interfészek Interfészek deklarációja Az interface kulcsszó példa: public interface Interfésznév { public(final static)int KONSTANS = kezdőérték; public (abstract) boolean művelet(); } Jelölési konvenciók: konstans jelölésmód: MAX_ERTEK 19
Interfészek Interfészek megvalósítása Az implements kulcsszó Példa: public class Osztály implements Interfész { } public class Osztály extends Ős implements Interfész { } public class Osztály extends Ős implements Intf1, Intf2 { } Több interfész megvalósítása A többszörös öröklődés helyett Különböző jellegzetességek összekapcsolása (Holdon való járás, kétéltű autók, rendezhető elemek) 20
Az objektum orientáltságról Széchenyi István Egyetem
Az objektumorientált program Egy objektumorientált program egymással kommunikáló objektumok összessége, melyben minden egyes objektumnak jól meghatározott feladatköre van. Az objektumok közötti kommunikációt a szabványos üzenetküldés valósítja meg. A objektumorientált program nem sértheti meg az objektumorientált alapelveket.
Üzenetküldés objektumok között Széchenyi István Egyetem 1. objektum: Egy ember Pisti:Ember 2. egy gépjármű pistiautója:gépjármű 3. egy forgalomirányító lámpa lámpa12:forgalomirányító
Üzenetküldés objektumok Széchenyi István Egyetem között 1. lépés: megállás a pirosnál pistiautója:gépjármű 3 Pisti:Ember lámpa12:forgalomirányító lámpa12.milyenszínű?() 1 pistiautója.állórafékez() piros 2
Üzenetküldés objektumok Széchenyi István Egyetem között 1. lépés: megállás a pirosnál pistiautója:gépjármű Pisti:Ember lámpa12:forgalomirányító lámpa12.milyenszínű?() 2. lépés: várakozás pistiautója.állórafékez() 6 alapjárat() piros milyenszínű?() piros 5 4
Üzenetküldés objektumok Széchenyi István Egyetem között 1. lépés: megállás a pirosnál pistiautója:gépjármű Pisti:Ember lámpa12:forgalomirányító lámpa12.milyenszínű?() pistiautója.állórafékez() piros 2. lépés: várakozás alapjárat() milyenszínű?() piros 3. lépés: indulás zöld jelzésre 9 milyenszínű?() 7 indul() zöld 8
Osztályok és objektumok Széchenyi István Egyetem együttműködése, kapcsolatai Hierarchikus kapcsolatokkal nem minden probléma írható le. Az objektumokat valahogy össze kell kapcsolni egymással: ismertségi kapcsolatok, tartalmazási kapcsolatok, üzenetküldés. Kapcsolatok értelmezése objektum és osztály szinten.
Köszönöm a figyelmet! Széchenyi István Egyetem