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.) 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.) 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ása 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 komponens definí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ó 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 komponens interfésze A definíció ré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
Indirekt interfész: egy példa Word processing component
Grammar checking component
Word processor class
has-a
Grammar checker class
has-a
1 4
3
has-a implements
Text services class
2 has-a
Checker interface
Text services mediator component
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ű interfész Eredetileg: "contractually specified interface" Az interfész specifikáció egy szerződés a kliens és a komponens, a kliens és a komponens készítője
között 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 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 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 fü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 Minden komponens modell egy adott osztott objektum modellt használ middleware-ként. A három legelterjedtebb komponens modell: Name JavaBeans/ Enterprise JavaBeans ActiveX CORBA Beans
Middleware Programming Language Java RMI Java
Platform
DCOM CORBA
Microsoft Any
Any Any
Komponens alapú programozás
Any
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