Python Vincellér Zoltán.

Slides:



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

Programozás III STRING-XML.
C++ programozási nyelv Gyakorlat hét
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 Tömbök, kollekciók és egyéb alaposztályok.
© 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.
Szabó Tamás Károly G6HT12 A Ruby programozási nyelv.
Bevezetés a Java programozásba
Öröklődés Polimorfizmus Csomagok Absztrakt osztályok, interfészek
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. 5. Gyakorlat Öröklődés, virtuális függvények,
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
Hernyák Zoltán XML validálás.
Az objektum-orientált tervezési alapelvek kritikai vizsgálata
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.
Java programozási nyelv 5. rész – Osztályok III.
WEB Technológiák Dr. Pance Miklós – Kolcza Gábor Miskolci Egyetem.
C# tagfüggvények.
JSP és JavaBean JavaServer Pages és Java Beans Fabók Zsolt Általános Informatikai Tanszék Miskolci Egyetem.
C# tagfüggvények.
Annotációk a Java 5 nyelvben Kozsik Tamás. Annotációk Módosítószavak bővítése A programszöveg elemeihez rendelhetők –Csomagokhoz, típusokhoz, metódusokhoz,
Önleíró adatok: XML INFO ÉRA, Békéscsaba
© Kozsik Tamás Csomagok. © Kozsik Tamás A program tagolása Típusdefiníciók (osztályok, interfészek) Metódusok Blokk utasítások Csomagok.
Objektumorientált tervezés és programozás II. 3. előadás
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
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.
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.
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 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.
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ú,
Scala KOVÁCS VINCENT. Gyűjtemények – Collections  Scala több féle gyűjteménnyel rendelkezik:  Listák (Lists)  Halmazok (Sets)  Maps  Tuple  A gyűjtemények.
Alkalmazói programok Integrált felhasználói rendszerek Számítómunkahelyen szükséges felhasználói programokat egy csomagban, modulokban tartalmazza; az.
Java programozási nyelv Metódusok
Java programozási nyelv Adatbekérés konzolról
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.
XML Mi az XML?  Extensible Markup Language  Kiterjeszthető jelölő nyelv  Adatok, adatstruktúrák leírására szolgál  A HTML és az SGML tapasztalataira.
Objektumvezérelt rendszerek tervezése
Programozás III KIVÉTEL – CSOMAG. CSOMAGOK Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek. A Java is csomagok halmaza: csomagokban.
Programozás III KOLLEKCIÓK.
HTML ÉS PHP (Nagyon) rövid áttekintés. ADATBÁZISRENDSZEREK MŰKÖDÉSI SÉMÁJA Felh. interakció DB Connector MySQL ? A gyakorlaton:
Programozás III KIVÉTEL.
Programozás III CSOMAG. CSOMAGOK Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek. A Java is csomagok halmaza: csomagokban van.
Programozás III KIVÉTEL. KIVÉTELKEZELÉS Hibátlan program nincs!!! eddig hiba esetén leállt a program. Példa ilyen hibákra: ─ ArrayBoundsOfException (tömb.
Ficsor Lajos CPP2 / 1 Származtatási mechanizmus a C++ nyelvben Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
Webes MES keretrendszer fejlesztése Kiss Miklós Dániel G-5S8 Tervezésvezető: Dr. Hornyák Olivér.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 5. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 4. gyakorlat.
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.
Programozás III JPA.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
Script nyelvek előadás
Script nyelvek előadás
Script nyelvek előadás
Neumann János Informatikai Kar
Script nyelvek előadás
Hernyák Zoltán Programozási Nyelvek II.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
OOP és Python Vincellér Zoltán.
Python alapok Vincellér Zoltán.
Előadás másolata:

Python Vincellér Zoltán

Emlékeztető: osztályok definiálása A class kulcsszó használatával: osztály def osztály neve osztály szülő Attribútumok: adat metódus

Dokumentumok, mint adategységek Ember-gép kapcsolat formanyomtatványok kitöltése minimálisan ellenőrizhető manuális Az internet korában gyakori lett a gép-gép interakció webes szolgáltatások (SOA, REST) szerver-szerver, szerver-kliens Szükséges olyan egységes adatkollekció, ami gép által könnyen interpretálható XML JSON

JSON JavaScript Object Notation Egyszerű („lightweight”) adatcserére alkalmas formátum Önleíró Könnyen értelmezhető embernek és gépnek egyaránt Nyelvfüggetlen Szintaxis adatok tárolásához és cseréjéhez Szöveges formátum JavaScript objektumok jelölésrendszerével

JSON { "name": "John", "age": 35, "birthday": "1989.05.27", "birthplace": "New York", "pets": [{ "name": "Bobby", "type": "dog" }, "name": "Fluffy", "type": "cat" } ]

JSON feladat Mindenki készítse el a saját JSON ”leírását”. Ez tartalmazza: vezetéknevét, keresztnevét (harmadik név nem kell), életkorát, lakhelyét (elég a város), egy tömbben a követlen szomszédait, ahol: egy szomszéd szintén objektumként szerepel, egyetlen adattagja van, az pedig a keresztneve Ezt a fájlt mentsétek el me.json-ként

JSON és Python A Python egyszerűvé teszi a JSON formátum használatát Alapértelmezett, azaz előtelepített modul Használatához: import json Lehetővé teszi JSON szövegek feldolgozását akár fájlból, akár string-ből Képes Python kollekciókká alakítani Dictionary List

JSON → Python A JSON fájlok vagy szövegek feldolgozásával lehetőség nyílik a JSON-ben meghatározott objektumokat natív Python-os objektumokká alakítani A json modul képes Dictionary-be, vagy List-be olvasni load() metódus - JSON dokumentumot tartalmazó read()-et támogató fájl-szerű objektum loads() metódus - JSON dokumentumot tartalmazó str vagy unicode példány import json jsonData = '{"name": "Frank", "age": 39}' jsonToPython = json.loads(jsonData) Használjuk a printet ellenőrzéshez!

Python → JSON Lehetőség van Pythonos objektumokat is JSON formátumra hozni Ehhez a json csomag dumps() metódusát hívjuk segítségül import json pythonDictionary = {'name':'Bob', 'age':44, 'isEmployed':True} dictionaryToJson = json.dumps(pythonDictionary) Ellenőrzéshez itt is használjunk printet!

Limitációk Fontos megjegyezni: a JSON nem képes az összes típus kezelésére tárolására, ami Pythonban is elérhető A következők támogatottak: List Dictionary Boolean Number Character None Minden egyéb típust konvertálni kell ahhoz, hogy JSON-ban tárolhassuk

Limitációk Tegyük fel, hogy van egy osztályunk: class Employee(object):     def __init__(self, name):         self.name = name Mi történik, hogy ha ennek az osztálynak egy példányát JSON-né szeretnénk konvertálni? Hibaüzenetet kapunk Használható az objektum __dict__ attribútuma

Feladatok Töltsük be fájlból a me.json-t. Ellenőrizzük a létrehozott objektum típusát Írjuk ki a konzolra az objektum tartalmát Írjuk ki a konzolra az objektum tartalmát, de most megfelelően indentálva (hint: használjuk a pprint függvényt) Alakítsuk a fent létrehozott Dictionary-t Python objektummá

Emlékeztető: Öröklődés Hierarchiák Superclass (ősosztály) Subclass (származtatott osztály) Miért használjuk? Új információ Működések kiegészítése Működés felülírása

Emlékeztető: információ elfedés, getter, setter Getter és setter metódusok az osztályok adat attribútumaiknak elérésére szolgálnak

Interfészek és absztrakt osztályok Programtervezés során az első lépcső az objektumok kellően absztrakt definiálása Szeretnénk egy magasabb szinten úgy meghatározni egyes objektumok működését, hogy azokat konkrétan nem implementáljuk Lehetőséget ad a többszintű fejlesztéshez Nem feltétlenül ugyanaz fogja az implementálást elvégezni, mint aki tervezte az objektum működését

Interfészek és absztrakt osztályok Az interfészek és absztrakt osztályok lehetőséget adnak a tervezési és fejlesztési folyamatok elkülönítésére Önmagában egyik sem példányosítható Sok magasabb szintű nyelv támogatja C#, JAVA, C++, stb.. Mi a különbség az absztrakt osztály és az interfész között? interfész: az implementálandó függvényeket és procedúrákat, illetve azok karakterisztikáját határozza meg, implementációt nem tartalmaz absztrakt osztály: az interfészhez hasonló, de konkrét implementációt és adatattribútumokat is tartalmazhat

Python és az absztrakt osztályok Python-ban az öröklődés „lazán” van kezelve Vegyük a következő példát: class AbstractClass: def do_something(self): pass class B(AbstractClass): a = AbstractClass() b = B()

Python és az absztrakt osztályok Ha az előző programot futtatjuk, hamar kiderül, hogy nem absztrakt osztályt hoztunk létre: eleve példányosítható már az AbstractClass is nincs a B származtatott osztályban do_something függvény implementálására kényszer A példaprogram egy szimpla öröklődést tartalmaz, nincs benne absztrakt osztály definiálva

Python Abstract Base Class A Python külön moduljával lehetőség nyílik absztrakt osztályok definiálására Ez az úgynevezett Abstract Base Class, a csomag neve rövidítve abc Használatához import abc vagy specifikusan from abc import ABCMeta, abstractmethod Python 3.+ felett kényelmesebb a használata

Python ABC Az előző példát kiegészítve definiáljunk egy absztrakt osztályt: class AbstractClassExample(object): __metaclass__ = ABCMeta def __init__(self, value): self.value = value super(AbstractClassExample, self).__init__() @abstractmethod def do_something(self): pass

Python ABC Az absztrakt osztályból készítsünk egy subclass-t, do_something fv. implementálása nélkül: class DoAdd42(AbstractClassExample): pass x = DoAdd42(4) Futtatáskor TypeError hibát kapunk, az exception szövegéből kiderül az oka

Python ABC Előző kód javítása: class DoAdd42(AbstractClassExample): def do_something(self): return self.value + 42 class DoMul42(AbstractClassExample): return self.value * 42 x = DoAdd42(10) y = DoMul42(10) print(x.do_something()) print(y.do_something())

Python ABC metódusai Egy absztrakt osztályból származtatott osztály addig nem példányosítható, amíg a definíciójában minden absztrakt metódus nincs implementálva Az ABC is tartalmazhat implementációt (???) A legelső származtatásnál felülíródik Mint minden öröklődésnél, itt is lehetséges az ősosztály metódusait meghívni super().do_something()

Python ABC metódusai from abc import ABCMeta, abstractmethod class AbstractClassExample(object): __metaclass__ = ABCMeta @abstractmethod def do_something(self): print('SuperDoSomething') class AnotherSubclass(AbstractClassExample): super(AnotherSubclass, self).do_something() print("The enrichment from AnotherSubclass") x = AnotherSubclass() x.do_something()

Feladat Készítsünk egy absztrakt osztályt, amit a sokszögekhez tervezünk. Az alábbi absztrakt metódusok legyenek benne definiálva: Terület számítása Kerület számítása Oldalak lekérdezése A fenti absztrakt osztályt felhasználva készítsünk egy háromszög és egy négyzet osztályt, illetve a négyszögek származtatott osztályait (trapéz, paralelogramma, deltoid, stb). Implementáljuk a szükséges metódusokat.

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