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

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

Hasonló előadás


Az előadások a következő témára: "Hernyák Zoltán Programozási Nyelvek II."— Előadás másolata:

1 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

2 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

3 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

4 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

5 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

6 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

7 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

8 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

9 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

10 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

11 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

12 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

13 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

14 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

15 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

16 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

17 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

18 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


Letölteni ppt "Hernyák Zoltán Programozási Nyelvek II."

Hasonló előadás


Google Hirdetések