Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

OOP és Python Vincellér Zoltán.

Hasonló előadás


Az előadások a következő témára: "OOP és Python Vincellér Zoltán."— Előadás másolata:

1 OOP és Python Vincellér Zoltán

2 Object Oriented Programming
Python rengeteg különböző fajta adatot támogat: Mindegyik egy objektum, és mindegyiknek van: Típusa Belső (adat)reprezentációja (egyszerű vagy összetett) Procedúrák halmaza, amely leírja az interakcióit további objektumokkal Az objektum egy típus példánya 1234 az int példánya „hello” a string egy példánya

3 OOP Pythonban minden objektum (és típusa is van) Lehet:
létrehozni valamilyen típusból új objektumokat manipulálni meglévő objektumokat törölni objektumokat: explicit módon a del használatával vagy ”csak megfeledkezni” róluk, majd a Python megoldja (garbage collection)

4 Mik az objektumok? Adat absztrakciók, amiben rögzíthető:
egy belső reprezentációk adat attribútumokon keresztül egy interfész további objektumokkal való interakcióhoz metódusok (procedúrák/függvények) meghatározzák a működést, de elrejtik az imlementációt

5 Példa: [1,2,3,4] lista Hogy reprezentáljuk egy lista belsejét?
Hogyan lehet manipulálni a listákat? Belső reprezentáció maradjon „elfedve” Helyes működést befolyásolhatja ellenkező esetben

6 OOP előnyei Az adatokat egy csomagba csoportosítjuk olyan metódusokkal, amik ezeket az adatokat tudják manipulálni egy jól definiált interfészen keresztül „Divide-and-conquer” alapú fejlesztés minden osztályt külön kell implementálni és tesztelni növeli a modularitást csökkenti a komplexitást Az osztályok könnyítik a a kódok „újrafelhasználhatóságát” rengeteg Python modul új osztályokat definiál minden osztály szeparált környezettel rendelkezik (azonos fv. nevek nem okoznak gondot) öröklődés lehetővé teszi kiterjesztését vagy épp módosítását az ősosztálya viselkedésének egy bizonyos részén

7 Osztályok Különbség van az osztály létrehozása és az osztály egy példányának használata között: osztályt létrehozni: meghatározni az osztály nevét meghatározni az osztály attribútumait pl.: valaki megírta a kódját egy lista osztálynak felhasználni egy osztályt: új példányokat létrehozni műveleteket végrehajtani a példányon pl.: L = [1,2], len(L)

8 Osztályok definiálása
A class kulcsszó használatával: osztály def osztály neve osztály szülő Hasonlóan a def-nél, megfelelően kell alkalmazni a behúzásokat, hogy jelezzük, a kód mely része tartozik az osztályhoz Az object itt azt jelöli, hogy a Coordinate egy Python objektum és annak minden metódusát örökli szülő/gyerek viszony

9 Mik azok az attribútumok?
Adatok és procedúrák, amik az osztályhoz tartoznak adat attribútum: olyan egyéb objektum(ok), amelyből összeáll az osztály pl.: egy koordináta két számból áll metódusok (procedurális attribútumok): olyan függvények és procedúrák, amik csak ezzel az osztállyal működnek együtt meghatározza, hogyan lehet interakcióba lépni az objektummal pl.: meghatározhatjuk, hogyan szeretnénk kiszámítani két koordináta távolságát, de ez a távolság nem meghatározható két list objektumra

10 Osztály létrehozásának meghatározása
Először meg kell határoznunk, hogy egy osztály létrejöttekor hogy szeretnénk azt inicializálni Speciális metódus: __init__ segítségével az adat attribútumokhoz kezdeti érték rendelhető

11 Osztály példány létrehozni
egy példány adat attribútumait példány változóknak hívjuk a self-re nem kell argumentumot biztosítani, a Python automatikusan megteszi

12 Mi egy metódus? Procedurális attribútumok, egy függvény ami csak az osztályon értelmezhető A Python az első értékként mindig az objektumot küldi konvenció: használjuk a self nevet, minden metódus első argumentumaként A „.” operátor biztosítja bármilyen attribútum elérését: adat attribútum procedurális attribútum

13 Egy metódus definiálása
a self és a . jelölésen kívül a metódusok ugyan úgy működnek, mint a függvények (paraméterek olvasása, műveletek elvégzése, visszatérés)

14 Metódus használata Hagyományos mód: Ekvivalens:

15 Objektum kiírási reprezentációk
Az alap reprezentáció nem informatív __str__ metódus definiálása A Python ezt hívja meg az osztályon a print metódus során Meghatározhatjuk a működését! Pl.: a Coordinate a következőképp jelenjen meg:

16 Saját print metódus

17 Speciális operátorok +, -, ==, <, >, len(), print és még sokan mások Úgy, mint a print esetében, ezeket is felül lehet írni, hogy az osztállyal megfelelően tudjanak működni Kétszeres alsóvonással lehet őket definiálni:

18 Feladat: törtek Készítsünk egy új típust ami a számokat törtként (Fractions) reprezentál A belső reprezentáció két egész szám: számláló (numerator) nevező (denominator) Interfész (azaz metódusok): összeadás, kivonás print, float konvertálás törtszám invertálás

19 Összegzés Összecsomagolni objektumokat, amik:
közös adatokat procedúrákat, amik ezeken az adatokon futnak Használjunk absztrakciót ahhoz, hogy különbséget tudjunk tenni az objektumok implementálása és az objektumok használata között Használjunk öröklődést, hogy reprezentálhassunk különböző absztrakciós rétegeket Készítsünk saját osztályokat, amik a Python alapobjektumait használják

20 Getter és setter metódusok
Getter és setter metódusok az osztályok adat attribútumaiknak elérésére szolgálnak

21 Információ elfedése Az osztály készítője átnevezi az attribútumok változó neveit Ha az osztályok adat attribútumait használjuk, de közben változhat az osztály definíciója Az osztály hatáskörén kívül használjuk a gettereket és settereket jó kódolási design könnyű karbantartani megelőzhetőek bug-ok

22 Python problémái az információ elrejtésben
Engedélyezi az adat attribútumok osztályon kívüli elérését print(a.age) Engedélyezi az adat attribútumok osztályon kívüli írását is! a.age = 'infinity' Engedélyezi új adat attribútumok hozzáadását az osztálydefiníción kívül! a.size = 'tiny’ Ez nagyon rossz kódolási stílus!

23 Alapértelmezett értékek
A formális paraméterekre az alapértelmezett értékek akkor lépnek érvénybe, ha nincs nincs konkrét érték adva metódus hívásakor Példa:

24 Hierarchiák Ősosztály (superclass) Származtatott osztály (subclass)
Minden tulajdonság öröklődik a szülőtől Hozzáadott infó Hozzáadott működés/funkció Korábbi működés felülírása

25 Öröklődés: szülő osztály

26 Öröklődés: gyerek osztály
Hozzáadott funkcionalitás: speak() A Cat példányt meg lehet hívni az új metódussal Az Animal példánya hibát dob ha a Cat új metódusával hívjuk meg Az __init__ nem hiányzik, az Animal osztályét használjuk

27 Melyik metódust használjuk?
Egy subclass implementálhat a superclass metódusaival megegyező nevű metódusokat Osztálypéldány esetében, keressük meg az osztály definíciójában a metódus nevét Ha nincs meg, keressük a hierarchiában feljebb (szülő, nagyszülő, stb) Használjuk az első metódust, amit először találunk a hierarchiában

28

29

30 Osztály változók és Rabbit subclass
Az osztály változók és értékeik minden osztály között meg vannak osztva A tag az osztály példányok egyedi azonosításához létrehozott ID

31 Rabbit GETTER metódusok

32 Saját típusok használata
Definiálni a + operátort két Rabbit példány között mit csinál egy r3 = r1 + r2, ha r1, r2 Rabbit példány r3 egy új példány, aminek életkora 0 r3-nak self az egyik szülője és other a másik az __init__-ben parent1 és parent2 Rabbit típusú

33 Speciális metódus két Rabbit összehasonlításához
Két Rabbit példány akkor legyen egyező, ha a szüleik megegyeznek Hasonlítsuk össze az ID-kat (azok egyediek) Objektumokat nem lehet közvetlenül összehasonlítani

34 OOP összefoglalás Saját adatkollekciók készítése
Információ rendszerezése Munka felosztása Adatok elérésének konzisztens módja Rétegelt komplexitás Akárcsak a függvények, az osztályok is dekompozíciós és absztrakciós mechanizmusok a programozásban

35 Vége Köszönöm a figyelmet!


Letölteni ppt "OOP és Python Vincellér Zoltán."

Hasonló előadás


Google Hirdetések