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.
AZ OOP ALAPJAI.
C++ programozási nyelv Gyakorlat hét
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.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Bevezetés a Java programozásba
Fájlkezelés, IO Kivételkezelés Belső osztályok
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,
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
Java Típuskonverziók.
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.
A C++ programozási nyelvSoós Sándor 1/17 C++ programozási nyelv Gyakorlat - 7. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
Java programozási nyelv 3. rész – Osztályok I.
A C++ programozási nyelvSoós Sándor 1/10 C++ programozási nyelv Gyakorlat - 5. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
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.
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.
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 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 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.
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ú,
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.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Ficsor Lajos CPP2 / 1 Származtatási mechanizmus a C++ nyelvben Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
Típuskonverzió a C++ nyelvben
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. gyakorlat.
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][,
„Designer-barát” játéklogika
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
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 Az osztályhierachia fejlesztése közben egy adott szinten még nem tudunk megírni bizonyos metódusokat, de felhasználni már fel tudnánk ezeket a metódusokat… class TAltalanosGrafikusObjektum { public int X=0; public int Y=0; public void Kirajzol() { ???? } public void Letorol() { ???? } public void Elmozgat(int ujX, int ujY) { Letorol(); X = ujX; Y = ujY; Kirajzol(); } class TAltalanosGrafikusObjektum { public int X=0; public int Y=0; public void Kirajzol() { ???? } public void Letorol() { ???? } public void Elmozgat(int ujX, int ujY) { Letorol(); X = ujX; Y = ujY; Kirajzol(); }

3 class TAltalanosGrafikusObjektum {... public virtual void Kirajzol() {} public virtual void Letorol() {} } class TAltalanosGrafikusObjektum {... public virtual void Kirajzol() {} public virtual void Letorol() {} } class TKor:TAltalanosGrafikusObjektum { public double sugar = 0; public override void Kirajzol() {... konkrét kör kirajzolása... } public override void Letorol() {... konkrét kör letörlése... } class TKor:TAltalanosGrafikusObjektum { public double sugar = 0; public override void Kirajzol() {... konkrét kör kirajzolása... } public override void Letorol() {... konkrét kör letörlése... }

4 Vegyük észre, hogy a két metódus kötelezően virtuális, különben a korai kötés miatt az ‘Elmozgat()’ nem tudná meghívni a későbbi, elkészült fv-eket… Az előző megoldás azért nem ‘jó’, mert ugyan működik, de a TKor-t fejlesztő programozót senki sem figyel- mezteti, hogy a fenti két metódust neki lényegében kötelező megírnia! Ráadásul a két metódus törzse bár üres, de a generált kódban (.exe) benne van, és valahány byte-t elfoglal, feleslegesen…

5 A megoldás: az ilyen jellegű metódusokat meg kell jelölni az ‘abstract’ kulcsszóval. Ekkor a metódusok törzsét nem is kell kifejteni, de még jelölni sem! De ilyenkor az osztályt is meg kell jelölni! abstract class TAltalanosGrafikusObjektum { public int X=0; public int Y=0; public void abstract Kirajzol(); public void abstract Letorol(); public void Elmozgat(int ujX, int ujY) { Letorol(); X = ujX; Y = ujY; Kirajzol(); } abstract class TAltalanosGrafikusObjektum { public int X=0; public int Y=0; public void abstract Kirajzol(); public void abstract Letorol(); public void Elmozgat(int ujX, int ujY) { Letorol(); X = ujX; Y = ujY; Kirajzol(); }

6 Az absztrakt osztályokból nem szabad példányosítani (meghívni közvetlenül a konstruktorukat). Ez logikus, hiszen nincsenek készen! abstract class TAltalanosGrafikusObjektum { public void abstract Kirajzol(); public void abstract Letorol(); } abstract class TAltalanosGrafikusObjektum { public void abstract Kirajzol(); public void abstract Letorol(); } TAltalanosGrafikusObjektum VMT Kirajzol | --- nincs --- Letorol | --- nincs --- Kirajzol | --- nincs --- Letorol | --- nincs --- Az absztrakt metódusok automatikusan virtuálisnak minősülnek. De a VMT táblában még nem tud mi bekerülni, hiszen ezek a metódusok nincsenek meg!

7 abstract class TAltalanosGrafikusObjektum {... public abstract void Kirajzol(); public abstract void Letorol(); } abstract class TAltalanosGrafikusObjektum {... public abstract void Kirajzol(); public abstract void Letorol(); } class TKor:TAltalanosGrafikusObjektum { public double sugar = 0; public override void Kirajzol() {... konkrét kör kirajzolása... } public override void Letorol() {... konkrét kör letörlése... } class TKor:TAltalanosGrafikusObjektum { public double sugar = 0; public override void Kirajzol() {... konkrét kör kirajzolása... } public override void Letorol() {... konkrét kör letörlése... }

8 Mivel minden abstract metódus egyben virtuális is: - ezért a ‘virtual’ kulcsszót már nem kell kiírni ( nem is szabad ! ) - osztályszintű metódusok nem lehetnek abstract-ak - property is lehet abstract abstract class TValami {... public abstract int X { get; set; } } abstract class TValami {... public abstract int X { get; set; } }

9 A gyerekosztályban továbbra sem kötelező az összes absztrakt metódust és property-t kifejleszteni, de ez esetben a gyerekosztályt is meg kell jelölni az ‘abstract’ jelzővel, és a gyerekosztályból sem lehet példányosítani… Érdekesség: az ‘abstract’ jelzőt akkor is rátehetem egy osztályra, ha az egyáltalán nem tartalmaz egyébként absztrakt metódusokat. Ekkor a fordító- program nem fogja engedni, hogy példányosítsanak ebből az osztályból…

10 Egy objektumosztályt megjelölhetek ‘sealed’ kulcsszóval is. Ez azt jelenti, hogy az osztályt már nem lehet továbbfejleszteni (nem lehet más osztályok őse). A sealed (‘lepecsételt’) kulcsszót nem lehet az ‘abstract’ jelzővel együtt szerepeltetni… sealed class TBefejezett {... } sealed class TBefejezett {... }