Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták.

Hasonló előadás


Az előadások a következő témára: "Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták."— Előadás másolata:

1 Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták

2 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 2 Eclipse platform  Sok fejlesztő  Hatalmas API  Sok komponens  Rengeteg extension point  Rengeteg funkció  Hogyan lehet kézben tartani a fejlesztést? −Szabályok! −Tervezési minták!

3 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 3 Patternek  Szoftver újrafelhasználás −Fejlesztési célok ●Gyorsaság ●Minőség ●Elfogadható ár −Újrafelhasználhatóság céljai és lehetőségei ●Gyorsítja a fejlesztést ●Biztonságosabb megoldásokat kínál ●Megkönnyíti a fejlesztők dolgát

4 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 4 Újrafelhasználás - alapkoncepció

5 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 5 Újrafelhasználás - evolúció  0. „mindent a kályhától”  1. Copy-paste  2. Függvény könyvtárak  3. Objektumok  4. Osztály könyvtárak (class libraries)  5. Tervezési minták, minta nyelvek  6. Komponens technológiák  7. Keretrendszerek (frameworks), vállalati sablonok

6 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 6 Minták - alapfogalom  Általános minták: −Olyan, sokak által ismert formátumban dokumentált megoldásváz, amelynek alkalmazhatósága könnyen eldönthető egy adott probléma esetén, a végleges megoldás útmutató segítségével könnyen létrehozható.  SW minták: −Egymással kapcsolatban álló osztályok és objektumok, amelyek együtt egy adott objektum-orientált tervezési feladat vagy probléma megoldását szolgálják.

7 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 7 Tervezési minta - adatok 1.Azonosítás 1.Név 2.Kategorizálás 3.Kulcsszavak 4.Ismert alkalmazások 5.Kapcsolódó minták 2.Probléma 1.Motiváció 2.Cél 3.Megoldás 1.Struktúra 2.Résztvevők 3.Együttműködésük 4.Implementáció 5.Kód minták 4.Következmények 1.Előnyök 2.Hátrányok 3.Alkalmazhatóság

8 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 8 Tervezési minta megadás -példa

9 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 9 Tervezési minta felhasználás  Implementálás fázisai: −Keresés ●Név ●Felhasználási terület ●Kulcsszavak −Kiválasztás ●Előnyök, hátrányok ●Alkalmazhatóság −Készítés – jól bevált ötletek −Felhasználás - implementálás

10 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 10 Tervezési minták leírása  Hagyományos −Szövegszerkesztő + rajzolóprogram −Szabad kéz a kötelező és opcionális elemek terén  Törekvések −Egységes formátum, tool támogatás, katalogizálás és visszakereshetőség segítése  Nyelvek −PCML (Pattern & Component Markup Lang.) −RAS (Reusable Asset Specification)

11 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 11 Alapvető tervezési minták

12 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 12 Factory method  Egy objektum létrehozásakor egy interfészt definiálunk, de a leszármazott osztályok eldönthetik, hogy milyen oszályt példányosítanak valójában

13 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 13 Factory method  Cél: −Komplex objektum létrehozása −Egy specifikus implementációból −Azonos konstruktor különböző implementációkhoz  Megoldott esetek: −Ha egy t kell példányosítania −Ha egy osztály a gyerekeire akarja hagyni a példányosítandó osztály meghatározását

14 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 14 Factory method  Megoldás: elkerülhető a specifikus osztályok bedrótozása a kódba

15 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 15 Tervezési minták  Még sok, jól bevált van −Általános minták −Vállalati minták −…  Ajánlott irodalom: −Gamma et. Al.: Design Patterns

16 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 16 Tervezési minták - Eclipse  A legfontosabb részek mintákat kínálnak  És mintákat használnak  A kiterjesztések megvalósításához

17 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 17 Core runtime - IAdaptable  Alapprobléma −Az Eclipse kiterjeszthető platform ●Új funkciók, új komponensek jönnek létre −Az új elemek feldolgozásához meg kellene változtatni az API-t? ●Nem lenne elég stabil az interfész −A már meglevő részek működését is befolyásolni kell – hogyan? ●Az alap Java nem segít

18 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 18 Core runtime - IAdaptable  Példa −Az Eclipse elválasztja a megjelenítést a működéstől −Pl. IFile, IFolder, IProject – a fájlrendszer elemeinek absztrakciói – nincs megjelenítés −Lehetne: IUIFile, … ●Nem jó, mert minden új elemhez új UI interfész is kellene (overhead) −Hogyan jelenítsük meg az elemeket?

19 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 19 Core runtime - IAdaptable  Megoldás - IPropertySource −Egy interfész, melyen keresztül lekérdezhetők az elem megjelenítés-specifikus tulajdonságai −Hogyan implementáljuk? ●Közvetlenül… -> nem jó!

20 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 20 Core runtime - IAdaptable  Közvetlen implementáció −Túl sok örökölt interfészhez vezethet, nem jó −Az interfész átvételével változik az API, ami nem jó −Ha pl. az IFile tudna a Properties viewról, akkor beépítettünk egy nem kívánatos GUI – Core linket…

21 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 21 Core runtime - IAdaptable  Konklúzió −Szükség van egy megoldásra, mely lehetővé teszi: ●Egy interfész hozzáadását egy típushoz, anélkül hogy a típust belőle örököltetnénk ●Új viselkedést adjunk meglevő típusokhoz (pl. IFile)  Megoldás: Extension Object pattern

22 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 22 Core runtime - IAdaptable  Extension Object pattern −Cél: különböző interfészek támogatása anélkül, hogy a típusunknak örökölnie kellene őket −A kliens egy típuskód alapján kérheti le a megfelelő interfészt −Dinamikusan nőhet az interfészek száma −Futásidejű kötés lehetséges az extension- öknél

23 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 23 Core runtime - IAdaptable  Extension Object pattern −Kérdések ●Objektum vagy osztály szintű extension kezelés -> az Eclipse osztályt szintűt definiál  Új viselkedés megadható, de új tulajdonságok nem! ●Hogy adjuk meg a lehetséges extension-öket? -> 2 megoldás  A kiterjeszthető osztály maga adja meg (programozott)  Külső kiterjesztés esetén a Platform osztály segíségével regisztrálunk egy Adapter Factory-t az osztályhoz.

24 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 24 Core runtime - IAdaptable  Példa – bedrótozott kiterjesztés

25 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 25 Core runtime - IAdaptable  Példa – bedrótozott kiterjesztés Interfészt ad meg a kliens

26 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 26 Core runtime - IAdaptable  Példa – bedrótozott kiterjesztés Az implementáló osztályt példányosítjuk

27 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 27 Core runtime - IAdaptable  Példa – utólagos kiegészítés Az utólag elkészült extension osztály

28 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 28 Core runtime - IAdaptable  Példa – utólagos kiegészítés Az adapter factory, mely tartalmaz egy listát az extension-ökről

29 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 29 Core runtime - IAdaptable  Példa – utólagos kiegészítés Az adapter factory getAdapter metódusa. Az adott objektumhoz és adapterhez tartozó extension példányt kell visszaadni.

30 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 30 Core runtime - IAdaptable  Példa – utólagos kiegészítés Regisztrálni kell az AdapterFactory- t. Ezt a plugin start metódusában vagy statikus inicializáló blokkjában érdemes megtenni.

31 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 31 Core runtime - IAdaptable  Példa – utólagos kiegészítés – összefoglaló modell

32 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 32 Core runtime - IAdaptable  Elemek −IAdaptable – a kiegészítendő osztálynak implementálni kell −AdapterFactory – utólagos bővétményeket tárol és példányosít

33 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 33 Erőforrások  Erőforrások −Az Eclipse erősen fájlrendszer alapú ●Nincs köztes repository ●A fájlt vagy közvetlenül (kívülről) vagy az Eclipse- ből módosíthatjuk −Erőforrások ●Létrejönnek/módosulnak/törlődnek ●Nem akarjuk az állapotot több helyen tárolni  Állapotmentes referencia kell  Eclipse: csak Handle-t kap a kliens

34 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 34 Erőforrások  Handle −Két minta összekötése: Proxy és Bridge −Proxy: helyettes létrehozása egy objektum számára, hogy kontrolláljuk a hozzáférést ●Hozzáférés kezelés -> érvénytelen állapot kialakulásának elkerülése −Bridge: leválasztja az interfészt és az implementációt, hogy függetlenül módosulhassanak ●Az interfész és implementáció erős elválasztása

35 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 35 Erőforrások  Alkalmazás a fájlrendszerre: −Egy handle, ami kulcs a fájlhoz −Egy info objektum, mely a fájl állapotát tárolja. Csak egy info implementáció van minden handle-hez. −Handle: IFile, IFolder, IProject, IWorkspaceRoot ●Nem implementálandóak!

36 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 36 Erőforrások  Példa: IFile Csak az elérési utat és a workspace-t ismeri

37 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 37 Erőforrások  Handle −Érték típusok, az egyenlőséget qz equals() metódussal vizsgáljuk ●Hash-elhetőek ●Több handle mutathat ugyanarra az erőforrásra −Definiálhatják az erőforrás viselkedését, de az állapotát nem tárolhatják −Egy handle mutathat nem létező erőforrásra −Néhány művelet csak a handle-ben levő információkra alapoz, ezek nem létező erőforrás esetén is sikeresek

38 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 38 Erőforrások  Handle −Ha egy műveletnek szüksége van az erőforrásra, CoreException-t dob, ha az nem létezik −Létezés tesztelése: exists() −A handle egy szülő handle-ből keletkezik −A handle használható az erőforrás létrehozására is

39 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 39 Erőforrások  Handle −Mivel a handle állapot nélküli, biztosan nem tárol érvénytelen állapotot a kliensben.

40 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 40 Erőforrások  ResourceInfo −Az elemek állapotát tárolja −Leszármazott osztályok (pl. ProjectInfo) a speciális állapot tárolására −Fa struktúrában tárolódik a teljes workspace információja a memóriában −->”element tree” −Az info visszaadása a fa bejárásával történik a handle-ben levő path segítségével ●Lemezművelet nélkül megtalálhatjuk a keresett elemet

41 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 41 Workspace – composite pattern  Az erőforrás fa a composite mintát követi −A composite minta lényege: Fastruktúrába szervezni az elemeket, a köztük levő rész/egész viszony felhasználásával.  A fa gyökere: IWorkspaceRoot −ResourcePlugin.getWorkspace()

42 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 42 Workspace – composite pattern Az IResource közös ős A getParent() művelet csak a handle-kre alapozva teszi lehetővé a navigációt

43 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 43 Workspace – composite pattern Közös ős az összetett objektumok számára A gyerekek bejárhatóak a members() hívással De van jobb megoldás…

44 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 44 Erőforrás bejárás - Visitor  A kódolás elkerülésére alkalmazzuk  Visitor: Egy műveletet valósít meg, melyet egy objektum struktúrán akarunk megvalósítani.  A fa bejárást nem kell megvalósítani, csak egyszer

45 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 45 Erőforrás bejárás - Visitor  Struktúra  Az accept() metódus valósítja meg a bejárást, és visszahívja a visitor-t minden elemre  Ha a visit() true-val tér vissza, akkor az elem gyerekeit is be kell járni

46 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 46 Erőforrásváltozások követése - Observer  Az erőforrások változhatnak −Az Eclipse-en belüli változtatások miatt −A fájlrendszerhez való újraszinkronizálás miatt  Az állapotváltozásokat követni kell −A klienseknek a hatékony állapot-frissítések miatt szükségük lehet rá −A Workspace-ben kel regisztrálni

47 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 47 Erőforrásváltozások követése - Observer Tárolja a Listenereket

48 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 48 Erőforrásváltozások követése - Observer A listener megkapja az értesítést

49 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 49 Erőforrásváltozások követése - Observer  Kétféle módosítási minta −Push – a listener részletes információkat kap a változásokról −Pull – a listenernek kell lekérdezni az új állapotot −Eclipse: ResourceDelta ●Az erőforrás-fa állapot-változását írja le ●Önmaga is fa

50 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 50 Erőforrásváltozások követése - Observer  A resourceDelta az egyszeres és többszörös változásokat ugyanazzal a struktúrával írja le  Egyszerűen be lehet járni a delta tree-t  Mivel az erőforrások csak handle-k, törölt elemekre is hivatkozhatnak

51 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 51 Batch változtatások  Minden eseményvezérelt rendszerben veszélyes a túl sok esemény érkezése  Lehetőség van atomi kompozit akciók létrehozására −IWorkspaceRunnable −Atomi futtatás −Csak egy értesítés keletkezik, a futás végén

52 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 52 Batch változtatások - példa  Az „execute around method” minta alapján  A run() metódus az execute-around metódus

53 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 53 Erőforrások->Java elemek - Adapter  Az erőforrás-struktúra −Fájlok és mappák  A Java-centrikus nézet −A Java modell struktúrája – osztályok, csomagok, …  A Java nézetben más API-val akar dolgozni a felhasználó −Tipikus eset az adapter mintának

54 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 54 Erőforrások->Java elemek - Adapter  IJavaElement.getCorrespondingResource() – a mögöttes erőforrás – nem mindig van! −Vannak Java elemek, melyek a workspace-en kívül vannak, nincs erőforrás megfelelőjük −Java elemek, melyek metódusokat reprezentálnak

55 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 55 Erőforrások->Java elemek - Adapter  Az IJavaElement lehetővé teszi a mögöttes erőforrások elérését  Szükség lehet a másik irányra is! −Facade: JavaCore – factory metódusok erőforrásokból Java elem létrehozására -> ezek csak handle-k

56 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 56 Java elemek – (Virtuális) proxy  Hasonló struktúra, mint az erőforrások esetén

57 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 57 A Java modell bejárása  Nincs olyan Visitor megoldás, mint az erőforrásoknál −A Java fa lusta módszerrel épül fel −Ezért egy teljes bejárás költséges lenne ●A fordítási egységeket értelmezni kell… −Inkább egyedi keresést alkalmazzunk

58 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 58 A Java modell – változás figyelés  Nagyon hasonló az erőforrásoknál alkalmazotthoz

59 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 59 A Java modell – változás figyelés  Az erőforrás deltákkal ellentétben nem mindig a gyökérből indul  A delta csak az eseménykezelés alatt érvényes (erőforrás-felszabadítás)  ExecuteAround: JavaCore.run()

60 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 60 A Java modell – változás figyelés  A típushierarchia nem része a fának  Ezért külön változás-figyelés van hozzá

61 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 61 Eredmények gyűjtése - Builder  A Java Core több olyan elemet tartalmaz, melyek működése után egy eredménylista keletkezik −A search egy találati listát generál −A content assist a lehetséges folytatásokat adja vissza −A Java fordító hibaüzeneteket generál  A lista generálásának és megjelenítésének elválasztását meg kell oldani.

62 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 62 Eredmények gyűjtése - Builder  Builder: Válasszuk el egy komplex objektum létrehozását és ábrázolását, hogy ugyanaz a konstruktor más-más reprezentációhoz vezethessen.  Hasonló a Factory-hoz.  A Builder komponensek neve Requestor- ra vagy Collector-ra végződik (Eclipse konvenció)

63 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 63 Eredmények gyűjtése – Builder Példa: Search A SearchEngine végzi a keresést, és értesíti az IJavaSearchResultCollector-t

64 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 64 Eredmények gyűjtése – Builder Példa: Search Gyűjti a találatokat. Az aboutToStart() a kezdést jelzi, az accept az egyes találatokat.

65 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 65 Eredmények gyűjtése – Builder Példa: Content Assist Lehetséges folytatásokat keres

66 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 66 Eredmények gyűjtése – Builder Példa: Content Assist Az eredményeket típus szerint jelenti

67 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 67 UI Workbench – Lusta betöltés  A workbench számos extension point-ot definiál  Fontos a lazy load tulajdonság megteremtése, hogy ne kelljen minden extension-t betölteni  Példa: akciók  Csak a deklaráció töltődik be (plugin.xml) −Vrtuális proxy minta

68 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 68 Eredmények gyűjtése – Builder Példa: Content Assist Maga az Action a plugin.xml információi alapján készül. A run() kivételével mindent tud

69 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 69 Eredmények gyűjtése – Builder Példa: Content Assist Az implementáció csak a run() hívásakor töltődik be

70 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 70 UI Workbench – Állapotmegőrzés  User continuity rule: „Preserve the user interface state across sessions.”  Az állapot-tárolással kapcsolatos követelmények −Robosztus, könnyen bővíthető −Komplex struktúrákat is támogatnia kell −Tetszőleges objektumot el kell tudni menteni és visszatölteni

71 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 71 UI Workbench – Állapotmegőrzés  Memento: Az integritás megsértése nélkül tegyük lehetővé az objektum állapotának kimentését, amiből később az állapot visszaállítható.  Az Eclipse XML-alapú formátumot használ

72 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 72 UI Workbench – Editor és View visszaállítás  Sok editor és view lehet aktív  De csak kevés látszik egyszerre  Visszaállításkor nem kell mindet betölteni −Mert ez sok plugin aktiválásához vezetne  Proxy-kat kell használni  Kooperációt igényel: Ha le akarjuk kérni az editorok listáját, csak a proxy-kat kérjük le.

73 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 73 UI Workbench – Editor és View visszaállítás

74 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 74 Példa: ISafeRunnable for (Iterator all=getListeners().iterator();all.hasNext()) { IMyExstension ext = (IMyExtension)all.next(); ISafeRunnable runnable = new ISAfeRunnable() { public void handleException(Throwable exception){ all.remove(); } public void run() throws Exception { ext.execute(); //hívom az extensiont } }; Platform.run(runnable); } Végigmegyünk az extension-ökön


Letölteni ppt "Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Plugin fejlesztés – tervezési minták."

Hasonló előadás


Google Hirdetések