Bevezetés a Python programozási nyelvbe

Hasonló dokumentumok
JAVA PROGRAMOZÁS 2.ELŐADÁS

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

Osztályok. 4. gyakorlat

Smalltalk 3. Osztályok létrehozása. Készítette: Szabó Éva

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Java programozási nyelv 4. rész Osztályok II.

C++ programozási nyelv

III. OOP (objektumok, osztályok)

Java programozási nyelv 5. rész Osztályok III.

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

C++ programozási nyelv

Objektum orientált kiterjesztés A+ programozási nyelvhez

ELTE SAP Excellence Center Oktatóanyag 1

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

C++ programozási nyelv Konstruktorok-destruktorok

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Smart Pointer koncepciója

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

OOP #14 (referencia-elv)

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Objective-C PPKE-ITK

Pénzügyi algoritmusok

Objektumorientált programozás C# nyelven

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Alkalmazott Modul III 6. előadás. Objektumorientált programozás: öröklődés és polimorfizmus

Globális operátor overloading

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Programozási alapismeretek 4.

Programozás II. 4. Dr. Iványi Péter

Programozási nyelvek Java

Virtuális függvények (late binding)

Objektumelvű alkalmazások fejlesztése 6. gyakorlat. Öröklődés, polimorfizmus. Öröklődés Kódismétlődés objektum-orientált szerkezetben

OOP: Java 8.Gy: Abstract osztályok, interfészek

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Programozási nyelvek Java

Programozás BMEKOKAA146. Dr. Bécsi Tamás 7. előadás

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Abstract osztályok és interface-ek. 7-dik gyakorlat

Programozási nyelvek II. JAVA

Programozás C++ -ban 2007/7

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

Már megismert fogalmak áttekintése

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Objektum-orientált programozás

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Java és web programozás

ISA szimulátor objektum-orientált modell (C++)

OOP: Java 7.Gy: Öröklődés, referenciák

Programozás II gyakorlat. 6. Polimorfizmus

Java és web programozás

Programozási nyelvek Java

Bevezetés a Python programozási nyelvbe

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Programozási nyelvek Java

Programozási nyelvek JAVA EA+GY 1. gyakolat

Bevezetés a programozásba előadás: Öröklődés

Adatstruktúrák, algoritmusok, objektumok

OOP. Alapelvek Elek Tibor

Programozási nyelvek Java

Függőség injekció Konstantinusz Kft 2010

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Operációs rendszerek. 9. gyakorlat. BASH recap, reguláris kifejezések UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

3. gyakorlat. Objektumorientált programozás

Számítógép és programozás 2

Bevezető. Servlet alapgondolatok

Dokumentáció. 1. Beadandó feladat

Objektumok inicializálása

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

S0-02 Típusmodellek (Programozás elmélet)

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

Programozás módszertan p.1/46

Programozási nyelvek Java

Operációs rendszerek. 9. gyakorlat. Reguláris kifejezések - alapok, BASH UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Bevezetés a Programozásba II 8. előadás. Polimorfizmus Giachetta Roberto

Programozás I. Első ZH segédlet

RESIDENT EVIL CODENAME: NIK

C++ programozási nyelv Struktúrák a C++ nyelvben

ELTE SAP EXCELLENCE CENTER Oktatóanyag. Sas László: ABAP Objects Objektumorientált ABAP

1. Öröklés Rétegelés Nyilvános öröklés - isa reláció Korlátozó öröklődés - has-a reláció

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

AWK programozás, minták, vezérlési szerkezetek

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

C#, OOP. Osztályok tervezése C#-ban

JAVA PROGRAMOZÁS 3.ELŐADÁS

Objektumorientált programozás C# nyelven

Programozás I gyakorlat

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

Programozás. Osztályok, Származtatott osztályok. Fodor Attila

Webes alkalmazások helyes szerkezete PHP-ban

8. gyakorlat Pointerek, dinamikus memóriakezelés

Programozás. Objektum Orientált Programozás (OOP) Alapfogalmak. Fodor Attila

Átírás:

Bevezetés a Python programozási nyelvbe 7. Gyakorlat osztályok, objektumok (utolsó módosítás 2018. aug. 28.) Szathmáry László Debreceni Egyetem Informatikai Kar 2018-2019, 1. félév

OO programozás Pythonban Pythonban lehet procedurális, illetve OO módon is programozni. Választhatunk, hogy melyiket használjuk vagy az egyiket, vagy a másikat, vagy akár mindkettőt. Python osztályokat már használtunk, pl. str (sztring osztály). Most megnézzük, hogy hogyan tudunk saját osztályokat definiálni, illetve hogyan tudunk ezután objektumokat példányosítani. 2

OO programozás Pythonban (folyt.) A Python programozási nyelvben az összes standard OO tulajdonság megtalálható. Van benne például többszörös öröklődés a leszármazott osztály felülírhatja a szülőosztály bármely metódusát Dinamikus nyelvről lévén szó, az osztályok futásidőben jönnek létre, s létrehozás után tovább módosíthatók! Minden példányváltozó és példánymetódus publikus. Minden példánymetódus virtuális. A legtöbb beépített operátor felüldefiniálható s használható az osztály objektumaira. Az objektumok átadása paraméterként olcsó, ui. az objektumok címe lesz átadva (referencia). Vagyis ha egy paraméterként átadott objektumot módosítunk, akkor a hívó fél is látni fogja a változásokat. 3

osztályok OsztályNeve minden osztály az object osztály leszármazottja (Python 3-ban ezt már nem kell kiírni) példánymetódus az első paraméter kötelezően a self, de ezt a hívás helyén nem írjuk ki példányosítás Python 3 az object ősosztályt nem muszáj feltüntetni, ui. ez az alapértelmezés. Ki lehet írni, de nem muszáj. Python 2 az object ősosztályt fel KELL tüntetni, különben egy régi stílusú osztály jön létre (oldstyle class). 4

osztályok (példányváltozó, példánymetódus) docstring példánymetódus példányváltozó minden publikus 5

self Minden metódus első paramétere ez kell hogy legyen. Ez a Java this változójának felel meg, vagyis ez egy olyan referencia, mely az adott objektumra mutat. Megegyezés alapján self a neve, ezen ne változtassunk! Minden (nem-statikus) függvény első paramétere a self, viszont a függvény meghívásakor ezt nem kell kiírni. A Python dinamikus természetéből adódóan bármelyik függvényben létrehozhatunk egy példányváltozót, s onnan kezdve az létezik. 6

osztályok (init) A konstruktor automatikusan meghívja az init () metódust. Vagyis az init () nem a konstruktor, de nagyon közel áll hozzá. Ez fogja inicializálni az objektumot. 7

osztályok (példánymetódus meghívása) konténer osztály (a példányai adatokat / objektumokat tárolnak) speciális metódus (az adott objektumot olvasható formában jeleníti meg) lásd Java tostring() Próbáljuk ki enélkül is! 8

osztályok (rekord) Néha jól jönne a C nyelv struct-jához hasonló rekord típus. Megoldható Másik módszer szótár használata john = {} john[ name ] = John Doe 9

privát változók és metódusok Privát változók/metódusok, melyek nem érhetők el kívülről csak az objektumon belülről nincs ilyen Pythonban. Minden publikus. Viszont van egy megegyezés ha egy változó/metódus neve _ (aláhúzás) jellel kezdődik, akkor azt nem-publikusként kell kezelni. Pl. _spam. accessors (getters / setters) Nincs rá szükség, ui. minden publikus. Egyszer megkérdezték Guidot, hogy miért nincsenek privát változók/metódusok. A válasza We are all adults. ) 10

accessors (getters / setters) Java stílus Python stílus Feladat forrás kibővítése print(rect) -> Rectangle(60, 10) # produkálja a következőt 11

speciális metódusok Ezeknek a neve -sal kezdődik és ugyanígy végződik. Már láttunk néhány ilyet init str Vannak további speciális metódusok is, lásd https//rszalski.github.io/magicmethods/. destruktor Nincs, a garbage collector fogja majd megsemmisíteni az objektumot. Ennek a pontos idejét viszont nem tudjuk befolyásolni. 12

osztályváltozók osztályváltozó (az osztály metódusain kívül lett definiálva) hivatkozás Feladat Írjunk egy olyan osztályt, amely számolja, hogy hányszor példányosítottuk. 13

osztálymetódusok (1. módszer) Írjunk egy Balloon osztályt, mely egy színes labdát reprezentál. Tartsuk számon azt is, hogy hány különböző színű labdánk van. (Pl. ha van 2 piros, 1 fehér és 5 zöld labdánk, akkor három különböző színű labdánk van.) osztályváltozó dekorátor osztálymetódus Vegyük észre, hogy a függvénynek NINCS extra paramétere! Ez a statikus függvény tulajdonképpen az osztályon kívül is lehetne. Azért tettük az osztályba, mert logikailag oda tartozik. 14

osztálymetódusok (2. módszer) osztályváltozó dekorátor osztálymetódus A cls paraméter magát az osztályt jelenti. Híváskor ezt sem kell kiírni. Vegyük észre, hogy a függvénynek VAN extra paramétere (cls)! Akkor használjuk ezt a módszert, amikor a függvényben hivatkozni akarunk az aktuális osztályra (pl. öröklődés esetén). 15

öröklődés szülő osztály leszármazott osztály Pet Dog 16

öröklődés (folyt.) class DerivedClass(BaseClass) A leszármazott osztályok felülírhatják a szülők függvényeit. Pythonban az összes függvény virtuális. A származtatott függvényben lehet, hogy a szülő osztályban lévő függvényt csak ki akarjuk terjeszteni, vagyis nem akarjuk teljesen felülírni! Ekkor a szülő azonos nevű függvényét a következőképpen tudjuk meghívni BaseClass.method_name(self, arguments) Hasznos beépített függvény True True 17

többszörös öröklődés Erre is van lehetőség, de inkább ne használjuk. A Java-ból sem véletlenül vették ki 18

Feladatok házi feladat 1. [20130325a] osztályok (sor két veremmel) 19