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

Slides:



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

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.
Ö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.
Programozás alapjai.
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
Ö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]
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,
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Tömbök ismétlés Osztályok Java-ban Garbage collection
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# osztályok Krizsán Zoltán 1.0.
C# tagfüggvények.
6. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
5. előadás Parametrikus polimorfizmus. Generikus programozás
5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
© 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.
HEFOP 3.3.1–P /1.01 Az OOP elve A programozási paradigma (vagy elv) a számítógépes programok tervezésének és programozásának módszerét jelenti.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
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.
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.
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 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.
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ú,
Java programozási nyelv Metódusok
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.
1 Objektum orientált programozás Öröklődés: többszörös öröklődés, konstruktorok, destruktorok, overloading Nagy Szilvia.
Objektumorientált alapjai ISZAM III.évf. részére Bunkóczi László.
Ficsor Lajos CPP2 / 1 Származtatási mechanizmus a C++ nyelvben Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
2012. március 21. Paulik Áron.  Ha a függvényünk feladata olyan, hogy nem lenne értelme a visszatérési értéknek, vagy csak nincs rá szükség, void típusúként.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 5. gyakorlat.
5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. 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.
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][,
Hernyák Zoltán Programozási Nyelvek II.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
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
Öröklődés Objektumok közötti speciális kapcsolat.
Függvénysablonok használata
Előadás másolata:

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

2 Öröklődés : Egy új osztály fejlesztése egy már meglévő osztály felhasználásával. Az új osztály (gyermekosztály) eleve tartalmaz minden mezőt, és metódust az általa választott őstől. Lehetőség van az örökölt mezőket felhasználni, de új mezőket is felvenni (bővítés). Lehetőség van az örökölt metódusokat meghívni (mintha eleve a sajátunk lenne), és új metódusokat is definiálni.

3 Mezők öröklődésének szabályai: 1. minden mezőt öröklünk, még a private mezőket is 2. A private mezőkre nem tudunk az új osztályban közvetlenül hivatkozni, de közvetve igen (meghívunk egy örökölt metódust, amely a törzsében felhasználja a private mezőt) 3. Nem szoktunk ugyanolyan nevű mezőt bevezetni, mint amilyet már örököltünk, mert az zavaró… 4. A C# ezt megengedi, de megerősítést kér. 5. Ha mégis megtesszük, akkor ez újbóli definiálásnak számít, és ennek során akár a más mezőtípust is választhatunk. 6. De ez csak ‘elfedi’ az örököltet, meg nem változtatja azt!

4 class TGepJarmu { private int benzinMennyiseg = 0; public int tankMerete; // literben public void teleTankol() { benzinMennyiseg = tankMerete; } class TGepJarmu { private int benzinMennyiseg = 0; public int tankMerete; // literben public void teleTankol() { benzinMennyiseg = tankMerete; } class TAuto:TGepJarmu { public int szallithatoSzemelyek = 4; public bool tele_e_Tank() { return benzinMennyiseg==tankMerete; } class TAuto:TGepJarmu { public int szallithatoSzemelyek = 4; public bool tele_e_Tank() { return benzinMennyiseg==tankMerete; }

5 class TElso { private int x; protected int y; public int z; } class TElso { private int x; protected int y; public int z; } class TMasodik:TElso { public double x; public string y; public float z; } class TMasodik:TElso { public double x; public string y; public float z; } class THarmadik:TElso { public double x; new public string y; new public float z; } class THarmadik:TElso { public double x; new public string y; new public float z; }

6 Mezők öröklődésének szabályai: Egy private mezőt a gyermekosztály eleve nem is ‘látja’, ezért ugyanolyan nevű bevezetésének nincs semmi akadálya. A protected, public mezőket viszont ‘látja’, ezért ugyanolyan nevű mező bevezetéséhez a C# megerősítést kér, ez a ‘tudom mit csinálok’ jelzés. A kulcsszó ‘new’!

7 class TElso { public int z = 1; public int akarmi() { return z+1; } class TElso { public int z = 1; public int akarmi() { return z+1; } class TNegyedik:TElso { new public float z =5.1; } class TNegyedik:TElso { new public float z =5.1; } TNegyedik N = new TNegyedik(); double f = N.z; int g = N.akarmi(); TNegyedik N = new TNegyedik(); double f = N.z; int g = N.akarmi(); Mennyi? Miért?

8 Mezők öröklődésének szabályai: Egy fejletteb osztályban felüldefiniálhatunk egy mezőt, de ezt a tényt az ős osztály nem érzékeli. Az ős osztály metódusai még mindig az ő eredeti mezőjét ‘látja’. Ha viszont tovább származtatunk az új gyerek- osztályból, az ő leszármazottjai már az új mezőt ‘látják’ ( elfedés ).

9 Metódusok öröklődésének szabályai: Ha a metódus paraméterezését megváltoztatjuk, akkor az overloading szabályai vonatkoznak rá (nem fedi el az eredetit). Egy fejletteb osztályban felüldefiniálhatunk egy metódust, de ezt a tényt az ős osztály nem érzékeli. Az ős osztály metódusai még mindig az ő eredeti metódusukat ‘látja’ csak.

10 class TElso { public int szamol() { return 10; } public int akarmi() { return szamol()+1;} } class TElso { public int szamol() { return 10; } public int akarmi() { return szamol()+1;} } class TOtodik:TElso { new public int szamol() { return 20; } public int akarmi(int x ) { return szamol()+x; } } class TOtodik:TElso { new public int szamol() { return 20; } public int akarmi(int x ) { return szamol()+x; } } TElso E = new TElso(); int ne = E.akarmi(); 11! Miért? TOtodik O = new TOtodik(); int no = O.akarmi(10); 30! Miért? Miért nem kell a new ?

11 class TElso { public int szamol() { return 10; } public int akarmi() { return szamol()+1;} } class TElso { public int szamol() { return 10; } public int akarmi() { return szamol()+1;} } class THatodik:TElso { new public int szamol() { return 20; } new public int akarmi() { return szamol()+1;} } class THatodik:TElso { new public int szamol() { return 20; } new public int akarmi() { return szamol()+1;} } THatodik H = new THatodik(); int nh = H.akarmi(); 21! Miért? Miért kell a new? Jó ez a megoldás?

12 Metódusok öröklődésének szabályai: A gyerekosztálybeli ‘new’ metódusokat az ős osztály nem érzékeli, nem tudja használni. Ennek oka a ‘korai kötés’ (early binding). Korai kötés során a fordító program fordításkor összeköti a metódushívást egy konkrét metódusváltozattal. A TElso.akarmi()-ben lévő fv hívás ( szamol() ) összekötésre kerül egy konkrét metódussal, jelen esetben ez az TElso.szamol változattal.

13 A korai kötés: A korai kötés miatt értelmetlennek tűnik ugyanolyan nevű és paraméterezésű metódus létrehozása (new). Ezt a metódust már csak a belőle származtatott osztályok láthatják, visszamenőleg nem érvényesül. A késői kötés: A másik lehetőség a késői kötés, melyet később ismertetünk a virtuális metódusok kapcsán.