Komponens alapú programozás Bevezetés Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék Ez a tananyag felhasználja a TEMPUS S_JEP-12495-97 Network Computing Chapter 8 Developing of Network Computing Applications Component Based System Development (Lajos Ficsor) egyes részeit, magyar nyelvre fordítva Utolsó módosítás: 2007. 10. 08. Komponens alapú programozás KompAlap
Tartalom Miért kell a software komponens? A software komponens koncepció Komponens alapú programozás KompAlap / 2
Miért kell a software komponens? A többrészes (multi-tier) architektúra elválasztja legalább a prezentáció üzleti logika adatmanipuláció rétegeket, de ezek a rétegek még így is túl komplexek maradnak A rétegek további szétválasztása lehetséges és sokszor szükséges is Komponens alapú programozás KompAlap / 3
Miért kell a software komponens? (folyt.) Üzleti nyomás a minél rövidebb fejlesztési ciklus érdekében A komponensek segítik az újrahasználható részek fejlesztését Könnyebbé teszik a skálázható alkalmazások fejlesztését. Komponens alapú programozás KompAlap / 4
Mi a komponens? A komponens legjellegzetesebb tulajdonságai A komponens egy függetlenül telepíthető egység A komponens jól elhatárolt a környezetétől és más komponensektől Egy komponenst a használatához telepíteni kell Egy komponens sohasem telepíthető részlegesen A komponens magába zárja az általa nyújtott szolgáltatásokat A komponens felhasználójának nem kell ismernie a komponens felépítésének részleteit Komponens alapú programozás KompAlap / 5
Mi a komponens? (folyt. folyt.) A komponens egy harmadik fél számára fejlesztési egység (A component is a unit of third-party composition) Egy komponensnek elegendően zártnak kell lennie A komponenshez pontos specifikáció kell tartozzon Egy komponens a környezetével a jól definiált interface-én keresztül kommunikál Komponens alapú programozás KompAlap / 6
Mi a komponens? (folyt. folyt.) Egy komponensnek nincs perzisztens állapota Egy komponenst és a saját másolatát nem lehet megkülönböztetni lehetséges kivétel: nem funkcionális attribútumok (például licensz szám) Egy komponens tetszőleges példányban betölthető és aktivizálható egy adott rendszerben. A rendszerben jelenlevő másolatok száma lényegtelen. Komponens alapú programozás KompAlap / 7
Komponens és objektum összehasonlításasa Komponens Telepítési egység Kompozíció egysége Nincs perzisztens állapota Egységbe zárja a lehetséges funkcióit (features) Objektum Példányosítás egysége Van "terve" (osztály) Az osztály: újrafelhasználható egység Van perzisztens állapota Egységbe zárja az állapotát és a viselkedését Komponens alapú programozás KompAlap / 8
A komponenk omponens s definíci ciója A szakirodalom számos definíciót ismer. Mi az alábbit használjuk: Clemens Szyperski (Component Software, p.34) "Egy software komponens egy kompozíciós egység szerződésszerűen specifikált interfésszel és csak explicit módon függ a környezetétől. Egy software komponens függetlenül telepíthető és harmadik fél által kompozíciós egységként használható." Komponens alapú programozás KompAlap / 9
A definíci ció magyarázata Az előbbi definíció tömör, de több lényeges dolgot foglal össze. Jobb megértéséhez a továbbiakban kiemeljük és értelmezzük az egyes részeit. Komponens alapú programozás KompAlap / 10
A definíció része: A komponens interfésze "kompozíciós egység, szerződésszerűen specifikált interfésszel" Az interfész a kliens elérési pontja a komponens szolgáltatásaihoz Egy komponensnek több interfésze lehet a különböző igényű kliensek kiszolgálásához Direct (procedural) interfész Közvetlenül a komponens biztosítja Komponens alapú programozás KompAlap / 11
A komponens interfésze (folyt.) Indirect (object) interfész A komponens által elérhetővé tett objektum(ok) biztosítját Az indirekció módja: method dispatch (kb. metódus hívás továbbítás, továbbadás) Az objektum osztálya meghatározza az objektum interfészének implementációját Futásidőben egy metódus hívás feloldásánál az objektum megkeresi a cél objektum osztályát és a hívást az adott osztály megfelelő metódusához irányítja Komponens alapú programozás KompAlap / 12
has-a Word processing component 3 Word processor class has-a Text services class Indirekt interfész sz: egy példa 4 Text services mediator component 2 has-a Grammar checking component has-a Grammar checker class 1 Checker interface implements 1. A nyelvtani ellenőrző ismeri a közvetítőt (mediator) 2. A nyelvtani elemző regisztrálja magát - a közvetítő csak az absztrakt interfészt ismeri 3. A szövegszerkesztő tud a közvetítőről 4. A szövegszerkesztő szerez egy referenciát az aktuális nyelvtani ellenőrzőhöz (a szerkesztő csak az absztrakt ellenőrző interfészt ismeri) Komponens alapú programozás KompAlap / 13
Szerződésszer sszerű interfész Eredetileg: "contractually specified interface" Az interfész specifikáció egy szerződés között a kliens és a komponens, a kliens és a komponens készítője A szerződés rögzíti, mit kell a kliensnek tennie ahhoz, hogy használhassa az interfészt Elméletben a szerződés futásidőben finomítható Komponens alapú programozás KompAlap / 14
A szerződés s tartalma Minden operációra specifikálnia kell az alábbiakat: Prekondíciók: a kliensnek kell ezeket biztosítania az operáció igénybevétele előtt Postkondíciók: a komponensnek kell biztosítani, mielőtt visszatér a klienshez Specifikálni kell a működés helyességének szintjét: Részlegesen helyes (partially correctness): az operáció vagy helyes postkondíciókkal terminálódik, vagy egyátalán nem terminálódik Teljes helyesség (total correctness): az operáció mindenképpen terminálódik Komponens alapú programozás KompAlap / 15
A szerződés s tartalma (folytatás) A szerződés tartalmazhat a komponens működésére vonatkozó nem funkcionális követelményeket, mint például teljesímény rendelkezésre állás adatbiztonság kapacitás Komponens alapú programozás KompAlap / 16
Explicit környezeti k függf ggőség A definíció része: "csak explicit módon függ a környezetétől" Pontosan specifikáltnak kell lennie, mit kell a komponens környezetének biztosítania a komponens működéséhez más komponensektől igényelt interfészek a környező komponens világ pontos specifikációja (komponens modell fajtája, verziószáma). Például: CORBA x.x, Java x.x.x, COM/DCOM x.x Komponens alapú programozás KompAlap / 17
Komponens modellek lek Minden komponens modell egy adott osztott objektum modellt használ middleware-ként. A három legelterjedtebb komponens modell: Name Middleware Programming Platform Language JavaBeans/ Java RMI Java Any Enterprise JavaBeans ActiveX DCOM Any Microsoft CORBA Beans CORBA Any Any Komponens alapú programozás KompAlap / 18
References Component-based programming Clemens Szyperski: Component Software. Beyond the Object-Oriented Programing Addison-Wesley, 1999 Lajos Ficsor: Component based system development http://mazsola.iit.uni-miskolc.hu/tempus/discom/courses/net/component2.zip Komponens alapú programozás KompAlap / 19