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

Hasonló dokumentumok
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ási nyelv 4. rész Osztályok II.

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

C++ programozási nyelv Konstruktorok-destruktorok

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

Osztályok. 4. gyakorlat

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

Java és web programozás

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

A C++ öröklés. (Előfeltétel: 12. tétel ismerete)

C++ programozási nyelv Struktúrák a C++ nyelvben

JAVA PROGRAMOZÁS 2.ELŐADÁS

Pénzügyi algoritmusok

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ási nyelv 5. rész Osztályok III.

Java és web programozás

Java és web programozás

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

Programozási alapismeretek 4.

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

és az instanceof operátor

Programozási nyelvek Java

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

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

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

3. Osztályok II. Programozás II

Objektumorientált szoftverfejlesztés alapjai

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

OOP #14 (referencia-elv)

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Elemi Alkalmazások Fejlesztése II.

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

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?

BME MOGI Gépészeti informatika 8.

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

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

Programozási nyelvek Java

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

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

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

Öröklés és Polimorfizmus

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?

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

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

Objektumok inicializálása

Objektumorientált programozás C# nyelven

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

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

C++ programozási nyelv

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

ISA szimulátor objektum-orientált modell (C++)

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

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

C++ programozási nyelv

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

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

Bevezetés a Python programozási nyelvbe

Szoftvertechnolo gia gyakorlat

Programozási nyelvek Java

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

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

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

Származtatási mechanizmus a C++ nyelvben

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

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

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

Programozás C++ -ban

Java programozási nyelv

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

Programozás I. Első ZH segédlet

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

Osztály és objektum fogalma

Segédanyag: Java alkalmazások gyakorlat

Java IX. telkezelés a Java-ban

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

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

Programozás C++ -ban

Java IX. telkezelés a Java-ban

Smalltalk 3. Osztályok létrehozása. Készítette: Szabó Éva

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

OOP: Java 8.Gy: Gyakorlás

4. Gy: JAVA osztályok

Programozási nyelvek Java

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

JAVA PROGRAMOZÁS 3.ELŐADÁS

Globális operátor overloading

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

Programozás módszertan p.1/46

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

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

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

OOP. Alapelvek Elek Tibor

Osztályok, objektumok

A C programozási nyelv V. Struktúra Dinamikus memóriakezelé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 gyakorlat. 8. Operátor túlterhelés

Java Programozás 11. Ea: MVC modell

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

Programozás C++ -ban 2007/7

Átírás:

Java 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. ( Előfeltétel 12. Tétel ) Az osztály egy olyan típus leíró struktúra, amely tartalmaz adattagokat és metódusokat, amelyek segítségével az adattagokon műveleteket végezhetünk. Az osztályt, mint típust új objektumok definiálására használjuk, hogy azzal további műveleteket végezzünk. Emellett maximálisan támogatja az öröklődést, a polimorfizmust(virtuális függvények) és az egységbezárást, amik az objektum orientált programozás alapkövei. Egy osztálydefiníció egy új típust hoz létre,. Az osztály használatához létre kell hozni a típushoz tartozó objektumot. Ezt nevezzük az osztály példányának. Az osztály objektumát a beépített típusokba tartozó változókhoz hasonlóan vehetjük fel. Másik megoldással, ha dinamikusan akarjuk létrehozni, akkor a new operátorral tehetjük ezt meg. A delete operátorra itt nincs szükség, mivel az automatikus szemétgyűjtésnek köszönhetően a már nem használt dinamikusan lefoglalt memóriát a java automatikusan felszabadítja. A Java minden new operátorral lefoglalt memóriaterületről referenciaszámlálót vezet, azaz területenként számolja rá a hivatkozó referenciákat. Amikor új hivatkozás van az objektumra, akkor megnöveli a számlálót, amikor a hivatkozás megszűnik, akkor csökkenti. Amikor már nincs hivatkozás több, akkor felszabadítja a lefoglalt memóriaterületet. Ez az automatikus szemétgyűjtés. Figyelem ez nem azt jelenti, hogy a felszabadításnál minden osztályon belüli objektum törlődik, ez csak részben igaz. Helyette lehetőségünk van protected void finalize() funkciót írni, ami az objektum megsemmisülése előtt lefut, és a megmaradt saját dinamikusan létrehozott objektumainkat eltakarítja a memóriából. A tagokat a. operátorral érhetjük el a C vagy C++ struktúrák elemeihez hasonlóan. Az osztály tagjainak elérhetőségét a protected, public és private hozzáférés módos1tókkal állíthatjuk be. Alapértelmezésként minden osztályon belüli tag, ha külön nem adjuk meg private-nak minősül. Az egységbezárás: ua. C++. A konstruktor: ua. C++. A destruktor: nincs. Automatikus szemétgyűjtés + finalize funkció. Tagfüggvényeken belül a this: ua. C++. A static kulcsszó: ua., mint C++, csak Java-ra vetítve. Ugyanarra használjuk, mint C++ - ban, csak más szintaktikával. Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*; class CEmberek private static String m_cnev; protected int icounter; public CEmberek() public CEmberek(String sparam) public void SetNev(String sparam) ; public String GetNev() return m_cnev; class CProgramozo extends CEmberek public CProgramozo() public CProgramozo(String sparam) 1

; public class Main extends CProgramozo public Main() public Main(String sparam) public static void main(string[] args) Main foprogram = new Main(); Main foprogram2 = new Main("Attila"); Kimenet: Most nézzünk példát a szemétgyűjtésre ugyanezzel a példaprogrammal, csak kiegészítjük egy finalize függvénnyel a Chair osztályt. Most a Chair osztály működése a lényeg. import java.io.*; import java.text.*; import java.util.*; import extra.*; class CEmberek private static String m_cnev; protected int icounter; public CEmberek() public CEmberek(String sparam) public void SetNev(String sparam) public String GetNev() return m_cnev; ; class CProgramozo extends CEmberek public CProgramozo() ; public CProgramozo(String sparam) 2

class Chair static boolean gcrun = false; static boolean f = false; static int created = 0; static int finalized = 0; int i; Chair() i = ++created; if(created == 47) System.out.println("Létrehozva 47"); f = true; protected void finalize() if(!gcrun) gcrun = true; System.out.println("finalize kezdődik miután " + created + " Szék létrejött"); if(i == 47) System.out.println("finalize folyamatban Chair #47, " + "Itt már nem kreálunk több széket."); finalized++; if(finalized >= created) System.out.println("Minden " + finalized + " felszabadult"); public class Main extends CProgramozo public Main() public Main(String sparam) public static void main(string[] args) Main foprogram = new Main(); Main foprogram2 = new Main("Attila"); boolean belotte = false; System.out.println("Most szívjuk a memóriát"); while(!chair.f) new Chair(); if( belotte ) System.out.println("garbagecollection():"); System.gc(); System.out.println("runFinalization():"); System.runFinalization(); if(!belotte) System.runFinalizersOnExit(true); System.out.println ( "Miután minden szék létre lett hozva:\n" + "összes létrejött = " + Chair.created + ", összes finalize = " + Chair.finalized); System.out.println("viszlát!"); Kimenet: Most szívjuk a memóriát Létrehozva 47 Miután minden szék létre lett hozva: összes létrejött = 47, összes finalize = 0 viszlát! 3

finalize kezdődik miután 47 Szék létrejött finalize folyamatban Chair #47, Itt már nem kreálunk több széket. Minden 47 felszabadult Kimenet, ha a boolean belotte = true: Most szívjuk a memóriát Létrehozva 47 garbagecollection(): finalize kezdődik miután 47 Szék létrejött finalize folyamatban Chair #47, Itt már nem kreálunk több széket. Minden 47 felszabadult runfinalization(): Miután minden szék létre lett hozva: összes létrejött = 47, összes finalize = 47 viszlát! Egy meglévő osztályból újat származtathatunk azáltal, hogy a meglévő osztály nevét feltüntetjük az új osztály deklarációjában. A már meglévő osztályt ősosztálynak, az új osztályt származtatott osztálynak nevezzük. Csak itt extends a neve a dolognak, nem COsztály : public Ősosztály. A származtatott osztály örökli az ősosztály minden tagját, a származtatott osztályt új tagokkal láthatjuk el (változók, függvények). A származtatott osztály konstruktora explicit módon inicializálhatja az ősosztályát azáltal, hogy paramétereket ad át az ősosztály konstruktorának. Ha a származtatott osztály konstruktora expliciten nem inicializálja az ősosztály konstruktorát, akkor a fordító automatikusan az ősosztály konstruktorát hívja meg. Lásd super kulcsszó használata a fenti példákban. A származtatott osztályok hierarchiájában minden osztály adott tagfüggvényének saját változatával rendelkezhet. Ha ez a függvény virtuális is egyben, akkor ennek meghívásakor mindig az aktuális objektum típusának megfelelő változat fog lefutni, még akkor, ha a hívás egy ősosztályra mutató mutatón keresztül történik. A virtuális függvények a polimorfizmus is támogatják, azaz egyetlen utasítás segítségével több, különféle művelet futhat le, és hogy éppen melyik, az a szóban forgó objektum típusától függ. A virtuális függvények segítségével egyszerű, általános célú rutinok írhatóak, amelyek különböző, de egymással kapcsolatban álló objektumok széles választékát tudják kezelni. A virtuális függvények segítségével továbbá lehetőség van az ősosztály viselkedésének módosítására anélkül, hogy a forráskódon módosítanánk. Amikor a származtatunk, akkor a kód megkettőzése és a lehetséges egyéb redundanciák elkerülése cél. A virtuális függvények az objektum orientált programozás egy fontos vonását támogatják, a polimorfizmust(többalakúság). Akkor beszélünk többalakúságról, ha egyetlen utasítással többfajta különböző művelet hajtható végre, és az, hogy éppen melyik, attól függ, hogy éppen melyik objektumról van szó. Az öröklés előnyei:ua. C++. import java.io.*; import java.text.*; import java.util.*; import extra.*; class CEmberek private static String m_cnev; protected int icounter; public CEmberek() public CEmberek(String sparam) 4

public void SetNev(String sparam) public String GetNev() return m_cnev; public void Azonosit() System.out.print("En CEmberek vagyok\n"); ; class CProgramozo extends CEmberek public CProgramozo() public CProgramozo(String sparam) public void Azonosit() System.out.print("En CProgramozo vagyok\n"); ; public class Main extends CProgramozo public Main() public Main(String sparam) 5

public void Azonosit() System.out.print("En Main vagyok\n"); public static void main(string[] args) Main foprogram = new Main(); foprogram.azonosit(); Main foprogram2 = new Main("Attila"); foprogram2.azonosit(); Kimenet: En Main vagyok En Main vagyok 6