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

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

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

é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

Java programozási nyelv 6. rész Java a gyakorlatban

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

JAVA PROGRAMOZÁS 2.ELŐADÁS

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

C++ programozási nyelv

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

Programozási nyelvek Java

C++ programozási nyelv

Programozás módszertan p.1/46

Objektumorientált programozás C# nyelven

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

Java VII. Polimorfizmus a Java nyelvben

Interfészek. PPT 2007/2008 tavasz.

Java VII. Polimorfizmus a Java nyelvben

Osztályok. 4. gyakorlat

Öröklés és Polimorfizmus

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítá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?

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

Programozási nyelvek Java

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

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

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

Már megismert fogalmak áttekintése

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

Objektumorientált programozás C# nyelven

III. OOP (objektumok, osztályok)

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ÁS 3.ELŐADÁS

C++ programozási nyelv Konstruktorok-destruktorok

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;

3. gyakorlat. Objektumorientált programozás

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

C++ programozási nyelv

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

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

Programozási nyelvek Java

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

Bevezetés a Python programozási nyelvbe

Programozási nyelvek II.: JAVA, 11. gyakorlat

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

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

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

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

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

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

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

Programozás I. Első ZH segédlet

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

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

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

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

OOP: Java 8.Gy: Gyakorlás

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?

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

Programozás III KIINDULÁS. Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg.

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

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

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

OOP #14 (referencia-elv)

OOP. Alapelvek Elek Tibor

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

A Java és a C++ összehasonlítása

Java Programozás 5. Ea: OOP alapok. Abstract Javaságok

Elemi Alkalmazások Fejlesztése II.

Java programozási nyelv

Programozási nyelvek Java

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

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

Programozási alapismeretek 4.

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

OOP és UML Áttekintés

Web-technológia PHP-vel

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

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

Osztályok, objektumok

Osztály és objektum fogalma

Objektumorientált programozás C# nyelven

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

Programozási nyelvek JAVA EA+GY 1. gyakolat

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

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

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

OOP JAVA PROGRAMOZÁS 3. GYAKORLAT

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

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

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

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

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

Objektum orientált programozás Bevezetés


Interfészek. Programozás II. előadás. Szénási Sándor.

Absztrakció. Objektum orientált programozás Bevezetés. Általános Informatikai Tanszék Utolsó módosítás:

Programozási nyelvek Java

Átírás:

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 A Java programozási nyelv Soós Sándor 1/20

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 A Java programozási nyelv Soós Sándor 2/20

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. A Java programozási nyelv Soós Sándor 3/20

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. A Java programozási nyelv Soós Sándor 4/20

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. A Java programozási nyelv Soós Sándor 5/20

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! A Java programozási nyelv Soós Sándor 6/20

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 Java programozási nyelv Soós Sándor 7/20

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! A Java programozási nyelv Soós Sándor 8/20

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! A Java programozási nyelv Soós Sándor 9/20

Illusztráció egy protected taghoz való hozzáférés szabályaihoz class A { protected int p; } class B extends A { } class D extends B { } 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! A Java programozási nyelv Soós Sándor 10/20

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. A Java programozási nyelv Soós Sándor 11/20

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. A Java programozási nyelv Soós Sándor 12/20

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? A Java programozási nyelv Soós Sándor 13/20

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? A Java programozási nyelv Soós Sándor 14/20

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; } A Java programozási nyelv Soós Sándor 15/20

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 A Java programozási nyelv Soós Sándor 16/20

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 A Java programozási nyelv Soós Sándor 17/20

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 A Java programozási nyelv Soós Sándor 18/20

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! A Java programozási nyelv Soós Sándor 19/20

Ó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! A Java programozási nyelv Soós Sándor 20/20