Öröklés és Polimorfizmus

Hasonló dokumentumok
Objektumorientált programozás C# nyelven

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

JAVA PROGRAMOZÁS 2.ELŐADÁS

Objektumorientált programozás C# nyelven

Osztályok. 4. gyakorlat

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

Alkalmazott Modul III 6. előadás. Objektumorientált programozás: öröklődés és polimorfizmus

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

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

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

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozás módszertan p.1/46

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

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.

Programozási nyelvek Java

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

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

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

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

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

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

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

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

OOP #14 (referencia-elv)

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

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

Alkalmazott modul: Programozás 11. előadás. Objektumorientált programozás: öröklődés

Objektumorientált programozás C# nyelven II.

Programozási nyelvek Java

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

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

BME MOGI Gépészeti informatika 8.

Származtatási mechanizmus a C++ nyelvben

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?

Programozási alapismeretek 4.

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

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

OOP és UML Áttekintés

Interfészek. PPT 2007/2008 tavasz.

Web-technológia PHP-vel

é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ás II gyakorlat. 6. Polimorfizmus

C++ programozási nyelv

JAVA PROGRAMOZÁS 3.ELŐADÁS

Programozási nyelvek Java

Programozási Paradigmák és Technikák

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

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

OOP: Java 5.Gy: Osztály, referencia, konstruktor

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

Vizuális programozás Komplex számok

Programozás II. labor

OOP. Alapelvek Elek Tibor

Objektumorientált szoftverfejlesztés alapjai

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

Objektumorientált programozás C# nyelven II.

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

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

Adatstruktúrák, algoritmusok, objektumok

OOP alapok Egy OOP nyelvet három fontos dolog jellemez. egységbezárás ( encapsulation objektumoknak öröklés ( inheritance

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

Objektumelvű programozás

III. OOP (objektumok, osztályok)

Osztály és objektum fogalma

Java III. I I. Osztálydefiníció (Bevezetés)

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Java III. I I. Osztálydefiníció (Bevezetés)

Objektumorientált programozás IX. Osztályok, objektumok

Programozás I. Első ZH segédlet

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

Java és web programozás

Java VII. Polimorfizmus a Java nyelvben

Java VII. Polimorfizmus a Java nyelvben

Programozás. Osztályok, Származtatott osztályok. Fodor Attila

Java és web programozás

Programozási technológia

Szoftvertechnológia 4. előadás. Objektumorientált tervezés: általánosítás. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

58. Osztály, objektum fogalma, implementációs lehetőségek(shagreen) 59. Egységbezárás (elvi háttere, gyakorlati megvalósítás) (Shagreen)

OOP: Java 7.Gy: Öröklődés, referenciák

3. gyakorlat. Objektumorientált programozás

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

OOP: Java 8.Gy: Gyakorlás

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

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Elemi Alkalmazások Fejlesztése II.

Objektum Orientált Programozás. 5. JAVA osztályok 21/1B IT MAN

Globális operátor overloading

ELTE SAP Excellence Center Oktatóanyag 1

7. K: JAVA alapok Konzultáció

A C++ szigorúbban kezeli a típuseltéréseket, mint a C nyelv Lehetséges típuskonverziók:

Programozás II. labor

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Már megismert fogalmak áttekintése

Programozás módszertan

Java és web programozás

Eseményvezérelt alkalmazások fejlesztése II 1. előadás. A.NET keretrendszer és a C# programozási nyelv. A.NET keretrendszer Eredete

Objektumorientált Programozás C++ ADATSZERKEZETEK ÉS ALGORITMUSOK 2. GYAKORLAT

Átírás:

Öröklés és Polimorfizmus Egy létező osztályból egy (vagy több) újat készítünk A létező osztályt ősnek, az újakat utódnak nevezzük Az utódok öröklik az ős minden tagját Az utódok az öröklött tagokat újakkal bővíthetik Az öröklés használata egyszerűbbé és átláthatóbbá teszi a programot Öröklés fogalma Specializáció: Az ősosztályt (álatlános) készítjük el először, ebből pedig az utódokat (speciális). Generalizáció: Az utódokat készítjük el először, majd ezekből a közös tagok kiemelésével az őst. class Osztálydiagram Hajó - merülésimélység: int + Úszik() : void Jármű - sebesség: int - utasokszáma: int + Szállít() : void Repülő - szárnyfesztáv: int + Repül() : void Öröklési szemléletmódok 1

Minden osztály egyszerre lehet ős és utód is Ebből egy osztályhierarchia alakul ki, amelyben az osztályok fát alkotnak A legtöbb OOP nyelvben az osztályhierarchia csúcsán az Object nevű osztály található Osztályhierarchia class UtódOsztályNév : ŐsOsztályNév adattagok(ok) metódus(ok) Az utód örökli az ős összes adattagját, metódusát, tulajdonságát Az utódosztály deklarációjában csak azon tagok deklarációját kell elhelyezni, amelyek az ősben nem szerepelnek Öröklés C#-ban A konstruktor nem öröklődik Utódosztályból történő példánylétrehozáskor a konstruktorok meghívódása: Automatikus: az ősosztály alapértelmezett konstruktora hívódik Kézi: az ősosztály megfelelő paraméterekkel rendelkező konstruktora hívható Konstruktorok és az öröklés 2

class A int adattag; public A(int adat) adattag = adat; class A int adattag; public A(int adat) adattag = adat; class B : A public B(int ad) adattag = adat; Hibás! Nincs az ősnek alapértelmezett konstruktora! class B : A public B(int ad) : base(ad) Helyes! Konstruktor meghívása C#-ban Őstípusú referenciaváltozó hivatkozhat ős-, és utód típusú objektumra is Fordítva nem igaz Pl.: Hajó aurora = new Hajo(); Repülő blackbird = new Repülő(); Jármű columbia = new Repülő(); Jármű titanic = new Hajó(); Polimorfizmus Az őstől örökölt metódus elrejthető egy új változattal Az utódból készített objektumon keresztül az új változat érhető el Elrejtés szintaxisa az utódban: láthatóság new típus FüggvényNév(formális paraméterek) függvénytörzs Az ősbeli és az utódbeli függvényeknek a szignatúrája (neve és paraméterei) meg kell, hogy egyezzen Az őstől örökölt változat meghívható a base kulcsszó használatával Metódus elrejtése (hiding) 3

Mint az elrejtés, ez is az őstől örökölt függvény egy új változatának elkészítésére használatos Csak olyan függvény definiálható felül, amely az ősben virtuálisnak lett deklarálva Szintaxis az ősben: láthatóság virtual típus FüggvényNév(formális paraméterek) függvénytörzs Szintaxis az utódban: láthatóság override típus FüggvényNév(formális paraméterek) függvénytörzs Az ősbeli és az utódbeli függvényeknek a szignatúrája (neve és paraméterei) meg kell, hogy egyezzen Az őstől örökölt változat meghívható a base kulcsszó használatával Függvény felüldefiniálása Nemvirtuális függvények esetén a referenciaváltozó típusának megfelelő függvény hajtódik végre Virtuális függvények esetén a hivatkozott objektum típusának megfelelő függvény hajtódik végre Virtuális vs. nem virtuális függvény class A public void MA() public virtual void MB() class B : A public new void MA() public override void MB() class Program static void Main() A aa = new A(); A ab = new B(); B bb = new B(); aa.ma(); aa.mb(); ab.ma(); ab.mb(); bb.ma(); bb.mb(); Virtuális vs. nem virtuális példa 4

Nem virtuális metódus megfelelő változatának meghívása ős típusú referencián keresztül: Explicit típuskonverzióval: A ab = new B(); ((B)ab).MA(); as operátorral: A ab = new B(); (ab as B).MA(); Virtuális vs. nem virtuális Absztrakt metódusok Absztrakt osztályok Az absztrakt metódusnak csak fejléce van, törzse nincs Deklarációjában a törzs helyett pontosvessző szerepel A metódus törzsét az osztály valamelyik utódjában kell megírni felüldefiniálással Az absztrakt metódust tartalmazó osztálynak absztraktnak kell lennie. Absztrakt osztályból nem lehet példányt létrehozni. láthatóság abstract típus FüggvényNév(formális paraméterek); Absztrakt metódus 5

abstract class Síkidom public abstract double Kerület(); public abstract double Terület(); class Téglalap : Síkidom double a, b; public Téglalap(double aa, double bb) a = aa; b = bb; public override double Kerület() return 2 * (a + b); public override double Terület() return a*b; class Program static void Main() Téglalap t1 = new Téglalap(10, 20); Console.WriteLine(t1.Kerület() +, +t1.terület()); Absztrakt metódus Statikus tagok Az osztályhoz tartoznak Az osztályon keresztül lehet őket elérni Statikus adattag deklarációja: láthatóság static típus adattagnév = kezdőérték; Statikus metódus deklarációja: láthatóság static típus FüggvényNév(formális paraméterek) függvénytörzs Statikus tagok elérése: OsztályNév.adattagnév OsztályNév.FüggvényNév(aktuális paraméterek) Statikus (osztályszintű) tagok 6

db = 3 :Pöttöm Panna Név: Pöttöm Panna Neptunkód: AAA111 :Hüvelyk Matyi Név: Hüvelyk Matyi Neptunkód: BBB222 :Babszem Jankó Név: Babszem Jankó Neptunkód: CCC333 class Hallgató static int db; string nev, neptunkod; public Hallgató(string n, string nk) nev = n; neptunkod = n; ++db; Statikus adattag 7