JAVA PROGRAMOZÁS 3.ELŐADÁS



Hasonló dokumentumok
JAVA PROGRAMOZÁS 2.ELŐADÁS

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

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

JAVA PROGRAMOZÁS 5.ELŐADÁS

Programozási nyelvek Java

é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

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

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?

Programozási nyelvek Java

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

Programozási nyelvek Java

Magas szintű programozási nyelvek 2 Előadás jegyzet

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

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

3. Gyakorlat Ismerkedés a Java nyelvvel

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

Osztályok. 4. gyakorlat

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

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

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

Java és web programozás

C# osztályok. Krizsán Zoltán

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

Programozási Paradigmák és Technikák

Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven

Programozás II. labor

Objektumorientált programozás C# nyelven

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# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Bánsághi Anna

Szoftvertechnológia alapjai Java előadások

strings.xml res/values/strings.xml fájlban hozzuk létre a hiányzó string adatforrásainkat A jelenlegi helyett ez álljon: <resources> <string

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

Osztály és objektum fogalma


PHP5 Új generáció (2. rész)

Gábor Dénes Főiskola (IAI) Programozási technológia (Java) - I. / 1

Objektum Orientált Szoftverfejlesztés (jegyzet)

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

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Java VII. Polimorfizmus a Java nyelvben

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

Interfészek. PPT 2007/2008 tavasz.

Programozási nyelvek Java

Java VII. Polimorfizmus a Java nyelvben

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

OOP: Java 8.Gy: Gyakorlás

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

Emlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás.

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

Java programozási nyelv

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

Java II. I A Java programozási nyelv alapelemei

Öröklés és Polimorfizmus

Bánsághi Anna

OOP #14 (referencia-elv)

A WEB programozása - JSP1 dr.gál Tibor őszi félév

RIA Rich Internet Application

7. K: JAVA alapok Konzultáció

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Ismeretanyag Záróvizsgára való felkészüléshez

Segédanyag: Java alkalmazások gyakorlat

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

Előzmények

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

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

ZH mintapélda. Feladat. Felület

Objektumorientált programozás C# nyelven

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

Objektumorientált programozás Java-ban

Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Web-technológia PHP-vel

Már megismert fogalmak áttekintése

Access adatbázis elérése OLE DB-n keresztül

INFORMATIKAI ALAPISMERETEK

VISUAL BASIC ALAPISMERETEK

Grafikus felhasználói felületek. Abstract Window Toolkit, a java.awt és java.awt.event csomagok

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.

OBJEKTUMORIENTÁLT TERVEZÉS ESETTANULMÁNYOK. 2.1 A feladat

Az élet szép, környezetünk tele van fákkal, virágokkal, repdeső madarakkal, vidáman futkározó állatokkal.

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

Programozás I. Első ZH segédlet

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

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

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

Fizika InfoRmatika Kémia Alapok. Az Erdélyi Magyar Műszaki Tudományos Társaság kiadványa. Megjelenik kéthavonta (tanévenként 6 szám)

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

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

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

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

III. OOP (objektumok, osztályok)

15. Programok fordítása és végrehajtása

3. Osztályok II. Programozás II

Programozási nyelvek II.: JAVA

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Programozási technológia

Objektumleírók Konstantinusz Kft 2010


Átírás:

Dr. Pál László, Sapientia EMTE, Csíkszereda JAVA PROGRAMOZÁS 3.ELŐADÁS 2014-2015 tavasz Polimorfizmus, absztrakt osztályok, interfészek

2 Példa - Hengerprogram

3 Példa - Hengerprogram

4 Példa - Hengerprogram

Az objektumreferencia statikus és 5 dinamikus típusa Statikus típus: deklarált osztály Dinamikus típus: mutatott objektum valódi osztálya Fontos, hogy a referencia statikus típusa a dinamikus típussal egyenlő, vagy annak egy őse legyen

Értékadási kompatibilitás 6 Objektumreferenciák értékadása esetén a jobb oldal értékadás szerint kompatibilis a bal oldallal, ha a bal oldali referencia osztálya a jobb oldali referencia osztállyal megegyezik, vagy annak egy őse. Példa: Szintaktikailag helyes Szintaktikailag helytelen Hiba futáskor

Az istanceof operátor 7 Segítségével lekérdezhető a hivatkozott objektum osztálya: <objektum> instanceof <Osztaly> Az eredmény egy logikai érték: true, ha az objektum osztálya a megadott Osztaly vagy annak egy leszármazottja, különben false Példa: Object obj = new String("Valami"); if (obj instanceof Object)... // true if (obj instanceof String)... // true if (obj instanceof Integer)... // false if ("Semmi" instanceof String)... // true

Az istanceof operátor 8 Példa:

Típuskonverzió 9 Felfelé (upcasting) Utód típusú referencia értékül adható egy ős típusú referenciának Ebben az esetben az utód referencia ős típusúvá konvertálódik Példa: String str = "Kakukk"; System.out.println(str.toLowerCase());// OK Object obj = str; // String Object //System.out.println(obj.toLowerCase()); Fordítási hiba! hengerek.add(new Rud(0.5,4)); hengerek.add(new Cso(5,5,0.5));

Típuskonverzió 10 Lefelé (downcasting) Ős típusú referencia nem adható egyszerűen értékül egy utód típusú referenciának csak rákényszerítéssel Ebben az esetben csak olyan üzenet küldhető, amely benne van az objektum valódi osztályában Példa:

Típuskonverzió 11 Példa: A konténerből kikért objektum le van butítva Ha nem kényszerítjük rá a Henger-t, nem kérdezhetnénk meg tőle a térfogatát

Adatok takarása (árnyékolás) 12 Adatot nem lehet felülírni! Adat takarása = ugyanolyan nevű másik adat deklarálása Példa:

Metódus felülírása, 13 dinamikus és statikus kötés Példánymetódus felülírása (overriding) Egy metódus az utódosztályban felülírható, ha az: nem private nem final nem static (példánymetódus) Dinamikus kötés: Az ostzályhierarchia bármely pontjáról is hívunk meg egy példánymetódust, minden esetben a megszólított objektum osztályában fog végrehajtódni Ez csak futáskor derülhet ki, a pontos címet futáskor határozza meg a rendszer -> futás alatti kötés vagy kései kötés (late binding)

14 Példánymetódus dinamikus kötése

15 Példánymetódus dinamikus kötése

Osztálymetódus statikus kötése 16 A fordító egyértelműen el tudja dönteni melyik osztály metódusát hajtsa végre A statikus metódust már a fordító megkeresi és a kódhoz köti Példa:

17 Osztálymetódus statikus kötése

Polimorfizmus 18 Polimorfizmus (polymorphism, többalakúság) Azt jelenti, hogy ugyanarra az üzenetre különböző típusú objektumok különbözőképpen reagálnak minden objektum a saját metódusával Példa:

Polimorfizmus 19 Példa:

Absztrakt metódus, osztály 20 Absztrakt metódus: üres metódus, mely csak örökítési célt szolgál Absztrakt osztály: absztrakt metódust tartalmazó, nem példányosítható osztály Jelölés UML: dőlt betűvel Java: abstract class <OsztályAzonosító> { abstract <metódusaz>(paraméterek); }

Absztrakt metódus, osztály 21 Szabályok Javában: Absztrakt metódusnak nincs blokkja Absztrakt osztályban akárhány absztrakt metódus lehet Absztrakt metódust tartalmazó osztály csak absztrakt lehet Ha az utódosztály nem absztrakt, akkor abban minden absztrakt metódust implementálni kell Absztrakt osztályból nem lehet példányt létrehozni Absztrakt osztály, illetve metódus nem lehet végleges

Absztrakt metódus, osztály 22 Példa:

Absztrakt metódus, osztály 23 Példa:

Absztrakt metódus, osztály 24 Példa:

Interfészek 25 Konstansokat és metódusfejeket definiál Implementáló osztály: a metódusokat implementálja Deklarációja: [public] interface <InterfészAzon> [extends <InterfészAzon,...>] { <konstansok, metódusfejek> } Egy osztály több interfészt is megvalósíthat Egy interfészt több osztály is megvalósíthat

Interfész implementálása 26 Az interfészben minden tag implicit publikus, így az interfészt megvalósító osztályban mindig ki kell tenni a public módosítót

Interfész implementálása 27 Interfészekben definiálhatunk mezőket is, ezek public static final típusú konstansak Az objektum statikus referenciája lehet interfész típusú

Interfész implementálása 28 Implementáló osztály: speciális utódja az interfésznek Nem abstract osztály összes metódust meg kell írni Abstract osztály az utódban befejezhető az implementálás Egy osztály akárhány interfészt implementálhat Az interfész egyes metódusait az implementáló osztály örökölheti is

29 Interfész - Példa

30 Interfész - Példa

31 Interfész - Példa

32 Interfész - Példa

33 Interfész - Példa

34 Interfész - Példa

Belső osztály 35 Osztályon belül deklarált másik osztály: class <KulsoOsztályAzon>... {... class <BelsoOsztályAzon>... {... } } Csak az őt deklaráló külső osztály ismeri Példányosítás: külső osztály példánymetódusából

Szabályok 36 Példánya ismeri az őt létrehozó külső objektumot implicit referencia hivatkozás takarásnál: KülsıOsztály.this Nem lehetnek statikus deklarációi Nem kötelező azonosítani (névtelen belső osztály) Fordítóprogram különálló külső osztállyá alakítja: KülsıOsztályAzon$BelsıOsztályAzon.class KülsıOsztályAzon$n.class (n=1,2, )

37 Belső osztály - Példa

Névtelen osztály 38 Nincs neve Máshol nem lehet rá hivatkozni Egyszer példányosítható Az objektum létrehozásával egyidőben deklaráljuk Névtelen osztályú objektum létrehozása Osztály kiterjesztésével Interfész implementálásával Nincs konstruktora Deklaráció: New <ososztaly>(parameterlista){ } névtelen osztály blokkja

Példányosítás osztály kiterjesztéssel 39 Nincs neve Máshol nem lehet rá hivatkozni Egyszer példányosítható Az objektum létrehozásával egyidőben deklaráljuk Névtelen osztályú objektum létrehozása Osztály kiterjesztésével Interfész implementálásával Nincs konstruktora

Példányosítás osztály kiterjesztéssel 40 Példa: Mi a kimenet?

Könyvészet 41 Angster Erzsébet, Objektumorientált tervezés és programozás. Java I-II. (Bazele programării orientate pe obiecte), Ed. 4 Kör Bt., Budapesta, 2002. Kathy Sierra, Bert Bates: Agyhullám: Java, Kiskapú, 2011.