Laikusként oop -ben a "class" nekem olybá tűnik, mint általában a függvények a procedurális prg-ozásban. Mi a fő eltérés?
Néztem oktatóvideókat az oop-ről, mivel nem értek hozzá, ezért kérdezném, mi a fő eltérés az oop és a procedurális programozás között?
Első blikkre elég hasonlónak látszik a kettő, az oop-ban a class olyasminek látszik számomra egyelőre, mintha függvény volna, amit átvehetnek az objektumok. Kb ezt csináljuk a procedurálisban is, nemde? Vagy van valami lényegi eltérés a kétfajta megközelítés között?
Nem. Egy osztály lényege, hogy egységbe be zár adato(ka)t és a hozzájuk tartozó eljárásokat, metódusokat.
Vagyis egy osztály számtalan eljárást tartalmazhat.
Ha arra vagy kíváncsi, mi a különbség: pricesurális programozásnál a programot parancsok soraként írom meg, változókkal, feltételekkel, elágozásokkal, ciklusokkal stb.
OOP-nél az objektumokkal, osztályokkal való műveletek, illetve az obkektumok egymás közötti kommunkációjában van megvalósítva az egész. Megjegyzem, az OOP is rendszerint tartalmaz procedurális megoldásokat.
"mivel nem értek hozzá, ezért kérdezném, mi a fő eltérés az oop és a procedurális programozás között?"
Mi lenne ha előbb megpróbálnád megérteni az OOP lényegét mielőtt "laikusként" teljesen baromságokon kezdesz el filozofálni?
Ahogy előttem már írták, az OOP lényege az encapsulation, magyarul: egységbe zárás.
Bizonyos, összetartozó adatokat (adat) és a rajtuk végzett műveleteket (függvény) egységként kezeljük, ez az osztály.
A másik lényege az OOP-nek a prototípus gyártás és a példányosítás lehetősége, amivel sok időt meg lehet spórolni. Ennek csírája ugyan megjelent a procedurális programozásban is, de nem volt ennyire rugalmas, nem lehetett kihasználni a lehetőséget például futásidőben sem. Az OOP viszont ezt biztosítja.
Összességében az OOP azért előnyös, mert a fejlesztés során a legtöbb problémát az okozza, hogy a jó kód közé bekerül a rossz is és procedurális paradigma szerint írt kódból a hibákat nehéz kiszűrni.
Viszont az OOP az osztály hierarchiával, azt egységbe zárással ennek a gondnak a kezelésére jó lehetőséget nyújt.
Bár rég nem foglalkoztam már ezzel és lehet ez nem lesz új, inkább csak kicsit más megfogalmazása a fentebb elhangzottaknak.
Ha van egy osztályod már, akkor anélkül hogy az átírnád, új osztályba emelheted és ott átírhatod, ami nem tetszik letilthatod belőle. Sőt akár több osztályt is össze lehet olvasztani eggyé kb mintha a nyomtató és szkennerből lenne egy multifunkciós géped.
Szóval átláthatóság, újrafelhasználhatóság is nagy előnye.
Vegyünk egy példát. Legyen egy class, aminek magyarosan az a neve, hogy Szamurály. Ezt ugye példányosítani kell "new" kulcs szóval, vagy az adott nyelv szerint.
Milye lehet a Szamurálynak? Legyen például: élete, támadó pontja, fáradsága. Ezeket feltudod venni 1-1 osztály szintű változóiba azaz attribútumai közé.
Tehát minden egyes új példánynak (amit a new-val csinálsz) külön-külön lesz ilyen értéket. Azaz 3x new, akkor 3 Szamurályod lesz.
A Szamurály class-ba felvehetsz függvényeket/metódusokat, hogy mit tegyen az a Szamurály. Ezekben a metódusokban this-el (vagy az adott nyelv szerinti móddal) éred el az aktuális (futás időben) Szamurályod saját attribútumait.
Tegyük fel, hogy az egyik szamurály megsebzi a másikat. Skiccelek egy kódot:
function void attackBy(Szamurály enemy) {
... this.hp - enemy.getAttackPoint();
}
Tehát egy:
var szamurály1 = new Szamurály()
var szamurály2 = new Szamurály()
samurály1.attackBy(szamurály2);
Azt eredményezi, hogy az 1-esnek kevesebb élet pontja lesz, mint a 2-esnek.
Persze bevezethető kard távolság vagy egy "térképen" helyezzük el ezeket a Szamurályokat és különböző feltételek bentén támadhatnak csak egymásra.
Ez volt a játék része, de gyakorlatban munka világában különböző felelősségeket társítunk hozzá. Minden class célzottan egy feladattal foglalkozzon. Ez nem azt jelenti, hogy egyetlen metódusa lehet csak. Pl. Egy felhasználó regisztrációra is számos ilyet lehet írni.
Azaz 1 class ami fogadja a kéréset (jellemzően XxxxController a neve), 1 class ami felhasználókat menedzselést végzi, hogy létezik-e már ilyen, menti az újat, stb.., de neki nem felelőssége az SQL kérések kezelése (csak az "üzleti logika"), az SQL-re van egy másik class (ami jellemzően XxxxRepository).
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!