Mi az a metódus (ha lehet példákkal)?
Általánosságban lehet egy függvény is akár, de a kifejezést az objektumokkal, osztályokkal kapcsolatban szokták használni. Ilyen értelemben olyan eljárás vagy függvény, ami egy osztályhoz, illetve az abból létrehozott objektumhoz kapcsolódik, annak valamilyen viselkedését, feladatát, műveletét valósítja meg.
Például:
Van egy olyan osztály, hogy Macska. Ennek vannak adatai (attribútumai) és eljárásai (metódusai). Pl. az adatai, hogy éhes-e, jókedvű-e, stb., a metódusai meg hogy Eszik, Nyávog, stb. Ezeket a metódusokat meg lehet akár kívülről is hívni, ezt néha úgy mondjuk, hogy megszólítjuk az objektumot. Pl.
Macska macska1; // létrehoztunk egy macska példányt
macska1.Nyavog(); // azt kérjük ettől az objektumtól, hogy nyávogjon
Itt a Macska osztály Nyavog() metódusát hívtuk meg a macska1 objektumra. Egyszerűbben: a macska1 objektum Nyavog() metódusát hívtuk meg.
...Igazából az egész a való életből indul ki. Ha veszünk egy objektumot (ház, ember, akármi), akkor két dolgot "tud":
- vannak tulajdonságai (->adatok)
- csinálni tud valamit (->metódusok)
Ez a megközelítés van megvalósítva az objektum-orientált programozásban. A metódus az, amit az objektum csinál, vagy éppen elszenved. (Pl. egy ember sétál, vagy egy ház összedől, stb.)
Egy osztály részét képező függvény. A függvény meg egy olyan valami, amely végrehajt neked valamilyen részfeladatot. A függvénynek lehet bemenete (paraméterek), illetve visszatérési értéke is (pl. visszaad egy létrehozott objektumot, vagy akár eggy mezei stringet).
Kicsit hasonlóak a matematikai függvényekhez, de annál tágabb a jelentése.
Egy osztály egy olyan leírás, ami az összetartozó adatokat, és viselkedéseket zárja logikai egységbe. Ha ezt példányosítjuk objektummá, akkor meghívhatjuk az objektum egy metódusát. Több nyelvben léteznek osztályszintű (példányosítás nélkül is használható) metódusok, ezek vagy függetlenek a példányok adataitól (pl. Date.Now(): jelenlegi rendszeridő lekérdezése), vagy több példányt is érint a viselkedés (pl. MyClass.novelPeldanyDb: a MyClass példányok számát tartjuk vele számon).
Nem tudom mennyire mennek az alapok. Ha valami nem világos, kicsit pontosíts a kérdésen.
Képzelj el egy flipper játékautomatát. Ez egy objektum, mondjuk a Flipper nevű osztály egy példánya.
Ennek vannak adatai, pl. pontszám, játékos neve, golyó fizikai adatai, stb.
És van két nyomógombja, ezekkel lehet rábírni a nekünk tetsző működésre. A két nyomógomb olyan, mintha az objektum metódusai lennének. Ha ez egy szoftveres flipper játék lenne, akkor a két nyomógomb mögött két (de lehet, hogy egy) függvény lenne, ami a szükséges teendőket elvégzi, pl. a golyó mozgását megváltoztatja.
Maga a függvény minden egyes flipperben ugyanúgy működik, vagyis a golyó helyzetétől, sebességétől függően adott változást idéz elő. Ez azt jelenti, hogy a függvény osztály-szinten van definiálva, minden flipper játéknál ugyanaz a függvény fut le, ha nyomjuk a gombot.
Persze minden játékban máshol lesz a golyó, vagyis a függvénynek tudnia kell, melyik flipper golyójával kell számolnia, melyik játék golyóját kell módosítania. Ezért írtam feljebb, hogy az osztály metódusát hívjuk az adott objektumra. Az adatok minden objektumban mások lehetnek, de a velük dolgozó metódusok közösek. (Lásd: self, this, stb. nevű paraméter. Ez mondja meg a metódusnak, hogy éppen melyik objektum adataival kell dolgoznia.)
A "flipper-gomb" metódus viszont nem tud másmilyen objektummal dolgozni, pl. nem tud mit kezdeni egy tűzőgéppel vagy egy kávéautomatával. A metódusok szorosan kapcsolódnak az adott osztályhoz, egy adott típusú (osztályú) objektummal tudnak csak dolgozni.
---
Nagyon-nagyon lebutítva, pl. ez egy osztály:
adatok: {egész, egész}
metódusok:
- init(egész, egész)
- dupláz-összead() -> egész
A dupláz-összead metódus mondjuk megduplázza a két adatát külön, összeadja az eredményt, és az eredményt adja vissza. Amikor ezt példányosítjuk, akkor átadunk az init-nek (vagy valami konstruktornak) két számot (pl. 1, 2), és létrejön az objektum a memóriában:
{1, 2}
A memóriában az objektumok csak adatokból állnak, a metódusaik külön, egyszer szerepelnek osztály szinten.
Amikor meghívjuk a dupláz-összead metódusát, akkor ezen az objektumon fog dolgozni:
dupláz-összead( objektum mutató )
Viszont ez csak ilyen objektumokat ismer, ilyen osztályú objektumokhoz tartozik, ezeknek a metódusa. Más osztályú objektumra nem hívható meg. (Illetve meghívható, de most ne bonyolítsuk.)
Ha még van kérdés, tedd fel bátran.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!