Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Programozás III OOP ÖRÖKLŐDÉS.

Hasonló előadás


Az előadások a következő témára: "Programozás III OOP ÖRÖKLŐDÉS."— Előadás másolata:

1 Programozás III OOP ÖRÖKLŐDÉS

2 OBJEKTUM-ORIENTÁLT PARADIGMA – ISMÉTLÉS
osztály – objektum - példányosítás konstruktor fogalma, szerepe helyette: „szemétgyűjtés” – garbage collection destruktor? set/get metódusok

3 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

4 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

5 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

6 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.)

7 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.

8 OBJEKTUM-ORIENTÁLT PARADIGMA – ISMÉTLÉS
Példa: A diákra jellemző a neve, EHA-kódja és az átlaga. Bizonyos átlag felett a hallgató az átlagának valahányszorosát kapja meg ösztöndíjként, ennél rosszabb átlag esetén nem kap ösztöndíjat. Olvassuk be n diák adatait és írassuk is vissza ezeket a megfelelő ösztöndíj értékekkel együtt!

9 OBJEKTUM-ORIENTÁLT PARADIGMA – ISMÉTLÉS
Példa:

10 OBJEKTUM-ORIENTÁLT PARADIGMA – ISMÉTLÉS
Példa:

11 OBJEKTUM-ORIENTÁLT PARADIGMA – ISMÉTLÉS
Példa:

12 OBJEKTUM-ORIENTÁLT PARADIGMA – ISMÉTLÉS
Elegánsabb kiíratás:

13 OBJEKTUM-ORIENTÁLT PARADIGMA – ISMÉTLÉS
A metódus: vagy: melyik a jó?

14 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(…)

15 OBJEKTUM-ORIENTÁLT PARADIGMA – PÉLDA
Miért nem jó? Még egy kérdés: Miért nem jó, ha mindent a beolvasás metódusban oldunk meg? (összegzést, max-keresést, stb.)

16 JAVA KONSTRUKTOR – ISMÉTLŐ PÉLDA
Mi a baj? Nem jön létre a példány.

17 OBJEKTUM-ORIENTÁLT PARADIGMA – ALAPELVEK (ism)
Az OOP alapelvei: Egységbezárás (encapsulation): az adatokat és a hozzájuk tartozó eljárásokat egyetlen egységben kezeljük (objektum-osztály) Öröklés (inheritance): az objektum-osztályok tovább-fejlesztésének lehetősége. Ennek során a származtatott osztály örökli ősétől azok attribútumait és metódusait, de ezeket bizonyos szabályok mellett újakkal egészítheti ki, és meg is változtathatja. 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.)

18 OBJEKTUM-ORIENTÁLT PARADIGMA – ALAPELVEK

19 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).

20 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.

21 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

22 Objektum-orientált paradigma – öröklődés
Utód adatai, küldhető üzenetek:

23 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, változók nevét, típusát általában nem. Új adatokkal és metódusokkal egészíthetjük ki az osztályt.

24 Ö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 }

25 Ö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!)

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

27 OOP – BIZTONSÁGI KÉRDÉSEK

28 Ö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 és az osztály leszármazottjaibó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.

29 Ö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.

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

31 A PÉLDA JAVA MEGVALÓSÍTÁSA
Helyesen: születési év + eletkor() metódus Helyesen: alap osztályban NINCS kiíratás.

32 A PÉLDA JAVA MEGVALÓSÍTÁSA
Esetleg más konstruktor?

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

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

35 KITÉRŐ – SZÜLETÉSI DÁTUM

36

37 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++)

38 OBJEKTUM-ORIENTÁLT PARADIGMA – ALAPELVEK
Sokoldalúság – 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 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.)

39 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.

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

41 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)

42 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.

43 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 üres törzzsel vannak deklarálva önmagában nem használhatók, implementálni kell őket az implementációt egy-egy osztály végzi

44 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!!!

45 INTERFÉSZ – UML (PÉLDA)

46 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)

47 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!!!

48 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:

49 INTERFÉSZ – PÉLDA

50 INTERFÉSZ – PÉLDA

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

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

53 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.

54


Letölteni ppt "Programozás III OOP ÖRÖKLŐDÉS."

Hasonló előadás


Google Hirdetések