Az Objektumorientált programozás (angolul: Object-Oriented programming, OOP) lényege, hogy a számítógépes programokat „objektumok” logikus rendszeréből építjük fel. Ezek tulajdonképpen egy adott feladat elvégzéséhez szükséges kódrészletek, amiknek lehetőségük van egymással együttműködni.

Az objektumorientált programozás építőelemei

Osztály (Class)

Tartalmazza, hogy az adott osztály képviselői milyen tulajdonságokkal bírnak, milyen képességekkel, eljárásokkal rendelkeznek. Például a Kutya osztály definiálja, hogy mi vonatkozik minden kutyára: van bunda_szín-e, és képes ugatni.

Objektum (Object)

Egy osztály tagja. Rendelkezik az osztály tulajdonságaival, képességeivel. Pl: Lassie egy bizonyos kutya.

Eljárás (Method)

Az objektum képességei. Lassie mint Kutya osztály leszármazottja, képes ugatni. Így az Ugatás() Lassie eljárása. Egy eljárás az adott objektumra vonatkozik, tehát ha Lassie-t utasítjuk, nem fog az összes kutya ugatni, csak ő (annak ellenére, hogy a többiek is képesek rá).

Alosztály (Subclass)

Egy másik osztályból származtatott osztály. Rendelkezik az eredeti képességeivel, és külön definiáltakkal (örökli azokat). Pl: a Skót juhász a Kutya alosztálya, ami egy közelebbi leírása több objektumnak. A skót juhászok hosszú szőrűek, de mondjuk a Tacskók nem. Ha Lassie a skót juhász osztály tagja, adott a hosszú szőre. :D

Ez az egész kutyásdi PHP nyelven:

class bunda { //a bundát külön definiáljuk, mert a leopárdnak is van, nem csak a kutyának
	public $szin; //a bunda egyik tulajdonsága a szín
	public $hosszuszoru; //a másik, hogy hosszú szőrű-e
	public $teli = true; //a téli bunda az alapértelmezett
}
class kutya { //kutya osztály definiálása
	public $kbunda; //a kutyának van bundája (kbunda, hogy ne ütközzön az osztály nevével)
	function kutya() { //amikor a kutya világra jön...
		$this -> kbunda = new bunda();  //akkor kapja meg a bundát
	}
	function ugat() { //a kutya tud ugatni
		echo('Vau!'); //ide az jön, hogy hogyan is kell ugatnia a kutyának
	}
}
class skot_juhasz extends kutya { //a skót juhász is csak egy kutya
	function skot_juhasz(){ //születésekor...
		parent::kutya(); //...egy kutya születik...
		$this -> kbunda -> szin = 'barna'; //...barna színű bundával...
		$this -> kbunda -> hosszuszoru = true; //...és hosszú szőrrel
	}
}
 
$lassie = new skot_juhasz; //most létrehozzuk a skót juhász Lassie-t, akinek hosszú, barna szőre van
$lassie -> kbunda -> teli = false; //kitavaszodott, Lassie levedlette a téli bundáját
$lassie -> ugat(); //és ennek örömére ugat :)

OOP nyelvek

Néhány példa objektumorientált programnyelvekre:

  • REALbasic
  • PHP
  • JavaScript
  • Visual Basic
  • C++

VITA

1. Osztály definíciójában nem igazán szerencsés a „képesség”ekre utalás. Egy almának semmilyen képessége nincs, mégis le lehet szedni a fáról, meg lehet pucolni, ki lehet csumázni. Ezek mind az alma osztály egy-egy metódusai lennének. Inkább arról van szó, hogy tulajdonságokat és az azokon végezhető műveleteket zárja egységbe egy osztály. (Az ugatás ilyen megközelítésben tehát az, hogy mozgassuk a száját és adjunk ki hangot. Egy másik metódus, hogy őrizze a házat: járjon fel-alá és néha morogjon ha lát egy macskát… Persze ehhez macska osztálynak is kéne lennie, akik viszont állatok. Így az ős az állat (vagy emlős)… Stb…)

2. Az OO paradigmát és alapelveit mindenképpen említeni kellene. (Absztrakció, egységbezárás, adatrejtés, öröklés, többalakúság, kódújrafelhasználás).

3. Az alosztály kifejezés nem annyira szerencsés (öröklés: leszármazott↔ős), a „képviselő” (delegált!) viszont egészen más jelent az OO nyelvekben, így az osztálynál ezt a szót kerülni kellene.

4. Megjegyzendő továbbá, hogy az OOp miért jó, és miért nem (vö. Neumann-elv)

5. A kutyás példa jópofa, bár a bunda, mint külön osztály kicsit mellbevágó. Azt sugalja, hogy a való életben is a bundát csak úgy feltolják az állatra… :) (Ebből a szempontból a php nem túl erős nyelv. C#,VB példa?) [konczy]


Egy ide (is) vonatkozó link: http://staff.kzs.hu/tamas/programozas/Prgm%F3dsz.htm Esetleg fel lehet használni belóle valamit…

Esetleg a fenti megjegyzések szellemében kicsit alakítani…? [bb]

oktatas/informatika/programozas/oop.txt · Utolsó módosítás: 2019/06/04 14:21 szerkesztette: barnkopf
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0