OOP és Python Vincellér Zoltán.

Slides:



Advertisements
Hasonló előadás
Osztály leszármaztatás
Advertisements

ADATBÁZISOK.
C++ programozási nyelv Gyakorlat hét
Programozás III OOP ALAPOK.
EE/R adatmodell (Extended E/R) 1 Az objektum orientált szemlélet elterjedésével egyre nőtt az igény az olyan SDM (Semantic Data Model) modellek iránt,
Programozás III KOLLEKCIÓK 2..
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Öröklődés 2..
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
OBJEKTUMORIENTÁLT PROGRAM
Bevezetés a Java programozásba
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
Vizuális modellezés Uml és osztálydiagram UML eszközök
Abstract osztályok és interface-ek Beolvasás és kiíratás 7. gyakorlat.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 7. Gyakorlat Operator overloading.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 5. Gyakorlat Öröklődés, virtuális függvények,
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Fejlett Programozási Technológiák II. Világos Zsolt 12. gyakorlat.
Tömbök ismétlés Osztályok Java-ban Garbage collection
Mutatók, tömbök, függvények
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
A C++ programozási nyelvSoós Sándor 1/12 C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
C# tagfüggvények.
C# tagfüggvények.
Ficsor Lajos Template-ek CPP8/ 1 Template-ek. Ficsor Lajos Template-ek CPP8/ 2 A template fogalma Kiindulási probléma: tetszőleges típusokon kellene ugyanolyan.
Objektumok. Az objektum információt tárol, és kérésre feladatokat hajt végre. Az objektum adatok (attribútumok) és metódusok (operációk,műveletek) összessége,
1Objektumorientált elemzés és tervezés - Alapfogalmak Gyurkó György Objektumorientált elemzés és tervezés Alapfogalmak.
Objektumorientált tervezés és programozás II. 3. előadás
HEFOP 3.3.1–P /1.01 Az OOP elve A programozási paradigma (vagy elv) a számítógépes programok tervezésének és programozásának módszerét jelenti.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
A PHP 5 újdonságai Az OOP terén. Miről lesz szó? Osztályok kezelése – Új direktívák – Konstruktor – Destruktor Interfészek Kivételkezelés.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
Objektumorientált programozás
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
HF MINTA 2012/2013. ősz. HF Minta  Objektum-orientált program  „Adatvezérelt” alkalmazás írása  Fájl kezelés (olvasás, írás)  Menü készítése  5-6.
1 Objektum orientált programozás Modellezés objektumokkal Nagy Szilvia.
Objektum orientált programozás
1 Objektum orientált programozás Öröklődés: többszörös öröklődés, konstruktorok, destruktorok, overloading Nagy Szilvia.
Apache Ant 2. gyakorlat Alkalmazásfejlesztés /2 Gyakorlat Zalatnai Csongor.
Objektumvezérelt rendszerek tervezése
OOP ÖRÖKLŐDÉS, INTERFÉSZ
Objektumvezérelt rendszerek tervezése 9.óra – Builder, Observer © Nagy Csaba.
Programozás III OOP ÖRÖKLŐDÉS.
Objektumorientált alapjai ISZAM III.évf. részére Bunkóczi László.
Adatbáziskezelés. Adat és információ Információ –Új ismeret Adat –Az információ formai oldala –Jelsorozat.
Ficsor Lajos CPP2 / 1 Származtatási mechanizmus a C++ nyelvben Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
Haladó C++ Programozás Programtervezési minták – alapok Sonkoly Balázs
1 Objektum orientált programozás Az objektumok és az osztályok – példányosodás Nagy Szilvia.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
A szoftver mint komplex rendszer: objektumorientált megközelítés.
Strukturális tervezési minták
Script nyelvek előadás
Kifejezések C#-ban.
Neumann János Informatikai Kar
Hernyák Zoltán Programozási Nyelvek II.
Beépített függvények használata programozáskor
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Adatkötés Sablonokkal
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Python Vincellér Zoltán.
Dependency Injection Tesztduplikátumok, Mock-ok, Fake-ek Feladat
Előadás másolata:

OOP és Python Vincellér Zoltán

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

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)

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

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

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

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)

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

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

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ő

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

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

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)

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

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:

Saját print metódus

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:

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

Ö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

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

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

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!

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:

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

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

Ö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

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

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

Rabbit GETTER metódusok

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ú

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

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

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