Hernyák Zoltán Programozási Nyelvek II.

Slides:



Advertisements
Hasonló előadás
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Advertisements

C++ programozási nyelv Gyakorlat hét
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.
Matematika II. 2. előadás Geodézia szakmérnöki szak 2012/2013. tanév Műszaki térinformatika ágazat őszi félév.
Ö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.
Hatékony gyorsítótár használata legrövidebb utak kereséséhez Bodnár István, Fodor Krisztián, Gyimesi Gábor Jeppe Rishede Thomsen, Man Lung Yiu, Christian.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
Bevezetés a Java programozásba
Fájlkezelés, IO Kivételkezelés Belső osztályok
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
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.
Java programozási nyelv 3. rész – Osztályok I.
A C++ programozási nyelvSoós Sándor 1/15 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
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.
C# tagfüggvények.
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,
© 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.
P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.
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,
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 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 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.
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.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
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 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 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.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
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.
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.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Függvények a C nyelvben 1 Függvényeket a következő esetekben szokás írni: Ha ugyanazt a tevékenységet többször is el kell végeznünk ugyanolyan típusú,
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
Memóriakezelés feladatok Feladat: 12 bites címtartomány. 0 ~ 2047 legyen mindig.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. gyakorlat.
TÁMOP /1-2F Felkészítés szakmai vizsgára, informatika területre modulhoz II/14. évfolyam Az interaktív vizsga jellegzetes feladattípusainak.
Programozás III ÖTLETEK A FELADATMEGOLDÁSHOZ. A HF-EK APROPÓJÁN Néhány javaslat: 1. Jó lenne, ha a feladatmegoldás előtt átnéznék az előadás-anyagokat.
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.
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][,
a programegységek között
Hernyák Zoltán Programozási Nyelvek II.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Hernyák Zoltán Programozási Nyelvek II.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Előadás másolata:

Hernyák Zoltán Programozási Nyelvek II. Microsoft.NET környezet Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz 1

VMT: Virtuális Metódus Tábla Virtuális metódus: olyan metódus, amely az ős osztályban lett definiálva, de a gyermekosztályban ugyanolyan névvel és paraméterezéssel felül lehet definiálni, és ezt a metódus-változatot az ős osztály metódusai is meg tudják hívni. Az ilyen metódusokra a fordító progam a késői kötést alkalmazza. Virtuális metódusok használatánál tilos: - megváltoztatni a paraméterezést! - a fv visszatérési típusát! Az ős osztályban a ‘virtual’ kulcsszóval kell jelölni, hogy a metódusok virtuális lesz. A gyermekosztályban pedig az ‘override’ kulcsszót kell használni. 2

Korai kötés működése class TElso { public int szamol() { return 10; } public int akarmi() return szamol()+1; } Korai kötés: ezen fv hívás mindig ezt a fv-t hívását jelenti. Ez rögzített, és nem változik meg sosem, semmilyen körülmények között (”beégetődik a kódba”). class TMasik:TElso { public new int szamol() { return 20; } } TElso E = new TElso(); int ne = E.akarmi(); 3

VMT: Virtuális Metódus Tábla class TElso { public virtual int szamol() { return 10; } public int akarmi() return szamol()+1; } Késői kötés: hogy ez konkrétan melyik fv legyen, az majd futás közben fog eldőlni. ? class TOtodik:TElso { public override int szamol() { return 20; } } Nem lehet tovább halogatni a döntést. TElso.szamol lesz a választás! TElso E = new TElso(); int ne = E.akarmi(); TOtodik O = new TOtodik(); int no = O.akarmi(); Itt TOtodik.szamol lesz a választás! Miért? Mi dönti el? 4

VMT: Virtuális Metódus Tábla Késői kötés: a kötés feloldását a rendszer elodázza a lehető legkésőbbi pillanatig. Ez konkrétan a hívás pillanatába dől el. Ekkor a rendszer megkeresi az adott példánytól függően a legfrisseb verziót az adott metódusból, és azt fogja meghívni! A ‘virtual’ kulcsszót akkor kell használni, amikor ‘bevezetjük’ a metódust (első eset). Minden további esetben az ‘override’-t kell használni. 5

VMT: Virtuális Metódus Tábla class TElso { public virtual int A() {} public virtual int B() {} public virtual void D() () public void E() {} } TElso VMT A | TElso.A B | TElso.B D | TElso.D class TMasodik:TElso { public override int B() {} public virtual void C() {} } TMasodik VMT A | TElso.A B | TMasodik.B D | TElso.D C | TMasodik.C 6

VMT: Virtuális Metódus Tábla Készül: fordítási időben, a fordító prg által Minden osztályhoz 1 db készül Tartalmazza az adott osztály ÖSSZES virtuális metódusáról az információkat - beleértve az örökölt metódusokat is - és a frissen bevezett metódusokat is 7

VMT: Virtuális Metódus Tábla VMT készítés algoritmusa (1) másold le az ős osztályod VMT-jét ha nincs ősöd*, akkor üres a VMT (2) itt van override-os metódus? -> írd át a megfelelő sort (3) itt van virtual-os metódus? -> add hozzá új sorként a tábla végéhez *: olyan nincs, hogy nincs ősöd. Ha nem jelölöd, akkor az System.Object az ősöd (magyarázat később). Csak a System.Object-nek nincs őse! 8

VMT: Virtuális Metódus Tábla VMT tábla használata (1) az adott példány esetén elővesszük a hozzá tartozó VMT táblát! (2) a VMT tábla megfelelő sorából kiolvassuk, melyik a legfrissebb verzió az adott metódusból. (3) Meghívjuk a metódust Megj: nem kell keresni. A VMT táblában ha egy metó- dus egyszer a táblázat n. sorba került, akkor a gyerekosztályok VMT táblájában is az n. sorban lesz majd. 9

VMT: Virtuális Metódus Tábla VMT tábla előnyök / hátrányok Előnyök: - gyors a kezelése Hátrány: - nagy a memóriaigény - a gyerekosztály VMT-je legalább olyan hosszú, mint az ősé-é… - ha a gyerekosztályban nincs override-os felüldefiniálás, akkor is tartalmazza az adott metódus adatait 10

DMT: Dinamikus Metódus Tábla class TElso { public virtual int A() {} public virtual int B() {} public virtual void D() () public void E() {} } TElso DMT ŐS = null A | TElso.A B | TElso.B D | TElso.D class TMasodik:TElso { public override int B() {} public virtual void C() {} } TMasodik DMT ŐS = TElso.DMT B | TMasodik.B C | TMasodik.C 11

DMT: Dinamikus Metódus Tábla DMT készítés algoritmusa (1) induláskor a DMT tábla üres (2) vedd fel az ‘ŐS’-höz az ős DMT tábla címét (3) itt van override-os metódus? -> add hozzá új sorként a tábla végéhez (4) itt van virtual-os metódus? 12

DMT: Dinamikus Metódus Tábla DMT tábla használata (1) az adott példány esetén elővesszük a hozzá tartozó DMT táblát! (2) a DMT táblában rákeresünk az adott metódusra Ha megtaláljuk, akkor meghívjuk a metódust. (3) Ha nem találjuk meg, akkor a keresést folytatjuk az ős DMT-ben. Megj: A keresés szükséges, mert nem biztos, hogy ebben a táblában van a keresett információ. 13

DMT: Dinamikus Metódus Tábla DMT tábla előnyök / hátrányok Előnyök: - ‘kevesebb’ memóriába kerül Hátrány: - lassúbb a kezelés a keresés miatt 14

DMT: Dinamikus Metódus Tábla DMT tábla memóriaigény A VMT táblában egy tétel csak 1 db memóriacímet tar- talmaz ( 4 byte ). A metódus ‘nevét’ nem , mert az n. sor mindig ugyanazon metódushoz tartozik. A DMT táblában azonban két oszlop van: 1. oszlopban a metódus azonosítója van* 2. oszlopban a metódus memóriacíme (4 byte) * az azonosító általában egy sorszám (2 byte-os). Minden metódus kap egy egyedi sorszámot. 15

DMT: Dinamikus Metódus Tábla DMT tábla memóriaigénye Ha a DMT táblát azonosító szerint sorba rendezzük, akkor lehet benne bináris kereséssel keresni benne. Ha a DMT metódusokat ‘sűrűn’ felüldefiniáljuk, akkor a DMT tábla memórigénye nagyobb, mintha VMT-t használnánk, mivel 1 bejegyzés a DMT-ben másfélszer annyi byte, mint a VMT-ben. 16

DMT versus VMT Néhány nyelv mindkét típusú táblát kezeli. A programozó határozza meg azt, hogy a metódus melyik tábla alapján legyen kezelve: - ha a metódust várhatóan sűrűn meghívjuk (ciklus belsejéből, rekurzívan, …) akkor VMT-be kezeljük - ha a metódust valószínűleg felül fogja definiálni a várható gyermekosztályokban, akkor VMT - egyéb esetekben DMT 17

DMT versus VMT Van olyan nyelv (pl. Java), ahol minden metódus mindig virtuális ( nem kell külön jelölni a virtual kulcsszóval, sem a gyerekosztályokban az override kulcsszóval ). Legtöbb nyelv azonban csak egyfajta táblát kezel (általában a VMT-t). Ezen nyelvekben a programozó nem választhat a DMT és VMT között. 18