Objektumorientált programozás (OOP)¶
Az objektumorientált programozás (angolul Object-Oriented Programming – OOP) egy programozási megközelítés, amely objektumok használatán alapul. Ezek az objektumok adatokat (attribútumokat) és az adatokkal kapcsolatos műveleteket (metódusokat) tartalmazzák.
Az OOP előnye, hogy segíti a programokat átláthatóbbá, újrafelhasználhatóvá és könnyen karbantarthatóvá tenni.
Alapfogalmak¶
- Osztály (class): Tervrajz vagy sablon, ami alapján objektumokat hozunk létre.
- Objektum (példány): Az osztály konkrét példánya, amely rendelkezik a tervben megadott tulajdonságokkal.
- Attribútum: Az objektum tulajdonsága (például név, életkor, szín).
- Metódus: Az objektum által végrehajtható művelet (például fut, beszél).
- Konstruktor: Egy speciális metódus, ami automatikusan fut le objektum létrehozásakor.
- Öröklődés: Egy új osztály létrehozása egy meglévő alapján, ahol az új osztály átveszi az eredeti tulajdonságait és metódusait.
- UML diagram: Egy grafikus ábra, ami bemutatja az osztályok közötti kapcsolatokat és struktúrákat.
UML diagram¶
Az UML (Unified Modeling Language) diagramok segítenek az osztályok és objektumok közötti kapcsolatok vizuális ábrázolásában. Az UML diagramok különböző típusai léteznek, de a leggyakoribb a class diagram (osztálydiagram), amely az osztályok közötti kapcsolatokat mutatja be. Az osztálydiagramok általában a következő elemeket tartalmazzák:
- Osztályok nevei
- Attribútumok nevei és típusai
- Metódusok nevei és típusai
---
title: UML diagram
---
classDiagram
class Kutya {
+String attributum1
+String attributum2
+metodus1()
+metodus2()
}
Példa¶
Vegyük például a kutyákat!
Képzeljük el a kutyákat:
- Osztály:
Kutya
- Attribútumok:
nev
,szin
,eletkor
- Metódusok:
ugat()
,fut()
Az osztályhoz tartozó UML diagram:
---
title: UML diagram
---
classDiagram
class Kutya {
+String nev
+String szin
+Int eletkor
+ugat()
+fut()
}
Python megvalósítás¶
Osztály létrehozása¶
Osztály létrehozásához használd a class
kulcsszót:
Objektum létrehozása, példányosítása:
Metódusok¶
Konstruktor¶
A fenti példák osztályok és objektumok a legegyszerűbb formájukban, és nem igazán hasznosak a valós alkalmazásokban.
Az osztályok jelentésének megértéséhez meg kell értenünk a beépített __init__()
függvényt.
Minden osztálynak van egy __init__()
nevű függvénye, amely mindig végrehajtásra kerül az osztály indításakor.
Használd az __init__()
függvényt, hogy értékeket rendelj az objektum tulajdonságaihoz, vagy más műveleteket, amelyeket az objektum létrehozásakor kell elvégezni:
Megjegyzés
Az __init__()
függvény automatikusan meghívásra kerül minden alkalommal, amikor az osztályt új objektum létrehozására használják.
str metódus¶
Az __str__()
metódus meghatározza, hogy az objektum hogyan jelenik meg, amikor az print()
függvényt használják rá.
Próbáljuk ki a fenti példát, hogy most mi jelenik meg!
Az előzőekben megjelent az objektum memóriacíme, de mi szeretnénk, ha az objektumunk tartalma jelenne meg.
Ehhez használjuk az __str__()
metódust:
Saját metódusok¶
Az objektumok metódusokat is tartalmazhatnak. Az objektumokban lévő metódusok az objektumhoz tartozó függvények.
Hozzunk létre egy metódust a Person
osztályban:
Megjegyzés
A self
paraméter az osztály aktuális példányára való hivatkozás, és az osztályhoz tartozó változók elérésére szolgál.
Attribútum¶
Az objektum attribútumának módosítása¶
Az objektumok tulajdonságait így módosíthatod:
Példa
Feladatok¶
Star Wars¶
Tervezés¶
Nyissuk meg a korábbi órákban használt star-wars.csv állományt.
Tervezzünk hozzá egy osztályt! Elsőkén az UML diagramot rajzoljuk meg, majd készítsük el az osztályt!
UML¶
A táblázat (CSV) fejlécéből indulva rajzoljuk meg az osztályt!
---
title: UML diagram
---
classDiagram
class Karakter {
+String nev
+String rend
+String lezerkard
+Int midiklorian
}
Osztály¶
- osztály
- konstruktor
- attribútum
__str__
metódus
Logika¶
Átlagszámítás¶
Adjuk hozzá az előző kódhoz az átlagos midiklorian számítását!
Példa