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

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.
Adatbányászati technikák (VISZM185)
Öröklődés 2..
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
© 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.
Objektum-elvű programozás (OOP)
Ö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
Az objektum-orientált tervezési alapelvek kritikai vizsgálata
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.
A C++ programozási nyelvSoós Sándor 1/14 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
A Java programozási nyelvSoós Sándor 1/16 Java programozási nyelv 6. rész – Java a gyakorlatban Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 3. rész – Osztályok I.
A Java programozási nyelvSoós Sándor 1/4 Java programozási nyelv 12. rész – Képek kezelése Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
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.
C# tagfüggvények.
C# tagfüggvények.
© 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.
OOP ÖRÖKLŐDÉS, INTERFÉSZ
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
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.
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 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.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
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.
Programozás III KIVÉTEL. KIVÉTELKEZELÉS Hibátlan program nincs!!! eddig hiba esetén leállt a program. Példa ilyen hibákra: ─ ArrayBoundsOfException (tömb.
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.
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.
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.
A szoftver mint komplex rendszer: objektumorientált megközelítés.
Programozási nyelvek típusossága.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Előadás másolata:

Java programozási nyelv 5. rész – Osztályok III. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember

Tartalomjegyzék Polimorfizmus, ismétlés Túlterhelés és öröklődés Változók és az öröklődés A hozzáférési kategóriák és az öröklődés Protected hozzáférési kategória Az osztályhierarchia Absztrakt osztályok és metódusok Absztrakt osztályok kiterjesztése Példa absztrakt osztályra Végleges osztályok és metódusok Órai gyakorló feladat

Polimorfizmus, ismétlés Egy gyermek rendelkezik őseinek minden tulajdonságával, ezért minden környezetben használható, ahol az ős használható. Az automatikus típuskonverzió révén egy „ős” típusú változónak értékül adható egy „gyerek” típusú. Ezt nevezzük polimorfizmusnak. Egy változónak van statikus és dinamikus típusa: statikus típus: ami a deklarációban szerepel (állandó) dinamikus típus: az objektum pillanatnyi típusa (változhat) A polimorfizmus a metódusok felüldefiniálása révén teljesedik ki.

Túlterhelés és öröklődés Mi történik akkor, ha egy olyan osztályt terjesztünk ki, amiben vannak azonos nevű, túlterhelt metódusok? Ha ilyenkor felüldefiniálunk egy metódust, akkor az csak a pontosan azonos szignatúrájú metódust definiálja felül, a többit nem. A döntés fordítási időben történik, ezért a fordító csak a statikus típust tudja figyelembe venni, a dinamikusat nem.

Változók és az öröklődés A kiterjesztett osztály ősének minden változóját örökli, még akkor is, ha az közvetlenül nem látható. Definiálhatunk örökölttel azonos nevű változót is, ez elfedi az eredetit. Az elfedett változókat minősítéssel, vagy típuskényszerítéssel lehet elérni.

Csomagok, package Megállapodtunk abban, hogy minden osztályt önálló fájlba teszünk. Egy komolyabb program több tucat osztályból épül fel, ami több tucat file-t jelent. Az osztályok, illetve forrásfile-ok kategóriákba sorolását teszik lehetővé a csomagok. Az osztályok hierarchikus struktúrát alkotnak, ahogyan láttuk a java.lang esetében. A FreeJava korábbi verziói nem kezelik megfelelően a csomagokat!!! Használd a v1.01_T2004.08.28 verziót!

Hozzáférési kategóriák kiterjesztés nélkül Hasonlít a C++ -hoz, de van eltérés: public (nyilvános): mindenki elérheti, mint a C++ -ban üres (félnyilvános): csomagon belül public, azon kívül private private (privát): csak az osztályon belül érhető el, mint a C++ -ban protected (védett): a kiterjesztéskor lesz szerepe

A hozzáférési kategóriák és a kiterjesztés, öröklődés A nyilvános, félnyilvános és privát hozzáférési kategória értelemszerűen terjeszthető ki a leszármazott osztályokra: public: ősének public tagjaihoz természetesen korlátozás nélkül hozzáférhet a leszármazott osztály üres: ősének félnyilvános tagjaihoz csak akkor férhet hozzá a leszármazott, ha azzal azonos csomagba tartozik private: ősének private tagjaihoz a leszármazott sem férhet hozzá protected: a protected kategória figyelembe veszi az öröklési viszonyokat. Részletesen lásd a következő dián!

Protected hozzáférési kategória A protected kategória a félnyilvános kiterjesztése, ezért ... a protected tagokhoz hozzáférhetnek az azonos csomagban definiált osztályok egy másik csomagban definiált osztály akkor férhet hozzá egy protected taghoz, ha leszármazottja a tagot definiáló osztálynak, és a tagra minősítés nélkül hivatkozik, vagy olyan minősítéssel hivatkozik, amelynek típusa ő maga, vagy leszármazottja. Példaként lásd a következő diát! egy protected kategóriájú konstruktort más csomagba tartozó gyermek csak a super kulcsszó segítségével hívhat, new-val példányosítani csak csomagon belül lehet!

Illusztráció egy protected taghoz való hozzáférés szabályaihoz class A { protected int p; } class B extends A { } class C extends A { } Ebben a helyzetben B egy metódusa hozzáférhet a p taghoz, ha nem használ minősítést, vagy a minősítés B, vagy D típusú de nem férhet hozzá A vagy C típusú minősítésen keresztül! class D extends B { }

Az osztályhierarchia Az osztályok rokonsági kapcsolatainak összességét osztályhierarchiának hívjuk. Javaban ezt egy fával ábrázolhatjuk, mert nem létezik többszörös öröklődés. A fa kiinduló pontjában áll a java.lang csomagban definiált Object osztály. Az Object minden osztálynak szülője, amelynek definíciójában nem adtunk meg extends-et. Az Object definiálja azokat a tagokat, amelyekre minden osztályban szükség van, pl. getClass, toString, equals.

Absztrakt osztályok és metódusok A polimorfizmust eddig a kódmegosztás révén hasznosítottuk, emellett azonban legalább ilyen nagy a jelentősége a program tervezése szempontjából. Egy „ősosztály” definiálásakor kialakítunk egy „közös nevezőt”, definiálunk egy olyan metóduskészletet, amelyet a leszármazottak mindegyike tartalmazni fog, így egységes módon kezelhetők lesznek. Gyakori megoldás az, hogy a közös ős csak ezt a közös felületet határozza meg, tényleges implementációt nem tartalmaz.

Absztrakt osztályok és metódusok 2 Ilyenkor csak a metódus fejét definiáljuk, a törzsét nem. Az ilyen törzs nélküli metódust nevezzük absztrakt metódusnak, az abstract kulcsszóval jelöljük. Azt az osztályt, amiben van legalább egy absztrakt metódus, absztrakt osztálynak nevezzük és szintén az abstract kulcsszóval jelöljük. Az absztrakt osztályok nem példányosíthatók, azonban ilyen típusú változót lehet deklarálni. Van-e értelme ennek? Miért hasznos ez?

Absztrakt osztályok kiterjesztése Az absztrakt osztályokat ki kell terjeszteni, hogy az absztrakt metódusok implementációt kapjanak. Ilyenkor a kiterjesztő osztály felüldefiniálja az absztrakt metódus(oka)t. Ezt úgy mondjuk, hogy az osztály megvalósítja, vagy implementálja az absztrakt metódust. Nem kötelező, hogy a kiterjesztő osztály minden absztrakt metódust megvalósítson, de ellenkező esetben ő maga is absztrakt marad. Absztrakt metódus nem lehet: private, final, static, és native. Miért?

Példa absztrakt osztályra public abstract class Sikidom { private boolean keruletKiszamitva = false; private boolean teruletKiszamitva = false; private double kerulet; private double terulet; public double kerulet() { if (!keruletKiszamitva) { kerulet = keruletSzamit(); keruletKiszamitva = true; } return kerulet;

Példa absztrakt osztályra, folyt. public double terulet() { if (!teruletKiszamitva) { terulet = teruletSzamit(); teruletKiszamitva = true; } return terulet; protected abstract double keruletSzamit(); protected abstract double teruletSzamit(); } // az osztály vége

Példa az absztrakt osztály kiterjesztésére 1 public class Teglalap extends Sikidom { private double a, b; public Teglalap (double a, double b) { this.a = a; this.b = b; } protected double keruletSzamit () { return 2*(a+b); protected double teruletSzamit () { return a*b; } // az osztály vége

Példa az absztrakt osztály kiterjesztésére 2 public class Kor extends Sikidom { private double r; public Kor (double r) { this.r = r; } protected double keruletSzamit() { return 2*Math.PI*r; protected double teruletSzamit() { return r*r*Math.PI; } // az osztály vége

Végleges osztályok és metódusok Vannak olyan osztályok, illetve metódusok, amelyek működésének megváltoztatása nem lenne kívánatos. Ilyen például a java.lang.Object osztály getClass metódusa. Az ilyen metódusok felüldefiniálását a final módosítóval tilthatjuk meg. public class Object { public final Class getClass(); ... } Osztályra alkalmazva a final módosítót, meggátolhatjuk az osztály kiterjesztését. Természetesen a final és az abstract kizárja egymást!

Órai gyakorló feladat Tanulmányozzuk az előadásban szereplő Síkidomos példát! Készítsünk egy főprogramot az osztályok kipróbálására! Definiáljunk egy derékszögű háromszög osztályt!