OOP. #6 (VMT és DMT) v :33:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj.

Hasonló dokumentumok
OOP #14 (referencia-elv)

OOP #1 (Bevezetés) v :39:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj.

.NET (Dot-NET) #1 (Bevezetés)

OOP #7 (init, done) v :45:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj.

C++ programozási nyelv

Objektumorientált programozás C# nyelven

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

Interfészek. PPT 2007/2008 tavasz.

é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ási nyelvek Java

Öröklés és Polimorfizmus

Már megismert fogalmak áttekintése

Objektumorientált programozás C# nyelven

BME MOGI Gépészeti informatika 8.

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

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

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.

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

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 nyelvek Java

Programozási alapismeretek 4.

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

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

Java és web programozás

C++ programozási nyelv Konstruktorok-destruktorok

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

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

Programozás II gyakorlat. 6. Polimorfizmus

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

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

C++ programozási nyelv

Objektumorientált programozás C# nyelven II.

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

Bevezetés, a C++ osztályok. Pere László

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

3. Osztályok II. Programozás II

Vizuális, eseményvezérelt programozás XI.

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

Táblázatok fontosabb műveletei 1

Web-programozó Web-programozó

Rekurzió. Dr. Iványi Péter

Programozás módszertan p.1/46

Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése

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

Java és web programozás

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

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

Tájékoztató. Használható segédeszköz: -

Osztályok. 4. gyakorlat

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

JAVA PROGRAMOZÁS 2.ELŐADÁS

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

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 alapok Egy OOP nyelvet három fontos dolog jellemez. egységbezárás ( encapsulation objektumoknak öröklés ( inheritance

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

OOP és UML Áttekintés

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Név: Neptun kód: Pontszám:

Objektumorientált programozás C# nyelven II.

Szoftver labor III. Tematika. Gyakorlatok. Dr. Csébfalvi Balázs

Programozási nyelvek Java

Osztály öröklődés. Öröklődés és polimorfizmus. Programozás II. előadás. Szénási Sándor.

Objektum orientáltság alapjai A Java nyelv Fordítás - futtatás

A függvények névvel rendelkező utasításcsoportok, melyeknek információkat adhatunk át, és van egy visszatérési értékük.

Programozás III. - NGB_IN001_3

Java és web programozás

Programozás C++ -ban 2007/7

Objektumorientált Programozás VI.

Java programozási nyelv

C++ programozási nyelv

Mesterséges Intelligencia I. kötelező program

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

JAVASLAT A TOP-K ELEMCSERÉK KERESÉSÉRE NAGY ONLINE KÖZÖSSÉGEKBEN

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

BME MOGI Gépészeti informatika 7.

Java Programozás 1. Gy: Java alapok. Ismétlés ++

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

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

1. feladat. Szabóné Nacsa Rozália

C programozási nyelv Pointerek, tömbök, pointer aritmetika

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

Eljárások és függvények

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

Adatszerkezetek 2. Dr. Iványi Péter

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

Java programozási nyelv 9. rész Kivételkezelés

OOP. Alapelvek Elek Tibor

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

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

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

Fordított és szkript nyelvek összehasonlító elemzése. Sergyán Szabolcs

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?

J E G Y Z Ő K ÖN Y V E

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Programozási nyelvek JAVA EA+GY 1. gyakolat

Clang Static Analyzer belülről

SEGÉDLET a GYÓGYSZERÉSZI ADATGYŰJTÉS OSAP1578 program használatához

Átírás:

OOP #6 (VMT és DMT) v1.0 2003.03.07. 19:33:00 Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. e-mail: aroan@ektf.hu web: http://aries.ektf.hu/~aroan OOP OOP_06-1 -

E jegyzet másolata nem használható fel szabadon, az előadás anyagának kivonata. Ezen teljes jegyzetről, vagy annak bármely részéről bármely másolat készítéséhez a szerző előzetes írásbeli hozzájárulására van szükség. A másolatnak tartalmaznia kell a sokszorosításra vonatkozó korlátozó kitételt is. A jegyzet kizárólag főiskolai oktatási vagy tanulmányi célra használható! A szerző hozzájárulását adja ahhoz, hogy az EKF számítástechnika tanári, és programozó matematikus szakján, a tárgyat az EKF TO által elfogadott módon felvett hallgatók bármelyike, kizárólag saját maga részére, tanulmányaihoz egyetlen egy példány másolatot készítsen a jegyzetből. A jegyzet e változata még tartalmazhat mind gépelési, mind helyességi hibákat. Az állítások nem mindegyike lett tesztelve teljes körűen. Minden észrevételt, amely valamilyen hibára vonatkozik, örömmel fogadok. Hernyák Zoltán aroan@ektf.hu OOP OOP_06-2 -

Virtuális Metódus Tábla A késői kötés egy keresés -t jelent, meg kell határozni a ténylegesen meghívandó metódust A cél az, hogy ez a keresés a lehető legegyszerűbb kóddal, a lehető leggyorsabban megvalósuljon Ehhez egy plusz táblázat felépítése és megtartása szükséges: a Virtuális Metódus Táblázat (VMT) Virtuális Metódus Tábla OOP_06-3 -

Ezen táblázat mindig egy osztályhoz tartozik A VMT tábla induláskor megegyezik az ősének a VMT-jével (ha nincs ős, akkor induláskor üres) Ha az osztályban bevezetünk egy új virtuális metódust a virtual kulcsszóval, akkor ezen metódus bekerül a táblázatba (a végére) Ha az osztályban felüldefiniáltunk egy már létező virtuális metódust az override kulcsszóval, akkor a táblázatba ezen bejegyzés kicserélődik az új metódusra A táblázatban a metódusok indításához szükséges információk vannak eltárolva (pl. a metódusok memóriacímei, amely alapján azokat el lehet indítani) Virtuális Metódus Tábla OOP_06-4 -

class elso { public virtual int metodus_a() { } // a : új sor public virtual int metodus_d() { } // d : új sor public void metodus_c() { metodus_a(); } // nem virtuális! } class masodik:elso { public override int metodus_a() { } // a : módosító sor public virtual int metodus_b() { } // b : új sor } class elso VMT Int metodus_a() Int metodus_d() class masodik VMT Int metodus_a() Int metodus_d() Int metodus_b() elso.metodus_a elso.metodus_d masodik.metodus_a elso.metodus_d masodik.metodus_b Virtuális Metódus Tábla OOP_06-5 -

A késői kötés fordítása során olyan programkód kerül fordításra, amely a VMT táblázat alapján hozza meg a döntést, hogy melyik konkrét metódust kell meghívni. Az e.metodus_c() esetén az e példányhoz az class elso VMT tábla tartozik, hiszen az e példány az elso osztály egy példánya! Ezért a késői kötés a class elso VMT tábla szerint a metodus_a() hívás esetén az elso.metodus_a() metódust kell meghívni. A m.metodus_c() esetén az m példányhoz az class masodik VMT tábla tartozik, hiszen az m példány az masodik osztály egy példánya! Ezért a késői kötés a class masodik VMT tábla szerint a metodus_a() hívás esetén az masodik.metodus_a() metódust kell meghívni. Virtuális Metódus Tábla OOP_06-6 -

Előnyök: A késői kötést feloldó programkód rövid, egyszerű, gyors. Hátrányok: A VMT táblát el kell készíteni (fordítási idő) A példányokhoz a VMT táblát hozzá kell rendelni (futási idő) A VMT tábla túl sok memóriát köt le o Mindig legalább annyi sora van, mint az ős VMT táblának o Újabb sorokkal bővül, ha új virtuális metódust vezetünk be o Akkor is őriz egy bejegyzést, ha annak átdefiniálása nem történt meg (pl. class masodik VMT metodus_d() sor!) A VMT táblát a fordító program el tudja készíteni, és a VMT tábla eltárolásra kerül a futtatandó állományban. A példányhoz rendelést a konstruktor teszi meg, automatikusan (generált programkód) Virtuális Metódus Tábla OOP_06-7 -

Dinamikus Metódus Tábla A szerepe megfelel a VMT-nek (késői kötés feloldását támogatni) Kevesebb memóriaigénye van, mint a VMT-nek Lassúbb a kezelése Felépítése: Hasonló, mint a VMT Osztályhoz van hozzárendelve A DMT induláskor üres Ha az osztályban bevezetünk egy új virtuális metódust a virtual kulcsszóval, akkor ezen metódus bekerül a táblázatba (a végére) Ha az osztályban felüldefiniáltunk egy már létező virtuális metódust az override kulcsszóval, akkor ez is bekerül a táblázatba Dinamikus Metódus Tábla OOP_06-8 -

A DMT mindig tartalmaz egy bejegyzést, hogy hol van az ős osztály DMT-je. Ha ilyen nincs, akkor azt a NIL jelzi. A táblázatban a metódusok indításához szükséges információk vannak eltárolva (pl. a metódusok memóriacímei, amely alapján azokat el lehet indítani) Lényeges különbség: a DMT induláskor nem tartalmazza az ős osztály DMT táblájának sorait. class elso DMT int metodus_a() int metodus_d() class masodik DMT int metodus_a() int metodus_b() ŐS DMT = NIL elso.metodus_a elso.metodus_d ŐS DMT = elso DMT masodik.metodus_a masodik.metodus_b Nem szerepel a class masodik DMT -ben a int metodus_d() sora, mert azt nem definiáltuk felül a masodik osztályban. Dinamikus Metódus Tábla OOP_06-9 -

A DMT alapján a késői kötés feloldás kódvázlata: P := példány.dmt kezdőcíme Ciklus amíg P<>NIL IF P-ben szerepel a keresett metódus Metódus meghívása Kilépés a ciklusból ENDIF P := P.ŐS_DMT tábla kezdőcíme CVÉGE Vagyis a DMT táblákban keresés során ha a jelenlegi DMT táblában nincs benne a keresett metódusról az információ, akkor visszalépünk az ős metódus DMT-jébe (masodik -> elso), és ott folytatjuk a keresést. Dinamikus Metódus Tábla OOP_06-10 -

Előnyök: A DMT táblák kevesebb memóriát kötnek le o Csak azon bejegyzések szerepelnek benne, amelyek ténylegesen változást szenvedtek el az ős DMT-hez képest Hátrányok: A késői kötést feloldó generált programkód bonyolultabb és lassúb A DMT táblát el kell készíteni (fordítási idő) A példányokhoz a DMT táblát hozzá kell rendelni (futási idő) Dinamikus Metódus Tábla OOP_06-11 -

Amely nyelvekben mindkettőt lehet használni, ott az a javaslat, hogy azon metódusokat kezeljük VMT technikával, amelyek hívása gyors kell legyen (sokszor hívjuk meg, pl. egy ciklus belsejében). Azokat tegyük DMT táblába, amelyeket az öröklés-továbbfejlesztés során felüldefiniálhatnak mások (bár erre előre láthatólag ritkán kerül majd sor), vagy a metódust ritkán hívják meg ezért nem számottevő a lassúbb kezelésből adódó lassúbb programfutás. Amely metódusokat nem szükséges, ne tegyük egyik táblába sem, mert feleslegesen kötünk le memóriát, és feleslegesen lassítjuk a program futását. Dinamikus Metódus Tábla OOP_06-12 -