Ez a dokumentum egy előző változata!
Itt csak egy rövid összefoglalót találunk az objektum orientált programozásról. A objektum orientált programok konkrét megvalósítását lásd az adott programozási nyelvnél.
Az angol Object-Oriented programming szavakból alkotott betűszó, röviden OOP. A valós világot próbálja modellezni. A műveletek megalkotása helyett objektum hierarchiákat hozunk létre.
Az egyes nyelvekhez tartozó Objektum Orientált megvalósításokat lásd a konkrét nyelveknél, itt csak rövid áttekintést találunk.
Angolul class. Egy egyed leírása, amiről információkat tárolunk. Ez az információ a programozási nyelvben változókat, és a változókon elvégzett műveletekből (eljárás, metódus) áll.
Felépíthetjük például a Dolgozók osztályát. A dolgozónak tulajdonságai, amelyet egy változóban tárolhatunk, például a neve, kora, születésének ideje, fizetése, stb. A metódusok, beállíthatják, lekérdezhetik a nevet, a születést, vagy meghatározhatják az osztály egyéb viselkedését.
Azt is mondhatjuk az osztály az objektum terve.
A mező tulajdonképpen az osztály változói. Tulajdonságoknak is szoktuk nevezni, bár a C# nyel külön tartalmaz ún. tulajdonság létrehozási lehetőséget, így ott a „tulajdonság” szónak más jelentése is van.
A mezőkön végrehajtható eljárások és függvények összefoglaló neve. A osztály viselkedésének is mondjuk.
Osztályt általában a class kulcsszóval vezetjük be, utána pedig a nevét adjuk meg.
class Szemely { String nev; int kor; }
A mezők és a metódusok alkotják az osztály tagjait.
A konstruktor egy speciális metódus. Speciális mivel megegyezik az osztály nevével. Nem lehet visszatérési értéke.
Konstruktor Java és C# nyelven:
class Szemely { public String nev; public int kor; public Szemely() { this.nev = "névtelen"; this.kor = -1; } }
A konstruktor mindig akkor fut le, amikor egy objektumot létrehozunk.
Némely nyelvben van destruktor is. A destruktor akkor hajtódik végre, ha valamilyen objektumot megszüntetünk.
A Java nyelvben nem használunk destruktort.
A programozási nyelvekben általában a destruktor neve is megegyezik az osztály nevével, de egy ~ karaktert szokás elé tenni.
Egy osztályból egy példányosított változata.
A fenti Dolgozó osztályból ha egy példányt hozunk létre, az már egy konkrét dolgozó lesz. Lehet például egy „Nagy József” nevű dolgozó, aki 28 éves, 480000 - Ft a fizetése. Az objektumnak is adnunk kell egy nevet. Például Joska.
Példa Java és C# nyelven:
Dolgozo janos = new Dolgozo();
Az objektumot az osztályból hozzuk létre. Olyan ez mint egy változó létrehozása. Az egyenlőség jel jobboldalán a new kulcsszó való az objektum példány létrehozására. A new után mindig a konstruktort hívjuk.
Az osztály egyes tagjai (változók és metódusok) elérése változtatható.
Egy osztályból újabb osztályt hozhatunk létre, ennek folyamatát nevezzük öröklésnek. Az öröklés során az új osztály örökli az előző minden tagját, beleértve a mezőket és a metódusokat.
Öröklés Java nyelven:
class Szemely { String nev; int kor; } class Dolgozo extends Szemely { String munkakor; }
Öröklés C# nyelven:
class Szemely { public String nev; public int kor; } class Dolgozo : Szemely { String munkakor; }
A metódusok és a konstruktorok több alakban is meghívhatók. Ezt a tulajdonságot nevezzük többalakúságnak.
Egy metódus akkor virtuális, ha az örökölt osztályokban felülírható. A programozási nyelvekben ezt az ősosztályban kell beállítani, általában a virtual kulcsszóval. A Java nyelvben nem szükséges ezt megtenni, mivel minden metódus alapértelmezettként felülírható, vagyis virtuális.
De pascal nyelven például:
point = Object(location) visible: boolean; Constructor Init(InitX, InitY: integer); Procedure Show; Virtual; Procedure Hide; Virtual; Function IsVisible: boolean; Procedure MoveTo(NextX, NextY: integer); End;
Vegyük észre a Virtual kulcsszót a Show és a Hide eljárásnál.
Készítsen egy osztályt, amely járművek rendszámát és kivitelét tárolja. A járművek a következő kivitelűek lehetnek: buggi, cabrio, coupe, egyteru, ferdehatu, hot rod, kisbusz, kombi, lépcsős hátú, moped, pickup, sedan, sport, terepjáró. Írja meg azokat a metódusokat, amelyek lekérdezik, illetve beállítják a két mező értékét. A programban vegyen fel egy példajárművet, majd határozza meg a rendszámát, és a kivitelét, majd írassa a képernyőre a kivitelt.
class Jarmu { //Mezők private String rendszam; private JarmuKivitel kivitel; //Metódusok public String lekerRendszam() { return this.rendszam; } public void beallitRendszam(String atvettRendszam) { this.rendszam = atvettRendszam; } public JarmuKivitel lekerKivitel() { return this.kivitel; } public void beallitKivitel(JarmuKivitel atvettKivitel) { this.kivitel = atvettKivitel; } } enum JarmuKivitel { BUGGI, CABRIO, COUPE, EGYTERU, FERDEHATU, HOT_ROD, KISBUSZ, KOMBI, LEPCSOSHATU, MOPED, PICKUP, SEDAN, SPORT, TEREPJARO } public class Program01 { public static void main (String[] args) { Jarmu jarmu = new Jarmu(); jarmu.beallitRendszam("ABC-123"); jarmu.beallitKivitel(JarmuKivitel.MOPED); System.out.println("Példa jarmu: " + jarmu.lekerKivitel() ); } }
Ingatlanok adatait szeretnénk nyilvántartani. Ehhez kell egy osztályt elkészítenie.
Mit kell tárolni? Eladó vagy kiadó az ingatlan? Ár, alapterület, szobák száma, típus: tégla, panel, csúsztatott zsalus. Emeletek: mi felett? Szuterén, földszint, félemelet, 1,2 ..10, 10 felett Lift: van vagy nincs. Erkély: van vagy nincs. Állapot: beköltözhető, építés alatt, új építésű, újszerű, felújított, közepes állapotú, felújítandó, jó állapotú Fűtés: gáz (cirko), gáz (konvektor), gáz (héra), távfűtés, távfűtés egyedi méréssel, elektromos, házközponti, házközponti egyedi méréssel, fan-coil, geotermikus, cserépkályha, egyéb. Komfort: luxos, duplakomfortos, összkomfortos, komfortos, félkomfortos, komfort nélküli.
Lehetséges Java megoldás:
enum Status { ELADO, KIADO } enum Tipus { TEGLA, PANEL, ZSALUS} enum EmeletFelett { SZUTEREN, FOLDSZINT, FELEMELET, EGY, KETTO, HAROM, NEGY, OT, HAT, HET, NYOLC, KILENC, TIZ, TIZ_FELETT } enum Allapot { BEKOLTOZHETO, EPITES_ALATT, UJ_EPITESU, UJSZERU, FELUJITOTT, KOZEPES, FELUJITANDO, JO } enum Futes { GAZ_CIRKO, GAZ_KONVEKTOR, GAZ_HERA, TAVFUTES, TAVFUTES_EGYEDI, HAZKOZPONTI, HAZKOZPONTI_EGYEDI, FAN-COIL, GEOTERMIKUS, CSEREPKALYHA, EGYEB } enum Komfort { LUXUS, DUPLA, OSSZ, NORMAL, FEL, NINCS } class Ingatlan { Status status; double ar; int alapterulet; int szobakSzama; Tipus tipus; EmeletFelett emeletFelett; Allapot allapot; Futes futes; Komfort komfort; } public class Program01 { public static void main (String[] args) { System.out.println("Hi"); } }
Nagy József | egy objektum |
József születési adat | tulajdonság |
Jóska ehet, ihat, alhat, beszélhet stb. | metódus |
Jóska a programozók egy példánya | osztály |
Jóska egy másik objektumon alapszik, amit programozóknak hívnak | prototípus |
Jóska megtartja magának a jogot, hogy kiszámítsa életkorát a születési adatok alapján. | egységbezárás |
Nem szükséges ismerni, hogy számítjuk ki Jóska életkorát. | információs rejtés |
Jóska a fejlesztői csapat része, amelybe beletartozik Mari grafikus és Kati nyelvész | Absztrakció |
Jóska, Mari és Kati a személy objektumon alapszik. | Öröklés |
Mindenki beszél, de mindenki mást mond: Jóska:beszél, Mari:beszél, Kati:beszél | többalakúság |