Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaEszter Kocsisné Megváltozta több, mint 10 éve
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
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.