Seminar Software Design Patterns

Slides:



Advertisements
Ähnliche Präsentationen
Software Engeniering II
Advertisements

Objektrelationales Mapping mit JPA Advanced Topics Jonas Bandi Simon Martinelli.
Cloud42 Dominik Muhler Seminar StuPro cims cims.
Objektorientierte Programmierung
der Universität Oldenburg
Strategie (Strategy / Policy) Ein objektbasiertes Verhaltensmuster Stephan Munkelt, Stefan Salzmann - 03IN.
Eclipse.
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Stefanie Selzer - Pascal Busch - Michael Kropiwoda
Threads Richard Göbel.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (07 - Skiplisten) Prof. Th. Ottmann.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Christian Kästner Modellgetriebene Softwareentwicklung Eclipse Modelling Framework.
Eclipse - Entwicklungsumgebung und mehr ETIS SS05.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
FH-Hof 1 XML-Parser Richard Göbel. FH-Hof 2 XML-Parser- DOM Object Tree Parser Objekt der Klasse 'DocumentBuilderFactory' mit 'newInstance()' erzeugen.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Die Persistenzschicht
Delphi II - OOP IFB Fortbildung
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Java und Eclipse.
HORIZONT 1 XINFO ® Das IT - Informationssystem Java Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
1. Verhalten der Objekte: Operationen Werden in den Klassen definiert Werden (i.d.R.) auf einem Objekt aufgerufen Wird das Empfängerobjekt genannt Weitere.
Generalisierung/Spezialisierung Subtypisierung/Vererbung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
Aufgaben Version 1: Es soll eine Wetterstation mit folgenden zwei Anzeigen implementiert werden: Aktuelle Wetterbedingungen mit Temperatur und.
Eclipse-Entwicklungsumgebung
EPROG Tutorium #4 Philipp Effenberger
EPROG Tutorium #6 Philipp Effenberger
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
Neuerungen in Java 5/6/7. Stefan Bühler für InfoPoint Überblick Java 5 neue Sprachfeatures Erweiterungen Klassenbibliothek Java 6 Erweiterungen.
Plugin Design Patterns in
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
IT2 – WS 2005/20061Nov 14, 2005 Visibility  public: Sichtbar in allen Paketen  protected: Sichtbar innerhalb des Pakets und in den Unterklassen  (default,
-LABORPRAKTIKUM- SOMMERSEMESTER 2005
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
C++ FÜR cOMPUTERSPIELENTWICKLER
1. Die rekursive Datenstruktur Liste 1
Implementieren von Klassen
 Präsentation transkript:

Seminar Software Design Patterns Eclipse Patterns Seminar Software Design Patterns

Seminar Software Design Patterns Eclipse Patterns Agenda Einführung in Eclipse IAdaptable Arbeitsbereichskern – Ressourcen Zustände persistent speichern mit Memento Lazy Loading mit virtuellen Proxies 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Seminar Software Design Patterns Eclipse Patterns Eclipse-Plattform Eine Kurzeinführung Konvention: Interfaces beginnen mit „I“ 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Seminar Software Design Patterns Eclipse Patterns „The Eclipse Platform is an IDE for anything, and for nothing in particular“ (Eclipse Website) Im November 2001 von IBM, Object Technology International (OTI) und acht weitern Firmen ins Leben gerufen In der Zwischenzeit sind mehr als 50 Firmen beteiligt Februar 2004: Umwandlung in eine unabhänige „not-for-profit corporation“ Ende Juni 2004: Release 3.0, Eclipse als Rich Client Plattform 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Seminar Software Design Patterns Eclipse Patterns Was ist Eclipse ? Eclipse verkörpert drei Dinge: Eine JAVA Entwicklungsumgebung Eine Plattform für Tool-Integration Eine Open Source-Gemeinde Das Eclipse SDK besteht aus drei Ebenen Plattform Java Development Tools (JDT) Plug-In Development Environment (PDE) Plattform JDT PDE 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Variabler Plugin Mechanismus 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Laufzeitkern - IAdaptable Erweiterung von Schnittstellen Konvention: Interfaces beginnen mit „I“ 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Seminar Software Design Patterns Eclipse Patterns Ziel Eclipse soll eine erweiterbare Plattform sein d.h. zusätzliche Dienste oder Verhaltensweise müssen zu vorhandenen Klassen hinzugefügt werde können API‘s müssen stabil bleiben (→ keine Interfaces abändern oder neue hinzufügen Strenge Trennung von Benutzeroberfläche und nicht zum UI gehörenden Teilen Nicht UI Schnittstellen dürfen nicht mit Details der Benutzeroberfläche verunreinigt werden  Wie erweitere ich die Definition einer Schnittstelle ohne die Definition der Basisschnittstelle zu ändern und ohne die Erweiterung offenzulegen 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Seminar Software Design Patterns Eclipse Patterns Beispiel IFile public interface IFile { … } public interface IPropertySource { public interface IFile extends IPropertySource Probleme: bei vielen Service-Schnittstellen aufgeblähte Interfaces Soll die Properties Ansicht erst später hinzugeügt werden ist dies eine API Änderung IFile sollte nicht von der Benutzeroberfläche wissen 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Exkurs: Adapter (Wrapper) Passe die Schnittstelle einer Klasse an eine andere von ihren Klienten erwartete Schnittstelle an. Client Operation() Ziel Operation() AdaptierteKlasse SpezifischeOperation() Adapter Operation() Spezifische Operation 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Lösung: Erweiterungsobjekt „Vorwegnehmen dass die Schnittstelle eines Objekts zukünftig erweitert werden muss. Nach dem Muster Erweiterungsobjekt kann man einer Klasse Schnittstellen hinzufügen und Clients können abfragen, ob ein Objekt eine bestimmte Erweiterung hat.“ Möchte man dieses Muster implementieren stellen sich folgende Fragen Möchte ich ein einzelnes Objekt oder eine Klasse erweitern. Bei einem klassenbasierten Mechanismus fügt man Verhalten (Methoden) der ganzen Klasse hinzu, kann aber keinen Zustand (Felder) hinzufügen Wie wird eine Erweiterung beschrieben und identifiziert ? 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Implementierung in Eclipse Klassenbasierter Mechanismus Zusätzliches Verhalten wird durch eine Schnittstelle beschrieben Klassen die Anpassungsfähigkeit unterstützen implementieren die Schnittstelle IAdaptable public interface IAdaptable { public Object getAdapter(Class adapter); } 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Beispiel für die Benutzung Beispiel wie die Properties-Ansicht das momentan markierte Objekt nach seiner IPropertySource Schnittstelle abfragt org.eclipse.ui.views.properties/PropertySheetEntry IPropertySource getPropertySource(Object object){ … if (object instanceof IAdaptable) { IAdaptable a = (IAdaptable)object; return (IPropertySource)a.getAdapter( IPropertySource.class); } Pfeile z.B. IFile 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Verwendung von IAdaptable Eine Klasse möchte zusätzliche Schnittstellen anbieten ohne sie in der API offen zu legen. Die Methode getAdapter() wird dann von der Klasse selbst implementiert. Fügt man neue Schnittstellen hinzu muss getAdapter() geändert werden. Eine Klasse wird von außen erweitert um zusätzliche Dienste anzubieten. Dann ist keine Änderung in der Klasse notwendig, getAdapter() wird von einer Fabrik bereitgestellt. 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Schnittstelle mit IAdaptable offen legen Methode getAdapter() in einer Klasse die IPropertySource unterstützt: Object getAdapter(Class adapter) { if(adapter.equals(IPropertySource.class) return new PropertySourceAdapter(this); if(adapter.equals(IShowInSource.class) return new ShowInSourceAdapter(this); return super.getAdapter(this); } Adapter Klasse die IPropertySource implementiert: public class PropertySourceAdapter implements IPropertySource { private IFile source; public PropertySourceAdapter(IFile source) { this.source=source; … 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Seminar Software Design Patterns Eclipse Patterns Adapterfabrik Eine Klasse AdapterFactory mit den Adaptern implementieren die man einem bestimmten Typ hinzufügen möchte class FileAdapterFactory implements IAdapterFactory { public Class[] getAdapterList() { return new Class[] {IPropertySource.class}; } public Object getAdapter(Object o, Class adapter) { if(adapter == IPropertySource.class) return new FilePropertySource((IFile)o); return null; //… 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Schnittstelle zu vorh. Typen hinzufügen Die Fabrik für einen bestimmten Typ beim AdapterManager, den die Klasse Plattform bereitstellt, registrieren IAdapterManger manger = Platform.getAdapterManager(); IAdapterFactory factory = new FileAdapterFactory(); Manger.registerAdapter(factory,IFile.class); Aufrufe von getAdapter() auf die Factory umleiten org.eclipse.core.internal.resources/File Object getAdapter(Class adapter) { Platform.getAdapterManager().getAdapter(this,adapter); } Mehrere Factorys für eine Klasse registrieren 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Arbeitsbereichskern - Ressourcen Zugriff auf Dateisystemressourcen 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Seminar Software Design Patterns Eclipse Patterns Hintergrund In Eclipse ist das Dateisystem dominant d.h. Der Arbeitsbereich wird direkt auf das Dateisystem abgebildet so daß es kein zwischengelagertes Repository gibt Änderungen auf Ressourcen entweder direkt im Dateisystem oder aus Eclipse heraus Ressourcen-Plug-In unterstützt die Verwaltung eines Arbeitsbereiches und seiner Ressourcen Bsp: VisualAge Repository erklären 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Seminar Software Design Patterns Eclipse Patterns Ziel Möglichkeit eine Ressource im Dateisystem zu verfolgen Ressourcen ändern sich im Verlauf des Lebenszyklus durch: Erstellung Inhaltsänderung Versionen Löschen Neue Erzeugung 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Lösung Dateisystemzugriff  Wie greife ich auf das Dateisystem zu? Zugriff auf Ressource über Handle und nicht direkt Handle wirkt wie ein Schlüssel auf eine Ressource (Proxy) „Kontrolliere den Zugriff auf ein Objekt mithilfe eines vorgelagerten Stellvertreterobjekts“ Handle speichert die Pfadinformationen der Ressource Handles sind als Schnittstellen definiert Handle kann auf nicht existierende Ressource verweisen Handle speichert keinerlei Zustandsinformationen Zustand erhält man durch erneutes abrufen des zugehörigen Info-Objekts (Brücke) „Entkopple eine Abstraktion von ihrer Implementation, so daß beide unabhängig voneinander variiert werden können“ 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Seminar Software Design Patterns Eclipse Patterns Umsetzung IResource Proxy org.eclipse.core.resources IWorkspaceRoot IProject IFolder IFile getFullPath() getMarker() getModificationStamp() getSessionProperty() … Brücke API Nicht - API ResourceInfo Resource getResourceInfo() getMarker() getModificationStamp() … 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Seminar Software Design Patterns Eclipse Patterns Beispiel Erzeugung eines untergeordneten Handles IProject project; IFolder folder = project.getFolder(„someFolder“); Erzeugung einer Ressource folder.create(…); Ein paar Handle-Operationen folder.getFullPath(); folder.getParent(); folder.exists(); … Operationen die vom Vorhandensein der Ressource abhängig sind lösen eine CoreException – Ausnahme aus 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Lösung Ressourcenänderung  Wie wird der Client über Änderungen informiert? Beobachten von Änderungen über Ressourcen-Listener Welcher vom Arbeitsbereich zur Verfügung gestellt wird (Beobachter) Beobachter registriert sich beim Arbeitsbereich (Subjekt) 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Seminar Software Design Patterns Eclipse Patterns Umsetzung IWorkspace * ResourcenChangeListener addResourceChangeListener() removeResourceChangeListener() resourceChanged(IResourceChangeEvent) Beobachter: Subjekt Beobachter IResourceChangeListener beobachtet IWorkspace 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Benachrichtigungsprinzip Push-Modell Subjekt schickt detaillierte Info von Änderungen an alle Beobachter egal ob von Interesse oder nicht (IResourceDelta) Entsprechendes IResourceChangeEvent welches vom Listener empfangen wird enthält sämtliche Ressourcenabweichungen inklusive sämtlicher Änderungen untergeordneter Elemente * IResourceChangeEvent IResourceDelta getDelta() getResource() getKind() getResource() getKind() getAffectedChildren() 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Benutzeroberfläche der Workbench 1 Zustände persistent speichern mit Memento 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Seminar Software Design Patterns Eclipse Patterns Ziel Bewahrung von Kontinuität über Sitzungen hinweg Wiederherstellung des letzten Zustandes nach Sitzungsende Neustart Beim Öffnen von z.B. einer Java-Klassen „User Continuity Rule“: Bewahren Sie den Zustand der Benutzeroberfläche zwischen zwei Sitzungen 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Seminar Software Design Patterns Eclipse Patterns Ziel visualisiert entsprechenden Editor starten Perspektive laden Position merken 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Seminar Software Design Patterns Eclipse Patterns Lösungsansatz JDK bietet bereits Möglichkeit der Serialisierung „implements Serializable“ Wird jedoch von Eclipse nicht verwendet Anfälligkeit gegenüber Änderungen über verschiedene Versionen hinweg JDK Eclipse-Klassenimplementierungen Das Speicherformat muss angesichts von Änderungen robust sein. Eine neuere Version einer Klasse muss in der Lage sein, die Daten von einer älteren Version wiederherzustellen. Insbesondere kann die Klasse in einer späteren Sitzung überhaupt nicht mehr verfügbar sein. Der Speichermechanismus muss komplexe Strukturen unterstützen Der Speichermechanismus muss in der Lage sein, beliebige Objekte zu speichern und wiederherzustellen 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Seminar Software Design Patterns Eclipse Patterns Lösung: Memento „Erfasse und externalisiere den internen Zustand eines Objektes, ohne seine Kapselung zu verletzen, sodass das Objekt später in diesen Zustand zurückversetzt werden kann.“ Originator setMemento(Memento m) createMemento(): Memento state Memento getState() setState() state Caretaker Ein Memento speichert eine Momentaufnahme des internen Zustands eines anderen Objekts. erzeugt & verwendetMemento speichert Status 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Lösung in Eclipse: IMemento org.eclipse.ui/Memento public interface IMemento { void putString(String key, String value); String getString(String key); void putString(String key, Integer value); Integer getString(String key); IMemento createChild(String type); IMemento[] getChildren(String type); //… } IMemento-Objekt speichert Schlüssel/Wert-Paare einfacher Typen Struktur wird durch Baum von IMementos erzeugt IMemento-Struktur wird durch XML-basiertes Speicherformat realisiert 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Beispiel ResourceNavigator Workbench übergibt ein IMemento-Objekt Dieses Objekt wird vom Client gefüllt Serialisierung durch Workbench Keine symmetrische Wiederherstellung Zustand wird über beim Start des Clients über init() Methode empfangen 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Beispiel ResourceNavigator cont. org.eclipse.ui.views/ResourceNavigator private static final String TAG_SELECTION="selection"; private static final String TAG_ELEMENT="element"; public void saveState(IMemento memento) { //… //save selection Object elemements[]= ((IStructuredSelection)viewer.getSelection()).toArray(); if (elements.length>0) { IMemento selectionMem=memento.createChild(TAG_SELECTION); for (int i=0; i<elements.length; i++) { IMemento elementMem=selectionMem.createChild(TAG_ELEMENT); elementMem.putString(TAG_PATH, ((IResource)elements[i]).getFullPath().toString()); } Die Workbench übergibt ein IMemento-Objekt an saveState() und Clients füllen das Memento mit dem zu speichernden Zustand. Die Wiederherstellung des Zustands ist nicht symmetrisch, da es keine von der Wokrbench aufgerufene restoreState()-Methode gibt. Stattdessen empfangen Clients das Memento einer Ansicht in der Methode init(). 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Beispiel ResourceNavigator cont. org.eclipse.ui.views/ResourceNavigator IMemento memento; public void init(IViewSite site, IMemento memento) throws PartInitException { super.init(site, memento); this.memento=memento; } Keine symmetrische Wiederherstellung Empfang des Memento über init()-Methode Die Workbench übergibt ein IMemento-Objekt an saveState() und Clients füllen das Memento mit dem zu speichernden Zustand. Die Wiederherstellung des Zustands ist nicht symmetrisch, da es keine von der Wokrbench aufgerufene restoreState()-Methode gibt. Stattdessen empfangen Clients das Memento einer Ansicht in der Methode init(). 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Benutzeroberfläche der Workbench 2 Lazy Loading mit virtuellen Proxies 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Seminar Software Design Patterns Eclipse Patterns Ziel Einfügen von Menüs, Menübefehlen und Symbolleistenschaltflächen in Eclipse Workbench als Paradebeispiel definiert viele Erweiterungspunkte Resourcen-Einsparung durch punktgenaues Laden von Klassen  Implementierung der Lazy Loading-Regel Erweiterungspunkt: Architekturmechanismus, der die Erweiterbarkeit von Plugins öffentlich deklariert. 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Seminar Software Design Patterns Eclipse Patterns Lösung in Eclipse Manifest-Datei plugin.xml Definiert Eigenschaften eines Plugins (Kontext-) Menüs, Schaltflächen, etc. Views und Editoren u.v.a. Einsatz von virtuellen Proxies: Workbench füllt ein PluginAction-Objekt mit Informationen im Manifest (Titel, Symbol, Tooltip) → Proxy-Objekt Eigentliche Aktion kann Proxy nicht ausführen Weiterleitung der run()-Anforderung an die eigentliche Erweiterungsklasse 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Seminar Software Design Patterns Eclipse Patterns Lazy Loading Auszug aus Plugin-Konfigurationsdatei plugin.xml: org.eclipse.team.cvs-ui/plugin.xml <extension point="org.eclipse.ui.actionSets"> <actionSet> … <action toolbarPath="Normal/CVS" label="Neuer Menüpunkt" tooltip="Mein hinzugefüger Menüpunk" icon="icons/icon.gif" class="contrib.MyMenuClass" id="contrib.MyMenuClass" </action> </actionSet> </extension> 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Seminar Software Design Patterns Eclipse Patterns Lazy Loading Proxy: Subjekt Proxy: eigentliches Subjekt IAction PluginAction run() selectionChanged(ISelection) IActionDelegate run(IAction) selectionChanged(IAction, ISelection) Proxy MyMenuClass run(IAction) selectionChanged(IAction, ISelection) PluginAction lädt die eigentliche Aktion 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Seminar Software Design Patterns Eclipse Patterns Ressources Eclipse Erich Gamma, Kent Beck: „Eclipse erweitern“, Addison-Wesley, 2004 Sherry Shavor et. Al.: „Eclipse“, Addison-Wesley, 2004 Erweiterungsobjekt/Erweiterungsschnittstelle R. Martin: „Pattern Languages of Program Design 3“, Addison-Wesley, 1998 D. Schmidt et. Al.: „Pattern-Oriented Software Architecture Volume 2: Patterns for Concurrent and Networked Objects“, Jon Wiley & Sons, 2000 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns

Vielen Dank für die Aufmerksamkeit! Fragen ? 23.6.2004 - Philipp Schill, Ralf Schmauder, Alexander Eberhardt Seminar Software Design Patterns Eclipse Patterns