OOP példa

No tehát, egy objektumot úgy kell elképzelni, mint adatok (változók) - szép néven tulajdonságok, vagy attribútumok - és műveletek (metódusok) összességét egy nagy dobozban.

Objektum = attribútumok + metódusok
Autó = szín, sebesség, ... + indulj, fordulj

Mivel a Java OOP-s, ezért eleve sok ilyennel találkozunk, kezdjük is rögvest a szöveg-típusú változókkal, vagy ahogy ezt itt hívjuk, a stringekkel!

Az alábbi programban csináltam egy stringet, és adtam neki egy kezdőértéket. Eddig tök olyan, mint bármely más változó, mint pld. az int, nem? Csak annyi a különbség, hogy Nagybetűs a típusa, tehát String és nem string. (Ennek a Nagybetűs dolognak mágikus jelentősége van, amire később visszatérünk!)

A String egy osztály

Na és ott a sok System.out.println-el mindenféle dolgokat íratok ki? Huhh? Mi ez a .length és a többi?

Nem kell megijedni. Ez az írásmód azt jeletni, hogy a name változónak (objektumnak) a length metódusát (függvényét) kell meghívni, és amit ez ad vissza, azt fogja a System.out.println kiírni.

A length jelentése az, hogy hossz, így a name.length() megmondja, hogy pontosan hány betűből is áll a string. A Console nézetben látszik is, hogy 11!

Vajon mit csinál a substring(0,5)? Ez egy kis darabkát szed elő a stringből, mégpedig a nulladik (ez a legelső betű, csak itt mindent nullától számoznak) betűjétől kezdve az 5. betűjéig - ebből lesz a "Gipsz" a konzol nézetben.

A harmadik meg meghívja a toString() metódust, ez egyszerűen egy stringet ad vissza, ami nem más, mint a string tartalma.

Tehát a member-operátor (azaz a pont műveleti jel) segítségével hozzáférhetünk az objektumban lévő dolgokhoz. Ez a dolga - a member-operátor azt jelenti, hogy valakinek a valamije (attribútuma vagy metódusa), például a "stringünknek a hossza".

Osztályok és példányok

Jajj. Megint új szavak. Egy objektum példánya a valóságban az, amit meg tudsz fogni. Például az autónak van négy példány kereke.

Az osztály szó pedig itt nem azt jelenti, hogy hanyadikos valaki. Ez eredileg azt jelenti, hogy valami szempontból hasonló dolgok gyűjteménye, például a húsételek osztálya tartalmazza a téliszalámit és a parízert is. Nyilván az azonos korú, egy terembe járó kölykök gűjteménye is egy osztály...

...No de ennek még semmi köze a mi osztályainkhoz. A mi osztályaink olyanok, mint az autógyárban a tervek. A példányok pedig mint a legyártott részegységek.

Például:

A szerencsénk az, hogy a Javaban nem kell nyersanyag a gyártáshoz. Ha akarunk 100, 1000 Stringet is gyárthatunk.

Mi az hogy objektum?

Amikor csak azt mondjuk, hogy "objektum" akkor általában egy objektum-példányra gondolunk (vagy néha egy objektum-osztályra). Egészen pontosan úgy kellene mondani, hogy objektum osztály, meg objektum példány.

Hol az osztály?

Egy objektum-osztály az a kód, amit mi elkészítünk (vagy más készített el). Jelen esetben ez a String osztály, amit a Java készítői csináltak nekünk.

Hol a példány?

Egy objektum-példány az amit mi létrehozunk az osztály alapján. Jelen esetben ez a name változó, ami az értékadással (name="Gipsz Jakab") jött létre. A name az egy String példány.

Miért jók az osztályok és példányok?

Mert ha már egyszer egy osztály elkészült, akkor tetszőleges számú példányt lehet belőle készíteni, és ezek a példányok egymástól függetlenül léteznek.

Például, ha egy Jaguárt tudunk gyártani, akkor tudunk gyártani 12-őt is, és mindegyik lehet éppen máshol, éppen más sebességgel közlekedve. Ha 1-et tudunk, akkor bármennyit tudunk.

Ha egy String-et tudunk gyártani, akkor bármennyit tudunk, és innentől nem kell 100x leprogramozni a length() metódust a 100 stringhez. Lehet 100 különféle stringünk, és ezek tartalmazhatnak más szövegeket, és mégis mindegyiknek értelmesen működik a length() metódusa.

A következő részben fogunk is csinálni egy OOP-s programot, ami elég bonyolult ahhoz, hogy nem OOP módszerekkel igencsak meggondolnánk, hogy egyáltalán megcsinálható-e.

Osztály és példány

A Java programozáskor - pont mint a valódi életben - objektum példányok használatával épül fel a programunk. Ha valami új objektumra van szükség, akkor megírjuk annak az osztályát - pont, mint amikor egy mérnök megtervez egy új terméket a való életben.

Az objektumokkal könnyen lehet kódot újrahasznosítani: olyan, mintha egy kifogyhatatlan gyárunk lenne, ami bármiből bármennyit legyárt nekünk - bármelyik osztályból bármennyi példányt.