OOP ÖRÖKLŐDÉS, INTERFÉSZ

Slides:



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

AZ OOP ALAPJAI.
C++ programozási nyelv Gyakorlat hét
Programozás III OOP ALAPOK.
Programozás III KOLLEKCIÓK 2..
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Adatbányászati technikák (VISZM185)
Ö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.
Öröklődés Polimorfizmus Csomagok Absztrakt osztályok, interfészek
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]
Vizuális modellezés Uml és osztálydiagram UML eszközök
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
Mutatók, tömbök, függvények
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/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# tagfüggvények.
Csomagok.
© 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.
A JAVA TECHNOLÓGIA LÉNYEGE Többlépcsős fordítás A JAVA TECHNOLÓGIA LÉNYEGE Platformfüggetlenség.
Ficsor Lajos Template-ek CPP8/ 1 Template-ek. Ficsor Lajos Template-ek CPP8/ 2 A template fogalma Kiindulási probléma: tetszőleges típusokon kellene ugyanolyan.
Ficsor Lajos CPP6 / 1 Virtuális bázisosztály Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
Objektumorientált tervezés és programozás II. 3. előadás
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:
A PHP 5 újdonságai Az OOP terén. Miről lesz szó? Osztályok kezelése – Új direktívák – Konstruktor – Destruktor Interfészek Kivételkezelés.
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.
Hernyák Zoltán Programozási Nyelvek II.
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ú,
Objektumorientált programozás
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
Java programozási nyelv Metódusok
Programozás III KOLLEKCIÓK.
1 Objektum orientált programozás Öröklődés: többszörös öröklődés, konstruktorok, destruktorok, overloading Nagy Szilvia.
Programozás III KIVÉTEL – CSOMAG. CSOMAGOK Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek. A Java is csomagok halmaza: csomagokban.
OOP ÖRÖKLŐDÉS, INTERFÉSZ
Programozás III OOP ALAPOK.
Programozás III OOP ÖRÖKLŐDÉS.
Programozás III KOLLEKCIÓK.
Objektumorientált alapjai ISZAM III.évf. részére Bunkóczi László.
Programozás III CSOMAG. CSOMAGOK Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek. A Java is csomagok halmaza: csomagokban van.
Ficsor Lajos CPP2 / 1 Származtatási mechanizmus a C++ nyelvben Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
Ficsor Lajos A C++ programozási nyelv I. CPP1/ 1 Osztály és objektum fogalma.
1 Objektum orientált programozás Az objektumok és az osztályok – példányosodás Nagy Szilvia.
Programozás I. 3. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 5. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 4. 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][,
A szoftver mint komplex rendszer: objektumorientált megközelítés.
a programegységek között
Programozási nyelvek típusossága.
Hernyák Zoltán Programozási Nyelvek II.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Előadás másolata:

OOP ÖRÖKLŐDÉS, INTERFÉSZ Programozás III OOP ÖRÖKLŐDÉS, INTERFÉSZ

OBJEKTUM-ORIENTÁLT PARADIGMA – ISMÉTLÉS Objektumok: egy egységben az adatok és a rajtuk végzett műveletek. (Egyszerre a modularitás és a struktúra elemei.) Az osztályokban megadjuk azokat a tulajdonságokat és viselkedéseket, amelyekkel az ebbe az osztályba tartozó objektumokat jellemezni akarjuk.  A hasonló tulajdonságokkal és viselkedéssel rendelkező objektumok egy osztályba kerülnek. Osztály (class): Olyan objektumminta vagy típus, mely alapján példányokat (objektumokat) hozhatunk létre. Minden objektum egy jól meghatározott osztályhoz tartozik.

OBJEKTUM-ORIENTÁLT PARADIGMA – ISMÉTLÉS Változók: osztályváltozó (static) – példányváltozó Metódusok: osztálymetódus (static) – példánymetódus Osztálymetódusnak nevezzük az olyan metódust, amely objektumok nélkül is tud dolgozni. Az osztálymetódus a példányadatokat nem éri el, csak az osztályváltozókat manipulálhatja. Egy osztálymetódus az osztályok közötti üzenettel hívható: Osztály.osztályMetódus

OBJEKTUM-ORIENTÁLT PARADIGMA – ISMÉTLÉS Az osztály, osztálystruktúra ábrázolása: UML diagram programkód A programtervezés egyik segítő eszköze az UML (Unified Modeling Language) Az UML egy szabványos, egységesített modellezőnyelv, amelynek segítségével a fejlesztési modellek rendkívül jól szemléltethetőek; a tervezés, a specifikáció, a dokumentálás grafikus formában, beszédes ábrák, diagramok, táblázatok segítségével végezhető.

UML – OSZTÁLYDIAGRAMOK

JAVA KÓD – OSZTÁLYDEFINÍCIÓ Fej: <módosító> class OsztályNév Pl.: public class Elso Törzs Változók deklarálása Metódusok deklarálása Egy osztály módosítói lehetnek: public: az osztály nyilvánosan hozzáférhető abstract : az osztály nem példányosítható final: nem lehet őse más osztálynak

JAVA KÓD – OSZTÁLYDEFINÍCIÓ Egy változó módosítói lehetnek: Hozzáférési módosítók: nincs : csomagszintű hozzáférés public : nyilvánosan hozzáférhető private : csak az osztályon belül érhető el protected : az osztályból és az utódokból érhető el Egyéb módosítók: static : osztályváltozót jelez final : konstans, a változó értéke nem változhat Egy metódus módosítói lehetnek: ugyanezek + egyéb módosítóként: abstract : a metódusnak nincs törzse

UML – OSZTÁLYDIAGRAMOK Jelölések: + public - private # protected static FINAL abstract

JAVA KÓD – OSZTÁLYDEFINÍCIÓ Objektumok létrehozása: a new operátor segítségével: OsztályNév objektum; objektum = new OsztályNév(paraméterlista); vagy: OsztályNév objektum = new OsztályNév(paramlista); (A new operátor hatására a rendszer lefoglal egy tárterületet az objektum számára.)

JAVA KÓD – OSZTÁLYDEFINÍCIÓ Kitérő (ismétlés – típusok): Egyszerű típus: azonosítójával közvetlenül hivatkozunk a változó memóriahelyére. Ezt a helyet a rendszer a deklaráló utasítás végrehajtásakor foglalja le. Referencia típus: A referencia típusú változók objektumokra mutatnak. Egy referencia típusú változó azonosítójával közvetve hivatkozunk az objektum memóriahelyére. (Maga a hivatkozás rejtve marad.) Deklaráláskor csak a referencia részére foglalunk tárterületet, maga az objektum a példányosítás során jön létre.

JAVA KÓD – OSZTÁLYDEFINÍCIÓ Mi „hozza létre” az objektumot? A konstruktor. Segítségével beállíthatjuk a változók kezdeti értékeit és elvégezhetünk olyan műveleteket, amelyeknek az objektum születésekor automatikusan kell végrehajtódniuk. Egy osztálynak több konstruktora is lehet. Definiálása: public Osztálynév(paraméterlista) { // inicializálás } this objektumreferencia: az aktuális objektumra mutató referencia pl.: this.nev;

JAVA KÓD – OBJEKTUM MEGSZÜNTETÉSE Mi „szünteti meg” az objektumot? A destruktor helyett: szemétgyűjtés Szemétgyűjtés (garbage collection): Felszabadítja a memóriát, de pontosan nem lehet tudni, hogy mikor. Dinamikus tárkezelés. Azokat az objektumokat tünteti el, amelyeket már senki sem használ.

JAVA KÓD – OBJEKTUMELÉRÉS Metódus elérése: pont operátorral Mező (adattag) elérése: set/get metódussal Pl.: Ember egyik=new Ember(); egyik.alszik(); System.out.println(egyik.getNev()); egyik.setHajSzin(”barna”);

OBJEKTUM-ORIENTÁLT PARADIGMA – 1. PÉLDA A múltkori diák-feladat: jó-e a konstruktor?:  Statikus változó nem lehet konstruktor paramétere! (És nem this-zel, hanem osztálynévvel hivatkozunk rá.)

KONSTRUKTOROK És ha megengedett mindkét példányosítás? (Azaz opcionális, hogy az elején beállítunk-e átlagot vagy sem.) Egymásba csúszó konstruktorok tervezési minta:

OBJEKTUM-ORIENTÁLT PARADIGMA – 1. PÉLDA Néha fordítva is szokás: Adattag csak akkor lehet publikus, ha static final!!!

OBJEKTUM-ORIENTÁLT PARADIGMA – PÉLDA A metódus: vagy: melyik a jó?

public static double terulet(…) KITÉRŐ – MÁSIK PÉLDA Melyik a jó metódus: vagy: Elvileg lehet-e jó a második változat? Hogyan kellene kijavítani, hogy tényleg jó is legyen? public static double terulet(…)

OBJEKTUM-ORIENTÁLT PARADIGMA – PÉLDA Hol használjuk fel a Diak típusú objektumokat? Egy másik osztályban: itt példányosítjuk őket, és itt állítjuk be a szükséges értékeket. Pl.: Hány konstruktora van a Diak osztálynak? Van-e automatikus (default) konstruktora? Mi a hiba? Beégetés!! 

Auth Gábor (volt pollackos ): Java-Forum/Java-suli: JAVA OSZTÁLYOK Jó és rövid () leírás: Auth Gábor (volt pollackos ): Java-Forum/Java-suli: http://www.javaforum.hu/javaforum/10/java_suli/java_suli/20/show/java_osztalyok

OBJEKTUM-ORIENTÁLT PARADIGMA – 1. PÉLDA Lehetséges felhasználások: Hol lehet ez a kódrészlet?

OBJEKTUM-ORIENTÁLT PARADIGMA – 1. PÉLDA Lehetséges felhasználások:

OBJEKTUM-ORIENTÁLT PARADIGMA – 1. PÉLDA Nincs még hibakezelés és csak egyszavas adatokra működik. Több szavas névhasználathoz be kellene állítani a scannert:

OBJEKTUM-ORIENTÁLT PARADIGMA – 1. PÉLDA Lehetséges felhasználások:

OBJEKTUM-ORIENTÁLT PARADIGMA – 2. PÉLDA Az italokat jellemzi az ital fajtája, vonalkódja, mennyisége, literenkénti egységára, és a tényleges eladási ár, amely már az ÁFA értékét is tartalmazza. Mezők: italFajta, vonalKod, mennyiseg, egysegAr, afaKulcs Metódusok: int ar(), String toString(), get/set A konstruktor paraméterei: italFajta, vonalKod, mennyiseg, egysegAr

OBJEKTUM-ORIENTÁLT PARADIGMA – 2. PÉLDA Hogy lehet megoldani, hogy ne a „vendégnek” kelljen megadnia az ital egységárát? „Normalizálni” kell Két osztály: Az Ital osztály konstruktora: Ar osztály – ennek konstruktora:

OBJEKTUM-ORIENTÁLT PARADIGMA – 2. PÉLDA Ekkor rendeléskor ellenőrizni kell, hogy a kért ital szerepel-e az árlistán. Hol szerepelhet ez a kódrészlet? Csak a vezérlő osztályban, mert „alap”-osztályban NINCS kiíratás!!

OBJEKTUM-ORIENTÁLT PARADIGMA – 2. PÉLDA Ugyanez „alap”-osztályban: vagy valami ehhez hasonló.

OBJEKTUM-ORIENTÁLT PARADIGMA – 2. PÉLDA Vannak emberek, akik szeretnek inni.  Ezeket az embereket jellemzi a nevük, és van valamennyi pénzük. Rendelhetnek italt, majd kapnak számlát. Mezők: nev, emberPenze, fizetendo, (rendeltItalokListaja) Metódusok: void rendel(), String szamla(), (void fizet()), get/set A konstruktor paraméterei: nev, emberPenze

OBJEKTUM-ORIENTÁLT PARADIGMA – 2. PÉLDA A metódusok lehetséges megfogalmazása: A toString() ugyanilyen metódus, vagyis abban is lehet pl. elágazás. 

OBJEKTUM-ORIENTÁLT PARADIGMA – 3. PÉLDA Feladat: vannak dolgozók, kérdés az átlagfizetés, legidősebb, legfiatalabb ember, stb. class Dolgozo class Vezerlo egyetlen dolgozót jellemző – adatok – metódusok – adatok beolvasása – dolgozók példányosítása – adatok kiíratása – átlagfizetés kiszámolása – legidősebb meghatározása – legfiatalabb meghatározása – stb.

3. PÉLDA – LEHETSÉGES SZERKEZET helyett:

KITÉRŐ: DÁTUMKEZELÉS

OBJEKTUM-ORIENTÁLT PARADIGMA – ALAPELVEK Az OOP alapelvei: egységbezárás; öröklődés; polimorfizmus (sokalakúság) Egységbezárás (az információ elrejtése): Az objektumokat nem lehet kívülről nem várt módon manipulálni. Csak meghatározott metódusokon keresztül módosítható az állapot.

OBJEKTUM-ORIENTÁLT PARADIGMA – ALAPELVEK

OBJEKTUM-ORIENTÁLT PARADIGMA – ÖRÖKLŐDÉS Öröklés (inheritance): Az objektum-osztályok továbbfejlesztésének lehetősége. Ennek során a származtatott osztály örökli ősétől annak attribútumait és metódusait, de ezeket bizonyos szabályok mellett újakkal egészítheti ki, és meg is változtathatja. Azt a folyamatot, amikor egy már meglévő osztály fel-használásával, kiterjesztésével hozunk létre egy osztályt, öröklődésnek vagy kiterjesztésnek nevezzük Az eredeti osztályt ősosztálynak nevezzük az új, tovább-fejlesztett osztályt származtatott osztálynak. (szülő – superclass; gyerek – subclass).

OBJEKTUM-ORIENTÁLT PARADIGMA – ÖRÖKLŐDÉS Alapgondolat: a gyerekek öröklik őseik metódusait és változóit. Az ősosztály minden metódusa és adattagja a gyerekosztálynak is metódusa és adattagja lesz. (Feltéve, ha az ős megengedi.) A gyerek minden új művelete vagy adata egyszerűen hozzáadódik az örökölt metódusokhoz és adattagokhoz. Minden metódus, amelyet átdefiniálunk a gyerekben, a hierarchiában felülbírálja az örökölt metódust.

OBJEKTUM-ORIENTÁLT PARADIGMA – ÖRÖKLŐDÉS Öröklődés – pl.: eszik(): napi 3-szor alszik(): éjjel eszik(): napi 3-szor alszik(): órán is eszik(): napi 2-szer alszik(): éjjel

OOP – ÖRÖKLŐDÉS UML JELÖLÉSE

OBJEKTUM-ORIENTÁLT PARADIGMA – ÖRÖKLŐDÉS Utód adatai, küldhető üzenetek:

OBJEKTUM-ORIENTÁLT PARADIGMA – ÖRÖKLŐDÉS

OBJEKTUM-ORIENTÁLT PARADIGMA – ÖRÖKLŐDÉS Egy ősből több leszármaztatott osztályt is készíthetünk. Az öröklődési hierarchia mélysége tetszőleges. Egy származtatott osztálynak legfeljebb egy szülője lehet (pl.: Pascal, Java, C#) (öröklődési fa) több szülője is lehet (pl.: C++) – (öröklődési gráf) Metódusok törzsét megváltoztathatjuk, visszatérési típusát nem. A változók nevét, típusát sem változtatjuk. Új adatokkal és metódusokkal kiegészíthetjük az osztályt.

ÖRÖKLŐDÉS A JAVA-BAN Öröklődéshez az extends kulcsszót használjuk: [módosító] class UtodOsztaly extends OsOsztaly { //törzs }

ÖRÖKLŐDÉS A JAVA-BAN this objektumreferencia az aktuális objektumra hivatkozik super objektumreferencia a közvetlen ősosztályra hivatkozik változók elérése : super.getVáltozónév() metódusok elérése : super.metódusnév() Konstruktorok kérdése: az utódok nem öröklik a konstruktorokat, azok megírásáról magunknak kell gondoskodni. Az ős osztály konstruktorának meghívása: super ( paraméterek ) (a super() hivatkozás mindig a konstruktor legelső utasítása!)

ÖRÖKLŐDÉS A JAVA-BAN Az ősosztály konstruktorának meghívása: - (1) Ha van közvetlen konstruktorhívás (super kulcsszó), akkor a paraméterlistának megfelelő konstruktor hívódik meg az ősosztályban. - (2) Ha nincs közvetlen konstruktorhívás, de van az ősosztályban paraméterek nélküli konstruktor (pl.: default konstruktor), akkor az hívódik meg. (3) Ha nincs közvetlen konstruktorhívás, és az ősosztályban nincs paraméterek nélküli konstruktor, fordítási hiba keletkezik.

OOP – BIZTONSÁGI KÉRDÉSEK

ÖRÖKLŐDÉS A JAVA-BAN – LÁTHATÓSÁG Láthatóság (hozzáférési mód, védelem): Az utód csak azt láthatja, amit az ős megenged neki (amit nem tilt le). Nyilvános (public): mindenki láthatja – UML jelölés: + Privát (private): csak az osztály saját metódusai férhetnek hozzá – UML jelölés: - Védett (protected): csak az osztályból, leszármazottjaiból és a csomagból lehet hozzáférni. – UML jelölés: # Ha nincs módosító, akkor csak az aktuális csomag osztályai látják egymást.

ÖRÖKLŐDÉS A JAVA-BAN – TOVÁBBI MÓDOSÍTÓK final: ebből az osztályból semmi sem származtatható (előny: sebesség) a módosító használható változó és metódusnév előtt is. abstract: „kötelező” származtatni belőle magyarul: nem példányosítható. Az absztrakt metódust a származtatott osztályban felül kell írni (ott mondjuk meg, hogy mit is csináljon), egyébként a származtatott osztály is absztrakt lesz. FONTOS: Adattagok továbbra is private elérésűek legyenek – biztonsági okok.

ÖRÖKLŐDÉS – PÉLDA eszik(): napi 3-szor alszik(): éjjel alszik(): órán is eszik(): napi 2-szer alszik(): éjjel

A PÉLDA JAVA MEGVALÓSÍTÁSA Helyesen: születési év + eletkor() metódus

A PÉLDA JAVA MEGVALÓSÍTÁSA 

A PÉLDA JAVA MEGVALÓSÍTÁSA 

A PÉLDA JAVA MEGVALÓSÍTÁSA

OBJEKTUM-ORIENTÁLT PARADIGMA – ALAPELVEK Sokalakúság (polimorfizmus – polymorphism): Ugyanarra a kérelemre a különböző objektumok különböző-képpen reagálnak. (Pl. nem ugyanúgy tanul() egy Fiú, mint egy Lány.) A származtatás során az ős osztályok metódusai újraírás nélkül is képesek legyenek az új, átdefiniált metódusok használatára. Ezt virtuális metódusokon keresztül érhetjük el. Egyes nyelvekben minden metódus virtuális (pl.: Java). Más nyelvekben a metódusoknál külön jelezni kell, hogy melyik a virtuális (pl.: Delphi, C#, C++)

OBJEKTUM-ORIENTÁLT PARADIGMA – ALAPELVEK Sokoldalúság (polimorfizmus) – példa: Definiáljuk az egyes osztályokat: Fiú – aki egy Diák { void tanul(){ inkább nagyvonalúan } } Lány – aki egy Diák { void tanul(){ inkább alaposabban } Definiáljunk egy Diak típusú diakok tömböt, és hívjuk meg: diakok[i].tanul() A fordítóprogram itt még nem tudja, hogy itt fiúról vagy lányról van szó, ez futáskor derül ki. (Futás alatti kötés.)

OOP ALAPELVEK – ÖSSZEFOGLALVA Objektumok: egy egységben az adatok és a rajtuk végzett műveletek. (Egyszerre a modularitás és a struktúra elemei.) Egységbezárás (az információ elrejtése): Az objektumokat nem lehet kívülről nem várt módon manipulálni. Csak meghatározott metódusokon keresztül módosítható az állapot. Öröklés: Létrehozhatók már létező típusok specializációi, melyek használhatják (és bővíthetik) a létező típusok műveleteit anélkül, hogy újra meg kellene valósítani őket. Polimorfizmus: A referenciák különböző típusú objektumokra hivatkozhatnak, és a hivatkozott objektumoktól függő viselkedést produkálhatnak.

ÖRÖKLŐDÉS A JAVA-BAN

DE megvalósítható a többszörös öröklődés is. ÖRÖKLŐDÉS A JAVA-BAN JAVA-ban csak egyszeres öröklődés van – pedig néha kellene többszörös is. (Pl. lakókocsi) DE megvalósítható a többszörös öröklődés is. Mi az oka a többszörös öröklődéstől való idegenkedésnek? a többszörös öröklődés problémát jelenthet a fordító számára (pl.: káró típusú öröklési lánc) biztonsági okok (a hackerek könnyen kihasználhatják ezt a problémát)

KÁRÓ TÍPUSÚ ÖRÖKLÉSI LÁNC Alaposztály változó metódus() Utód 1_A … Utód 1_B … Utód 2 … Probléma: az Utód2 osztály kétszeresen örökölné az alaposztály tulajdonságait, ez pedig nem lehetséges.

TÖBBSZÖRÖS ÖRÖKLÉS – MEGOLDÁS: INTERFÉSZ Az interfész konstans értékek és absztrakt metódusok deklarációjának az összessége. vagyis: a metódusok törzs nélkül vannak deklarálva önmagában nem használhatók, implementálni kell őket az implementációt egy-egy osztály végzi

TÖBBSZÖRÖS ÖRÖKLÉS – MEGOLDÁS: INTERFÉSZ Interfész létrehozása: [módosítók] interface InterfeszNev [extends…] { //absztrakt metódusok } – az interfész módosítója csak publikus lehet – az absztrakt metódusok csak publikusak lehetnek – az interfész alapértelmezésben absztrakt (nem lehet példányosítani)

TÖBBSZÖRÖS ÖRÖKLÉS – MEGOLDÁS: INTERFÉSZ Interfész implementálása: [módosítók] class OsztályNév implements InterfészNév{ //absztrakt metódusok } Több intrefész implementálása esetén vesszővel felsoroljuk az implements kulcsszó után az összes interfész nevét KÖTELEZŐ AZ ÖSSZES ABSZTRAKT METÓDUS IMPLEMENTÁLÁSA!!!

TÖBBSZÖRÖS ÖRÖKLÉS – MEGOLDÁS: INTERFÉSZ Egy osztály több interfészt is implementálhat: Interfészek között is létezik öröklődés – jelölése szintén az extends kulcsszó. Ezért alkalmas a többszörös öröklés megvalósítására!!! Sőt, interfészek között többszörös öröklődés is lehet:

INTERFÉSZ – UML (PÉLDA)

INTERFÉSZ – PÉLDA

INTERFÉSZ – PÉLDA

INTERFÉSZ – PÉLDA Lehet-e egy forrásfájlban az összes?

INTERFÉSZ – PÉLDA Fordításkor létrejött fájlok: Ital.class Alkohol.class Sor.class Pelda.class Eredmény:

INTERFÉSZ ALKALMAZÁSOK Interfész „saját” alkalmazása: Ha nagy a projekt, és többen dolgoznak rajta, akkor először célszerű felületeket tervezni interface alapon, azután jöhet az osztálygyártás. – Az interfész egy vázat ad (egy tervrajz). A Java sok „kész” interfészt használ: A Java fejlődése: Egy új igény esetén születik egy jsr (Java Service Request) felület-definíció (interface), majd a gyártók elkészítik a saját megvalósításaikat. Ilyen pl. jdbc. A jdbc egy interface gyűjtemény (felület), amelyet minden adatbázisgyártó implementál. A grafikus csomagok is sok interfészt használnak.