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

Hasonló dokumentumok
Interfészek. PPT 2007/2008 tavasz.

Már megismert fogalmak áttekintése

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

é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 5. rész Osztályok III.

JAVA PROGRAMOZÁS 2.ELŐADÁS

Osztály öröklődés. Öröklődés és polimorfizmus. Programozás II. előadás. Szénási Sándor.

Programozási alapismeretek 4.

C++ programozási nyelv

Objektumorientált programozás C# nyelven

Programozás módszertan p.1/46

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

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

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

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

OOP. Alapelvek Elek Tibor

Objektumorientált programozás C# nyelven

Programozási nyelvek Java

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

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

Programozási nyelvek Java

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

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

OOP #14 (referencia-elv)

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

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.

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

Objektum orientált programozás Bevezetés

OOP és UML Áttekintés

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

Objektumorientált paradigma és a programfejlesztés

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

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

Programozás. Objektum Orientált Programozás (OOP) Alapfogalmak. Fodor Attila

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?

Adatstruktúrák, algoritmusok, objektumok

Osztályok. 4. gyakorlat

III. OOP (objektumok, osztályok)

C++ programozási nyelv Konstruktorok-destruktorok

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

JAVA PROGRAMOZÁS 3.ELŐADÁS

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.

C++ programozási nyelv

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

Programozás III. - NGB_IN001_3

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

1. Bevezetés A C++ nem objektumorientált újdonságai 3

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

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

S0-02 Típusmodellek (Programozás elmélet)

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

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

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

Öröklés és Polimorfizmus

Bevezetés, a C++ osztályok. Pere László

ELTE SAP Excellence Center Oktatóanyag 1

Java VII. Polimorfizmus a Java nyelvben

Komponens alapú programozás Bevezetés

RESIDENT EVIL CODENAME: NIK

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

Enterprise JavaBeans 1.4 platform (EJB 2.0)

Java VII. Polimorfizmus a Java nyelvben

Objektumorientált paradigma és programfejlesztés Bevezető

Web-technológia PHP-vel

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

Láncolt listák. Egyszerű, rendezett és speciális láncolt listák. Programozás II. előadás. Szénási Sándor

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

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?

Java felhasználói felület

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

58. Osztály, objektum fogalma, implementációs lehetőségek(shagreen) 59. Egységbezárás (elvi háttere, gyakorlati megvalósítás) (Shagreen)

Objektumorientált szoftverfejlesztés alapjai

Magas szintű adatmodellek Egyed/kapcsolat modell I.

Szoftvertechnolo gia gyakorlat

Objektum orientáltság alapjai A Java nyelv Fordítás - futtatás

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

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

NETinv. Új generációs informatikai és kommunikációs megoldások

Programozás C és C++ -ban

Programozás II. labor

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

C++ programozási nyelv

Bevezetés a programozásba Előadás: A const

OOP. #6 (VMT és DMT) v :33:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj.

Objektumorientált paradigma

Az iskolai rendszerű képzésben az összefüggő szakmai gyakorlat időtartama. 10. évfolyam Adatbázis- és szoftverfejlesztés gyakorlat 50 óra

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

Programfejlesztési Modellek

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

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

GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és. Függvénysablonok

Teljesítmény Mérés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Teljesítmény Mérés / 20

I. Objektumorientált programozás

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

Objektumorientált programozás Java-ban

Adatstruktúrák, algoritmusok, objektumok

Grid menedzsment megoldás az ARC köztesrétegben

Átírás:

Interfészek előadás http://nik.uni-obuda.hu/prog2 Szénási Sándor szenasi.sandor@nik.uni-obuda.hu Óbudai Egyetem,Neumann János Informatikai Kar

Polimorfizmus áttekintése Interfészek Interfészek alkalmazása Interfészek kiterjesztése Interfészek

3 Már megismert fogalmak áttekintése Objektumorientált program felépítése Osztály, objektum Érték típus, referencia típus Öröklődés egyszeres öröklődés többszörös öröklődés Korai kötés, késői kötés Absztrakt osztály Polimorfizmus (többalakúság) módszer polimorfizmus objektum polimorfizmus Polimorfizmus a gyakorlatban pl. vizuális felület komponensei Az (egyszeres) öröklődés korlátai

Polimorfizmus áttekintése Interfészek Interfészek alkalmazása Interfészek kiterjesztése Interfészek

5 Interfész szükségessége Emlékeztető: hozzáférési szintek Nincs szükség egy másik osztály belső szerkezetének ismeretére Egy osztály kódja ugyanis bármikor megváltozhat Másik osztály mezőinek használata problémás Mező megszűnik Mező működése megváltozik Távoli módosítások veszélye, hibakeresés problémája Elég a másik osztály metódusainak használata Tulajdonságokat is ide érthetjük Nincs szükség a pontos implementáció ismeretére A fentiekből adódik, hogy egy objektum használatához nem kell ismernünk magát az osztályt, elég egy egyszerűsített felület azokhoz a metódusokhoz és tulajdonságokhoz, amelyeket elérhetünk

6 Interfész fogalma Az interfész meghatározza egy osztály felületét Másként megfogalmazva: egy szerződés, ami kikényszeríti, hogy az interfészt megvalósító osztályok rendelkezzenek bizonyos műveletekkel Interfészek néhány tipikus alkalmazása Osztályok felruházása valamilyen műveletekkel (nevet rendel metódus szignatúrák egy csoportjához) Többszörös öröklődés egyszerűsített megvalósítása (polimorfizmus lehetőségeinek elérésére) Jelölések Interfész definíció Interfész megvalósítás <<interface>> IÖsszehasonlítható Egyenlő() Több() Kevesebb() IÖsszehasonlítható Szám érték: Szám Egyenlő() Több() Kevesebb()

7 Interfész felépítése Interfész tipikusan (nyelvtől függően) tartalmazhat Metódus szignatúrát szignatúra: metódus neve + visszatérési értéke + paraméterek (interfész metódus mindig virtuális és absztrakt) Konstans mezőt mivel ezek nem igényelnek objektum példányt Tulajdonságot amennyiben a nyelv támogatja Interfész nem tartalmazhat Konkrét metódus, tulajdonság implementációt Példányszintű mezőt Példányosításhoz kapcsolódó konstruktort/destruktort Különböző módosítók (láthatóság stb.) az osztályokhoz hasonló módon használhatók, bár nyelvtől függően eltérések is lehetnek

8 Interfész megvalósítása (támogatása) Interfészek önmagukban nem példányosíthatók, csak az őket megvalósító osztályokon keresztül érhetők el a műveleteik Az interfész megvalósításának lépései Osztály definícióban a megvalósítandó interfészek felsorolása Az interfész(ek)ben definiált metódusok implementálása Egy osztály egyszerre tetszőleges számú interfészt valósíthat meg, ezzel a polimorfizmus szempontjából a többszörös örökléshez hasonló eredményt érhetünk el Egy osztálynak kötelező implementálnia az általa megvalósított interfészek által definiált metódusokat (ellenkező eset fordítási hibát eredményez) Ez nem vonatkozik az absztrakt osztályokra, akik ezt a kötelezettségüket a leszármazottakra hárítják

9 Interfész típusú referencia Az interfészek tulajdonképpen típusok, ezért lehetséges ilyen típusú változók deklarációjára is Egy ilyen változóval hivatkozhatunk bármilyen objektumra, amely megvalósítja az adott interfészt Az interfész típusú referenciák az osztály típusú referenciákhoz hasonló módon működnek Ez nem keverendő össze azzal, hogy az interfész típusból nem lehet példányt létrehozni! Eddig tanultak kiegészítése: egy T típusú osztályra az alábbi típusú referenciákkal hivatkozhatunk (más típus fordítási hibát eredményez): T típusú referenciával T valamelyik őstípusának referenciájával T osztály által megvalósított valamelyik interfész típusának referenciájával (egyéb: konverziók, castolás, stb.)

10 Interfész absztrakt osztályok kapcsolata Bár szintaktikailag hasonlítanak egymásra, a két technika egymástól függetlenül kezelendő Más a cél Az absztrakt osztályok egy részben elkészült osztálynak tekinthetők, ahol néhány metódust még nem tudtunk megvalósítani. De lehetnek mezőik, egyéb metódusaik, stb. Az interfészek egy követelményrendszernek tekinthetők. Csak azt írják elő, hogy milyen metódusokkal kell a megvalósítónak rendelkeznie, de ehhez nem adnak implementációt Osztály és interfész hierarchia egymástól független Az absztrakt osztályok a hagyományos osztály öröklési hierarchia részei Az interfészek egy ettől független hierarchiát alkotnak A kapcsolat csak ott jelenik meg, amikor egy osztály megvalósít egy interfészt Többszörös öröklés korlátai Osztályok között nincs többszörös öröklésre lehetőség (kivéve ahol mégis) Egy interfész több interfész leszármazottja is lehet, és egy osztály megvalósíthat több interfészt is

11 Implicit/explicit interfész megvalósítás A többszörös öröklésnél felmerülő problémák közül néhány felmerül a több hasonló interfészt megvalósító osztályok esetén is Több interfész is tartalmazhat ugyanolyan szignatúrájú metódusokat, ennek kezelése érdekében kétféle interfész megvalósítást használhatunk Implicit megvalósítás Az osztály metódusának a szignatúrája megegyezik az interfész(ek)ben megadott szignatúrával Bármelyik interfésszel hivatkozunk az osztályra, mindig ugyanaz a metódus fut le Explicit megvalósítás: Az osztályban a metódus neve mellett megadjuk az általa megvalósított interfész nevét is Attól függően, hogy melyik interfésszel hivatkozunk az osztályra, mindig a megfelelő metódus fut le Célszerű ezt a megvalósítást használni

Polimorfizmus áttekintése Interfészek Interfészek alkalmazása Interfészek kiterjesztése Interfészek

13 Funkciók kikényszerítése Az interfész tulajdonképpen egy szerződés, meghatároz bizonyos szignatúrákat, amelyeket az interfészt megvalósító objektumoknak kötelezően implementálniuk kell Ennek megfelelően biztosak lehetünk benne, hogy minden, az interfészt megvalósító objektum rendelkezni fog a szükséges metódusokkal Rendezés megvalósítása <<interface>> Interfész definiálása IÖsszehasonlítható IÖsszehasonlítható interfész Kisebb(Objektum) : Logikai metódus Rendezés elkészítése IÖsszehasonlítható objektumok rendezése Kisebb(Objektum) : Logikai metódus segítségével Interfész megvalósítása IÖsszehasonlítható interfészt megvalósító osztály készítése Objektumok példányosítása, majd ezek rendezése Kisebb(Objektum) : Logikai

Polimorfizmus interfészekkel szenasi.sandor@nik.uni-obuda.hu 14 NeptunFelhasználó Diák Oktató <<interface>> Név() : Szöveg ÜzenetKüldés(Szöveg) Szolgáltató Orvos Szerelő címjegyzék : IEIérhető[ ] ChatPartner Diák Szerelő Facebook EmailCím Skype Orvos Skype Diák

Polimorfizmus interfészekkel (2) szenasi.sandor@nik.uni-obuda.hu 15 NeptunFelhasználó Diák Oktató ITalálkozó <<interface>> Név() : Szöveg ÜzenetKüldés(Szöveg) Szolgáltató ITalálkozó Orvos Szerelő <<interface>> ITalálkozó Időpontkérés() : Idő Időpontfoglalás(Idő) címjegyzék : IEIérhető[ ] naptár : ITalálkozó[ ] ChatPartner Diák Oktató Szerelő Orvos Facebook Skype Orvos Oktató Skype Szerelő EmailCím Diák Orvos

Polimorfizmus interfészekkel (3) szenasi.sandor@nik.uni-obuda.hu 16 NeptunFelhasználó Diák Oktató ITalálkozó <<interface>> Név() : Szöveg ÜzenetKüldés(Szöveg) Szolgáltató ITalálkozó Orvos Szerelő <<interface>> ITalálkozó Időpontkérés() : Idő Időpontfoglalás(Idő) címjegyzék : IEIérhető[ ] naptár : ITalálkozó[ ] ChatPartner Diák Oktató Szerelő Orvos Facebook Skype Orvos Oktató Skype Szerelő EmailCím Diák Orvos

17 Ősre vonatkozó követelmény kiküszöbölése Szeretnénk szétválasztani az objektumok létrehozását azok használatától Egy objektum gyár létrehoz (ha szükséges) és visszaad új objektumokat, esetenként valamilyen paraméter alapján A kliens számára lényegtelen, hogy a megadott paraméterekhez a gyár milyen szabályok szerint hoz létre (ad vissza) egy konkrét objektumot Néhány példa Adatbázis meghajtók létrehozása Grafikus felület elemeinek létrehozása <<interface>> IFizetőEszköz Terhelés(Szám) Hitelkártya PayPal IFizetőEszköz IFizetőEszköz FizetőGyár Létrehoz(ID) : IFizetőEszköz

Modulok összekapcsolása Nagyobb rendszerekben célszerű minél kisebb függőségeket kialakítani az egyes modulok között Jobban áttekinthető Könnyebben karbantartható Az interfészek erre jó lehetőséget adnak Egy magasabb absztrakciós szintet nyújt, ami leegyszerűsíti az egész rendszer áttekintését Elrejti a konkrét megvalósítást, így a használója biztos nem fog a megvalósítástól függő kódot írni Forráskód elrejtése Stb. SzámlaModul <<interface>> IHitelkártyaEllenőrző Ellenőriz(Kártya) : Logikai KártyaModul

Polimorfizmus áttekintése Interfészek Interfészek alkalmazása Interfészek kiterjesztése Interfészek

20 Interfész hierarchia Az osztályokhoz hasonlóan az interfészek között is fel lehet építeni egy öröklődési hierarchiát (öröklődés helyett itt gyakran a kiterjesztés szót használjuk) Az osztályok és az interfészek hierarchiája egymástól független, interfész őse nem lehet osztály és osztály őse sem lehet interfész (az osztályok közti öröklést és az interfész megvalósítását tekintsük különbözőnek) Az osztályokhoz hasonlóan az interfészek is általában mind egy legmagasabb szintű ősből származnak Az osztályokhoz hasonlóan a polimorfizmus előnyeit az interfészek között is alkalmazhatjuk (minden interfész használható bármelyik őse helyén)

21 Osztály hierarchia Amennyiben egy osztály megvalósít egy interfészt, akkor a leszármazottjai is mind megvalósítják. Ennek direkt jelölésére általában nincs szükség A megvalósító metódusokat a leszármazottak öröklik, így értelemszerűen nincs szükség további követelmények teljesítésére Ismét kiegészítve az eddigieket: egy T típusú osztályra tehát az alábbi típusú referenciákkal hivatkozhatunk: T típusú referenciával T valamelyik őstípusának referenciájával T osztály által megvalósított valamelyik interfész típusának referenciájával T osztály bármelyik őse által megvalósított interfész típusának referenciájával T osztály által megvalósított interfész bármelyik őstípusának referenciájával (egyéb: konverziók, casztolás stb.)

22 Néhány további gondolat Jelölő interfészek (marker interface) Nincsenek metódusaik Az osztályhoz rendelve futás közben lekérdezhetők, ezzel a futtató környezet (vagy reflexión keresztül az egyéb programok) számára nyújt információt Ha van helyette más nyelvi elem, célszerű elkerülni a használatát Segítő osztályok (helper class) Egy összetett interfész esetén gyakran csak néhány metódus megvalósítására lenne szükség, azonban mindig kötelező mindet implementálni Kényelmi szempontból az interfészekhez gyakran készítenek egyszerű, az interfészt üres (vagy alapértelmezett kóddal) megvalósító ún. segítő osztályokat Nem célszerű interfészt új metódusokkal bővíteni, mivel így az ezt implementáló osztályok fordíthatatlanná válnak

23 Irodalomjegyzék Javasolt/felhasznált irodalom BMF NIK AAO, OOP, VEP előadások J. Richter: CLR via C# 2nd edition, Microsoft press, 2006