1 / 18

Microsoft.NET környezet

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

yvon
Download Presentation

Microsoft.NET környezet

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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 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? -> add hozzá új sorként a tábla végéhez 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

More Related