Dynamische Proxy Klassen

Größe: px
Ab Seite anzeigen:

Download "Dynamische Proxy Klassen"

Transkript

1 Dynamische Proxy Klassen Seminar Enterprise Computing Seminararbeit von André Markwalder, IB99 Fachhochschule Aargau Departement Technik Studiengang I Betreuender Dozent: Dr. D. Gruntz Windisch, 28. Januar 2002

2 Summary Seite 1 Der vorliegende Bericht stellt eine Einführung ins Thema der dynamischen Proxy Klassen dar. Die dynamischen Proxy Klassen bestehen grundsätzlich aus zwei Teilen, dem Proxy Design Pattern einerseits und dem JAVA Reflection API andrerseits. Der vorliegende Bericht gibt Aufschluss über die beiden Themen. Im ersten Teil wird tiefer auf das Proxy Design Pattern eingegangen. Anhand eines Beispiels wird die Verwendung dieses Patterns gezeigt. Weitere Proxy Anwendungen runden den ersten Teil ab. Der zweite Teil ist dem JAVA Reflection API gewidmet. Es wird dabei verzichtet das JAVA Reflection API im Detail zu zeigen. Vielmehr wird auf den für die dynamischen Proxy Klassen wichtigen Teil eingegangen. Es handelt sich dabei um die Proxy Klasse im Package java.lang.reflect. Der dritte und letzte Teil soll anhand eines Beispieles den Einsatz von dynamischen Proxy Klassen zeigen. Es wird dabei eine bestehende Anwendung zuerst mittels eines Proxy s, später mit einem dynamischen Proxy, erweitert. Hinweise auf weiterführende Literatur runden den Bericht ab.

3 Inhaltsverzeichnis Seite 2 Einleitung Proxy Design Pattern Motivation und Absicht Anwendung des Proxy Design Patterns Struktur und Design Java Reflection API in Bezug auf die dynamischen Proxy Klassen Was ist das Reflection API Die Packages java.lang und java.lang.reflect Das Interface InvocationHandler und die Klasse Proxy Beispiele von dynamischen Proxy Klassen Das Vehicle Beispiel Das Basisbeispiel Erweiterung mit einem Proxy Erweiterung mit einem dynamischen Proxy Erweiterung zum generischen Logger Weitere Beispiele...14 Schluss...15 A. Anhang...16 A1. Code Beispiele...16 A1.1. Vehicle Proxy Beispiel...16 A1.2. Security Proxy Beispiel...16 A1.3. Remote Proxy Beispiel...16 A1.4. Virtual Proxy Beispiel...17 A2. Bibliographie...18

4 Seite 3 Einleitung Der vorliegende Seminar Bericht richtet sich an die Studierenden des 5. und 6. Semester im Departement (Ausbildungsbereich) Technik Studiengang Informatik der FHA in Windisch. Weiter an interessierte Softwarearchitekten und Softwareentwickler. Die dynamischen Proxy Klassen umfassen im wesentlichen zwei Bereiche: Das Proxy Design Pattern einerseits und das JAVA Reflection API andrerseits. Der vorliegende Bericht beschränkt sich nicht nur auf die theoretische Erklärung der beiden Materien, sondern versucht mittels Beispielen die Umsetzung mit der Programmiersprache JAVA zu zeigen. Die richtige Verwendung von Design Patterns bedingt ein sehr gutes Verständnis der Materie und Erfahrung im Bau von Software. Der vorliegende Bericht gibt einen Überblick über das Proxy Design Pattern und dessen Umsetzung. Die JAVA Technologie Reflection wird kurz beschrieben und im Zusammenhang der dynamischen Proxy Klassen genauer erklärt. Im Bericht werden nur Codefragmente aufgelistet. Im Anhang befindet sich eine Beschreibung des gesamten Source Codes der verwendeten Beispielen.

5 Seite 4 1 Proxy Design Pattern 1.1 Motivation und Absicht Der Proxy ist ein sogenanntes Design Pattern (Muster). Diese Muster wurden entworfen um den Bau von Software zu erleichtern und erprobte Mechanismen zu formalisieren und dokumentieren. Der Proxy ist eine weitverbreitete Technik um Funktionalität von Objekten zu verbergen und ist ebenfalls unter dem Namen Surrogate (Platzhalter) bekannt. Bild 1 Der Proxy ist ein Platzhalter für ein konkretes Subjekt. Der Zugriff auf dieses Subjekt wird durch den Proxy gesteuert. Durch diese Steuerung erhält der Proxy die notwendige Fähigkeit wo, wann, wer und wie er auf das konkrete Subjekt zugreifen will/darf. Da die Aufrufe auf das konkrete Subjekt durch den Proxy gesteuert werden, verbirgt er Funktionalität vor dem Benutzer (Programmierer). Natürlich muss diese Funktionalität trotzdem programmiert werden, jedoch für die Anwendung des Subjektes, scheint der Zugriff transparent zu sein. Ein möglicher Ablauf eines Aufrufes über einen Proxy ist in Bild 1 zu sehen. Ein Grund für die Kontrolle des Zugriffs können die Initialisierungs- und Instanzierungskosten sein. An einem kleinen Beispiel kann dies gezeigt werden. Unsere Aufgabe ist es ein Textverarbeitungsprogramm bzw. einen Texteditor zu entwickeln. Dieses Textverarbeitungsprogramm soll zusätzlich Bilder anzeigen können. Bilder haben die Eigenschaft, dass sie zuerst in den Hauptspeicher geladen werden müssen und es dadurch lange dauert bis sie geladen sind. Wenn nun ein Dokument in unserem Textverarbeitungsprogramm geöffnet wird, würde bei einem schlechten Design der Software, ziemlich viel Zeit beim Laden der Bilder verbracht. Wenn man diese Problematik genauer analysiert, bemerkt man, dass die Bilder grundsätzlich gar noch nicht gebraucht werden, sondern erst wenn diese in den sichtbaren Bereich des Editors gescrollt werden. Man müsste dann die Bilder erst laden, wenn sie wirklich sichtbar werden. Diesen Mechanismus nennt man creating/loading on demand (erzeugen/laden nach Bedarf). Es gibt nun mehrere Möglichkeiten den bereits bestehenden Code zu verändern, damit wir dieses creating bzw. loading on demand bewerkstelligen können. Eine schlechte Lösung wäre, wenn wir den Ladecode anpassen. Das ist deshalb schlecht, weil wir die Funktionalität des Ladens verändern. Es gibt vielleicht Fälle in denen man dieses loading on demand nicht braucht und man müsste dann den Ladecode parametrisieren. Viel schöner wäre es, wenn wir den Code einfach durch verschiedene Instanzzierungen von Objekten parametrisierbar machen. Dies erreichen wir durch einen Decorator/Wrapper 1. Ein Beispiel für solche Decorator sind die IO Klassen in JAVA (BufferedReader, PrintWriter etc.). Der springende Punkt ist nun der, unser Decorator ist ein Platzhalter und stellt die Bildfunktionalität zur Verfügung, das Bild wird jedoch noch nicht geladen, sondern erst, wenn das Bild gezeichnet werden soll. Das heisst wenn die Methode draw 1 Der Decorator bzw. Wrapper ist ein anderes Design Pattern und wird in diesem Bericht nicht näher behandelt, da es den Umfang sprengen würde. Kurzerklärung; der Decorator delegiert alle Aufrufe, welche an ihn getätigt werden, an ein anderes Objekt.

6 Seite 5 vom Bildobjekt aufgerufen wird. Operationen wie Bild vergrössern, -verkleinern etc. werden nicht auf dem Bildobjekt ausgeführt, sondern im Decorator gespeichert, erst wenn es nötig ist, wird das Bild geladen. Bild 2 Bild 2 zeigt die Verwendung des ImageProxy. Die Attribute size und filename werden dazu verwendet, die Grösse bzw. das zu ladende Bild zu speichern. Durch diesen Mechanismus ist es möglich, das Bild erst bei Gebrauch zu laden. Das private Attribute image ist die Referenz zum Subjekt auf welchem der Proxy aufsetzt. Die Ähnlichkeit mit dem Decorator Pattern ist nicht zu übersehen. 1.2 Anwendung des Proxy Design Patterns Wie wir gesehen haben ist der Proxy ein Platzhalter Objekt und es gibt nun verschiedene Arten von Platzhaltern. Einer dieser Platzhalter ist der im vorangegangenen Kapitel angesprochene Virtual Proxy. Zu diesem Virtual Proxy gibt es den Remote Proxy, den Protection Proxy und die Smart References. Diese vier Kategorien haben sich im Laufe der Zeit herauskristallisiert und sind heute die meist verwendeten Arten von Proxies. Der Remote Proxy ist ein Platzhalter für Objekte, welche über ein Netzwerk (remote) angesprochen werden. Er versteckt bzw. macht die Funktionalität für Remote Objekte transparent. Für den Anwender bedeutet dies, er muss sich nicht darum kümmern, ob die Objekte auf seinem Computer oder auf einem anderen Computer instanziert werden. Solche Proxies spielen vor allem in verteilten Systemen eine grosse Rolle und werden da auch eingesetzt. In JAVA zum Beispiel basiert die Technologie RMI (Remote Method Invocation) auf dem Prinzip von Remote Proxies. Der virtuelle Proxy ist ein reiner Platzhalter. Wie es der Name schon sagt, ist er nur virtuell vorhanden. Er steuert den Zugriff zu lade- bzw. zeitintensiven Objekten. Der vorher erklärte Image Proxy ist ein Beispiel eines Virtual Proxy. Der Protection Proxy steuert den direkten Zugriff auf das Objekt. Er entscheidet zu Laufzeit, wer welche Methoden aufrufen darf und wem der Zugriff verwährt bleibt. Die Abstufung der Überprüfung kann selber (vom Programmierer des Proxy) gewählt werden und reicht von grob- bis feingranular. Smart References wurden erfunden um Funktionalität von Pointern zu erweitern. Sie führen zusätzliche Aufgaben beim Aufruf des Pointers aus. Beispiele dazu sind Reference Counting, laden von persistenten Objekten in den Hauptspeicher, Locking Mechanismen etc. In den vier Gruppen erkennt man die Einsatzgebiete der Proxies. Grundsätzlich kann man jeden Proxy in eine dieser vier Gruppen einteilen. Eine eindeutige Klassifikation ist jedoch nicht immer möglich und meistens auch nicht nötig. Wenn man jedoch die Einsatzgebiete von Proxies kennt, ist es einfacher Proxies in seiner eigenen Software zu integrieren.

7 1.3 Struktur und Design Seite 6 Die Struktur bzw. das Design des Proxy Design Patterns ähnelt sehr dem Decorator Pattern. Dies wurde auch schon in den vorangegangenen Kapiteln bereits erkannt. Der Proxy, wie auch der Decorator, schalten sich bei einem Aufruf zwischen Aufrufenden und Aufgerufenen. Der Unterschied dieser zwei Design Patterns liegt eigentlich nur in der Bedeutung bzw. in der Implementierung. Der Decorator delegiert alle seine Aufrufe an die entsprechende Methode des im zugrunde liegenden Objektes. Der Proxy ist da etwas freier. Je nach Verwendungszweck des Proxy kann der Aufruf zum Beispiel untersagt werden (Protection Proxy). Was beim einen (Decorator) zwingend, ist beim anderen fakultativ (Proxy). Bild 3 In Bild 3 ist die Struktur des Proxy Patterns zu erkennen. Das Interface Subject wird von beiden Klassen, RealSubject und Proxy implementiert. Das ermöglicht dem Proxy sich als Platzhalter für das RealSubject auszugeben. Da nun sämtlich Aufrufe an das RealSubject durch den Proxy getätigt werden, hat dieser natürlich volle Kontrolle über den Nachrichtenfluss. Durch diese Kontrolle ist es möglich Funktionalität für den Benutzer transparent zu handhaben. Das heisst, der Benutzer muss sich nicht um Netzhandling oder andere Funktionalität kümmern.

8 Seite 7 2 Java Reflection API in Bezug auf die dynamischen Proxy Klassen 2.1 Was ist das Reflection API Es gibt grundsätzlich zwei Wege um in JAVA Informationen über Klassen und Objekte zu erhalten. Der traditionelle, etwas beschränkte Weg ist der instance of Operator. Mit diesem Operator können Typen zu Kompilierzeit überprüft werden. Der zweite und viel mächtigere Weg ist mittels des JAVA Reflection API s. Mit dieser Sammlung von Klassen können zu Laufzeit Informationen über Objekte und Klassen gesammelt werden. Das JAVA Reflection API enthält viel Funktionalität und kann daher in die folgenden Untergruppen unterteilt werden: Dynamisches Laden von Klassen Class.forName Typenüberprüfung instance of Informationen über Klassen und Objekte Klassen Class, Method, Fields, etc. Dynamische Proxies Klasse Proxy im Package java.lang.reflect Die ersten beiden Punkte (dynamisches Laden und instance of Operator) werden nicht näher beschrieben, da sie für die dynamischen Proxy Klassen keine grosse Rolle spielen. Hingegen die Proxy Klasse bzw. der Rest des java.lang.reflect Packages sind wichtig für das Verständnis der dynamischen Proxy Klassen und werden im nächsten Kapitel näher beschrieben. 2.2 Die Packages java.lang und java.lang.reflect Wie bereits erwähnt, enthält das Package java.lang.reflect die nötigen Klassen um mittels Reflection zu Laufzeit Information über Klassen und Objekte zu sammeln. Damit dies zu Laufzeit geschehen kann, muss irgendwo ein Einstiegspunkt vorhanden sein, um diese Informationen anzufordern. Dieser Einstiegspunkt befindet sich in der Klasse Object. Jede JAVA Klasse ist vom Typ Object abgeleitet und daher ist dies der ideale Angriffspunkt für das JAVA Reflection API. Die Klasse Object enthält die Methode getclass(). Diese Methode gibt ein Objekt vom Typ Class (Package java.lang) zurück. Dieses Objekt repräsentiert das dynamische Objekt bzw. die instanzierte Klasse. Mittels verschiedener Methoden, wie z.b. getmethods() können die Methoden, welche die Klasse besitzt, herausgefunden werden. Näheres zu den verschiedenen Methoden und Klassen im Package java.lang und java.lang.reflect ist der AP I Dokumentation zu entnehmen. Ein wichtiger Bestandteil des Reflection API s und der dynamischen Proxy Klassen ist der ClassLoader. Aus diesem Grund wird er etwas detailierter beschrieben. Jede Klasse besitzt einen sogenannten ClassLoader. Dieser ClassLoader ist zuständig für das Laden der Klasse in den Speicher. Er ist im Package java.lang zu finden und kann durch die Methode <Class/Object>.getClass().getClassLoader() abgeholt werden. Der ClassLoader ist eine abstrakte Klasse und kann daher auch nicht instanziert werden. Der ClassLoader ist wichtig, da er für die später beschriebene Klasse Proxy einen wichtigen Bestandteil darstellt. Das Interface InvocationHandler und die Klasse Proxy schliessen das java.lang.reflect Package ab. Sie stellen die eigentlichen Kernkomponenten der dynamischen Proxy Klassen dar. Sie werden im nächsten Kapitel detailliert beschrieben.

9 2.3 Das Interface InvocationHandler und die Klasse Proxy Seite 8 Um dynamische Proxy Klassen zu implementieren, braucht es grundsätzlich zwei Komponenten. Einen dynamischen Handler, welcher das InvocationHandler Interface implementiert und den eigentlichen Proxy. Der Proxy ist relativ einfach zu implementieren, der existiert nämlich bereits. Es ist dies die Klasse Proxy. Von der Klasse Proxy muss man nur eine neue Instanz erzeugen und der Proxy ist bereits fertig. Um eine neue Instanz der Proxy Klasse zu erzeugen ruft man spezielle statische Methoden auf der Klasse auf. Es ist dabei zu bemerken, dass dynamische Proxy Klassen nicht auf Klassen beschränkt sind, sie können auch dynamisch ein Interface instanzieren. Anstelle eines Klassen Class Objects wird einfach ein Interface Class Object übergeben. Es folgt nun ein Beispiel, wie man eine Instanz eines Proxy erzeugen kann. Lassen sie sich nicht durch den InvocationHandler irritieren, die Erklärung was ein InvocationHandler ist folgt direkt nach dem Beispiel. Es gibt zwei Varianten eine Instanz eines dynamischen Proxy zu erzeugen. Eine erste Variante sieht folgendermassen aus: InvocationHandler handler = new MyInvocationHandler( ); Class proxyclass = Proxy.getProxyClass( Foo.class.getClassLoader(), new Class[] { Foo.class ); Foo f = (Foo) proxyclass.getconstructor( new Class[] { InvocationHandler.class ). newinstance(new Object[] { handler ); Es ist schön zu sehen wie zuerst eine Proxy Klasse erzeugt wird und danach die eigentliche Instanz der dynamischen Proxy Klasse aus dem Proxy heraus erzeugt wird. Nun diese Variante ist etwas umständlich. Das haben sich wohl auch die Entwickler gedacht und haben eine etwas einfachere Variante hinzugefügt, welche folgendermassen aussieht: InvocationHandler handler = new MyInvocationHandler( ); Foo f = (Foo) Proxy.newProxyInstance( Foo.class.getClassLoader(), new Class[] { Foo.class, handler); Grundsätzlich machen beide Varianten dasselbe, die zweite ist jedoch etwas kompakter und daher auch etwas besser zu lesen. Als erster Parameter erhält die Funktion newproxyinstance einen ClassLoader. Im vorangegangenen Kapitel wurde der ClassLoader erklärt. Er wird hier gebraucht um die Klasse, welche gewrappt wird zu laden. Als zweiten Parameter erhält die Funktion ein Array von Class Objekten. Das sind die Interfaces bzw. Klassen welche implementiert werden. Als letzten Parameter erhält die Funktion den InvocationHandler, welcher später beschrieben wird. Da der Proxy diverse Interfaces dynamisch implementiert, kann das Object, welches zurückgegeben wird auch ohne Probleme in ein solches gecastet werden. Es war nun immer die Rede eines Invocation Handlers. Mittels diesem Handler kann der Programmierer Einfluss auf das Verhalten des Proxy nehmen. Hier geschieht die Implementation des Proxy z.b. die Implementation der Remote Funktionalität für einen Remote Proxy oder die Sicherheitsfunktionalität eines Security Proxy. Die Implementation eines Invocation Handlers ist einfach. Der Handler implementiert das Interface InvocationHandler, dadurch muss er die Funktion invoke(object proxy, Method method, Object[] args) implementieren. Als ersten Parameter erhält die

10 Seite 9 Funktion den Proxy, welcher die invoke Methode aufgerufen hat. Als zweiten Parameter bekommt er die aufgerufene Methode auf dem Objekt. Als dritten Parameter werden die Argumente geliefert. Method1() Client Method2() Method3() Target Bild 4 Bild 4 zeigt ein Problem, welches mit einem dynamischen Proxy modeliert werden könnte, falls die Anforderung käme, man müsse gewisse Funktionalität zwischen Client und Target einbauen, z.b. sämtliche Aufrufe auf dem Target müssten geloggt werden oder es müsse ein Security Konzept implementiert werden, dass nicht jederman Funktionen ausführen darf. Method1() Method1() Method2() Method2() Client Proxy Target Method3() Method3() Bild 5 Bild 5 zeigt die Implementation mit einem normalen Proxy. Der Proxy empfängt den Methodenaufruf, tätigt seine Arbeit und ruft dann die Methode auf dem Target auf. Man sieht hier bereits einen riesen Nachteil eines normalen Proxies. Sämtlich Methodenaufrufe müssen implementiert werden, d.h. wenn eine neue Methode auf dem Target hinzu kommt, dann muss diese ebenfalls auf dem Proxy implementiert werden. Method1() Client Method2() Method3() Proxy invoke() Invocation Handler invoke() Target Bild 6 In Bild 6 ist der Ablauf eines dynamischen Proxy Aufrufs dargestellt. Im ersten Schritt wird auf dem Proxy die Methode 1, 2 oder 3 aufgerufen. Damit dies möglich ist, muss der Proxy das Target Interface implementieren. Der Proxy leitet nun die Anfrage an den Invocation Handler weiter. Dies geschieht mit dem Reflection API von JAVA. Der Invocation Handler entscheidet nun was mit dem Aufruf geschehen soll. Je nach Implementation leitet er den Aufruf weiter, bricht ihn ab oder macht sonst irgendwas. Diese Implementation ist dem Programmierer überlassen. Meistens verwendet der Invocation Handler ebenfalls das Reflection API von JAVA, um den Aufruf zu tätigen. Aus dem Bild ist ebenfalls ersichtlich, dass der Invocation Handler das Target kennen muss, da er Funktionen auf diesem Target ausführen möchte. Wenn nun das Target Interface ändert, muss nicht unbedingt die Implementation des Proxy geändert werden.

11 Seite 10 3 Beispiele von dynamischen Proxy Klassen 3.1 Das Vehicle Beispiel Das Basisbeispiel Im letzten Kapitel haben wir ganz generell eine Applikation schrittweise mit einem Proxy und dann mit einem dynamischen Proxy erweitert. Dies wollen wir nun ebenfalls tun an einem konkreten Beispiel. Das konkrete Beispiele ist ein Vehicle. Dieses Vehicle wird durch einen Client bedient. Dazu werden zwei Klassen und ein Interface benötigt. Das Interface IVehicle sieht folgendermassen aus: public interface IVehicle { public void start(); public void stop(); public void forward(); public void reverse(); public String getname(); Die Implementation des Vehicles macht nichts anderes als die aufgerufene Methode auszugeben. Das Vehicle implementiert natürlich das IVehicle Interface. Die Implementation Car sieht folgendermassen aus: public class Car implements IVehicle { private String name; public Car(String name) {this.name=name; public void start() { System.out.println("Car " + name + " started"); public void stop() { public void forward() { public void reverse() { public String getname() { Der Client macht nun nichts anderes als Car zu instanzieren und die verschiedenen Methoden aufzurufen. Die Client Implementation sieht folgendermassen aus: public class Client { public static void main(string[] args) { new Client();

12 public Client() { IVehicle v = new Car("Audi RS4"); v.start(); v.forward(); v.stop(); Seite 11 Dieses Programm soll nun mit einem Proxy erweitert werden. Die Stärke des Proxy liegt darin, bestehende Funktionalität zu erweitern. Wir wollen nun das Vehicle dahin erweitern, dass jede Funktion auf der Konsole ausgegeben wird. Schlussendlich soll ein generischer Logger entstehen, welcher unabhängig von der Implementation und Interface sämtliche Aufrufe auf die Konsole schreibt Erweiterung mit einem Proxy In einem ersten Schritt erweitern wir das Basisbeispiel mit einem Proxy. Das verwendete Interface bleibt sich gleich. Ebenfalls die Vehicle Klasse, wir wollen die bestehende Funktionalität erweitern. Eine neue Klasse ist die VehicleProxy Klasse. Diese Klasse stellt den Proxy dar. Sie sieht folgendermassen aus: public class VehicleProxy implements IVehicle { private IVehicle v; public VehicleProxy(IVehicle v) { this.v=v; public void start() { System.out.println("VehicleProxy: Begin of start()"); v.start(); System.out.println("VehicleProxy: End of start()"); public void stop() { public void forward() { public void reverse() { public String getname() { Wie wir in den ersten Kapiteln gesehen haben, besitzt der Proxy eine Referenz auf das reale Subjekt. In unserem Fall ist dies das eigentliche Vehicle (Car Objekt). Dieses Vehicle wird in den Konstruktor übergeben. Bei diesem Codesegment ist sehr schön der grosse Nachteil des Proxy zu sehen. Alle Methoden müssen an das Subjekt delegiert werden und müssen daher auch implementiert werden. Bei einer Änderung am Interface muss nicht nur die konkrete Implementierung der Funktionalität geändert werden, sondern auch der Proxy, was ein bisschen mühsam ist. Weitere Änderungen gibt es auf dem Client, denn da muss natürlich der Proxy instanziert werden und die Aufrufe müssen auf diesem Proxy Objekt getätigt werden. Der Client Code sieht folgendermassen aus:

13 public class Client { public static void main(string[] args) { new Client(); public Client() { IVehicle c = new Car("Audi RS4"); IVehicle v = new VehicleProxy(c); v.start(); v.forward(); v.stop(); Seite 12 Bei diesem Codesegment ist schön zu sehen, wie das reale Subjekt (Car) instanziert wird und an den Proxy weitergeleitet wird Erweiterung mit einem dynamischen Proxy Beim dynamischen Proxy muss ebenfalls nur der Proxy (InvocationHandler VehicleHandler) und der Client angepasst werden, der Rest bleibt unverändert. Der Code des InvocationHandler bzw. des VehicleHandler sieht folgendermassen aus: public class VehicleHandler implements InvocationHandler { private IVehicle target; public VehicleHandler(IVehicle target) { this.target=target; public Object invoke(object proxy, Method m, Object[] args) throws Throwable { System.out.println("VH: Invoking " + m.getname()); return m.invoke(target,args); In diesem Handler muss nun nicht mehr jede Methode implementiert werden, da das JAVA Reflection API verwendet wird. Gleich wie beim Proxy muss aber das target bzw. destination Objekt übergeben werden (Konstruktor). In der Methode invoke muss nun nur noch die Ausgabe auf die Konsole erfolgen und die aufgerufene Methode an das Target weitergeleitet werden. Der Client erfährt ebenfalls eine kleine Änderung, in etwa die gleich wie bei der Verwendung des normanlen Proxy. Der Client Code sieht folgendermassen aus: public class Client { public static void main(string[] args) {

14 new Client(); public Client() { IVehicle c = new Car("Audi RS4"); IVehicle v = (IVehicle)Proxy.newProxyInstance( IVehicle.class.getClassLoader(), new Class[] {IVehicle.class, new VehicleHandler(c) ); v.start(); v.forward(); v.stop(); Seite 13 Mit dem bekannten instanzieren des Proxy aus Kapitel 2 wird nun der Proxy und VehicleHandler erzeugt. Zu erwähnen ist auch das casten des Proxy auf das IVehicle Interface. Danach können die Aufrufe ganz normal getätigt werden Erweiterung zum generischen Logger Die Erweiterung zu einem generischen Logger ist sehr einfach. Der VehicleHandler besitzt momentan eine Referenz auf das IVehicle Interface. Grundsätzlich kann dies natürlich irgend eine Referenz sein. Für einen generischen Logger bietet sich natürlich die Klasse Object an. Somit würde der generische Logger folgendermassen aussehen: public class GenericLogger implements InvocationHandler { private Object target; public GenericLogger(Object target) { this.target=target; public Object invoke(object proxy, Method m, Object[] args) throws Throwable { System.out.println("GL: Invoking " + m.getname()); return m.invoke(target,args); Der Client entspricht dem Client für den dynamischen Proxy. Dieser generische Logger kann nun für irgendeinen Client verwendet werden. In den beigelegten Beispielen sind diese Logger zu sehen (CarClient und PetLogger).

15 3.2 Weitere Beispiele Seite 14 In den vorangegangenen Abschnitten haben wir die Implementation bzw. das Weiterentwickeln eines dynamischen Proxy gesehen. Im ersten Kapitel haben wir gesehen, dass es noch weitere Arten von Proxies gibt. Im Anhang bzw. im beigelegten Sourcecode sind weitere Beispiele enthalten, welche die Verwendung von Proxies darstellen. Im Prinzip funktionieren diese aber genau gleich wie das Vehicle Beispiel, behandeln aber eine andere Thematik. Die folgenden Thematiken wurden gewählt: Security Proxy Remote Proxy Virtual Proxy Dies entspricht den momentan gängigen Implementation von Proxies. Wie man die Beispiele verwendet, kann dem Anhang entnommen werden.

16 Seite 15 Schluss Das Proxy Design Pattern wurde entworfen um spezielle Funktionalität vom Benutzer zu verbergen. Eine andere Aufgabe des Patterns kann sein, bestehende Funktionalität zu erweitern. Typische Proxies sind: Virtual Proxy, Remote Proxy, Protection Proxy und Smart References. Das Proxy Design Pattern wird auch Surrogate genannt. Das JAVA Reflection API ist eine Spracherweiterung für JAVA, welche es dem Entwickler erlaubt, zu Laufzeit dynamisch Objekte zu erzeugen. Dies ist aber nicht die einzige Aufgabe des Reflection API, denn es stellt zusätzlich Informationsbehälter zur Verfügung, welche Informationen über Klassen und Objekte enthalten. Wenn man nun die beiden Thematiken mischt, erhält man die dynamischen Proxy Klassen. Man nimmt das Design Pattern Proxy und das dynamische Aufrufen von Methoden und es kommen die dynamischen Proxy Klassen zum Vorschein. Dynamische Proxy Klassen werden mit der Klasse Proxy aus dem java.lang.reflect Package erzeugt. Es werden dabei dynamisch Interfaces implementiert. Diese Interfaces können auch wieder ausgewechselt werden. Dies hat den Vorteil, dass sämtlich Operationen auf dem Proxy typengeprüft sind. Dynamische Proxy Klassen eignen sich hervorragend um bestehende Funktionalität zu erweitern. Man darf jedoch nie das Konzept der dynamischen Proxy Klassen aus dem Auge verlieren. Das Problem der dynamischen Proxy Klassen besteht darin, dass es meistens einfacher ist, die Anforderungen an die Software anzupassen, damit man die dynamischen Proxy Klassen verwenden kann. Diese sollte jedoch auf keinen Fall geschehen. Damit diese nicht passiert, muss man das Konzept, welches hinter den dynamischen Proxy Klassen steht, vollkommen verstanden haben. Die dynamischen Proxy Klassen sind ein tolles und elegantes Werkzeug in der modernen Softwareentwicklung. Ein gezielter und gut überlegter Einsatz sind jedoch Bedingung, damit der Einsatz von dynamischen Proxy Klassen zum Erfolg führt.

17 Seite 16 A. Anhang A1. Code Beispiele Die Beispiele sind im JAR Archiv DynamicProxyClasses.jar zu finden. In diesem JAR Archiv sind der Source Code, wie auch die lauffähigen Programme zu finden. Die folgenden Beispiele sind die meistgebrauchten Arten von Proxies. A1.1. Vehicle Proxy Beispiel Das Vehicle Proxy Beispiel besteht aus mehreren JAVA Programmen, welche in Packages strukturiert bzw. enthalten sind. Es sind dies folgende Programme bzw. Packages: dpc.vehicleexample.client Basis Funktionalität dp.vehicleexample.proxy.standard.client Proxy Implementation des Vehicle Beispiels dpc.vehicleexample.proxy.dynamic.client Dynamische Proxy Implementation des Vehicle Beispiels dpc.vehicleexample.logger.decorator.client Decorator Implementation eines Loggers dpc.vehicleexample.logger.generic.carclient Generische Logger Implementation des Vehicle Beispiels dpc.vehicleexample.logger.generic.petclient Generische Logger Implementation des Pet Beispiels (gleicher Logger wie im Vehicle Beispiel) Anhand dieser Beispiele kann die Verwendung von Dynamischen Proxy Klassen gezeigt werden. Die Beispiele bauen aufeinander auf und mit dem generischen Logger ist das Endprodukt zu sehen. A1.2. Security Proxy Beispiel Nachdem am Vehicle Beispiel die Verwendung der dynamischen Proxy Klassen zu sehen war, wird in den nächsten Beispielen spezielle Arten von Proxies betrachtet. Mit dem Security Proxy wird eine Zugriffssteuerung auf eine sogenannte View gezeigt. Die Security Mechanismen sind auf Methoden Ebene implementiert. Zu startende Klasse: dpc.securityexample.client A1.3. Remote Proxy Beispiel Das Remote Proxy Beispiel zeigt eine Implementation eines Socket Servers. Durch den Proxy wird der Zugriff transparent. Der Socket Server ist ein sogenannter Echo Server. Dieser Echo Server antwortet immer mit dem eingegangenen Aufruf. Zu startende Klasse: dpc.remoteexample.client

18 A1.4. Virtual Proxy Beispiel Seite 17 Das Virutal Proxy Beispiel zeigt eine Implementation des Grafik Beispiels vom ersten Kapitel. Das Laden der Grafik wird nur simuliert. Das Prinzip des Virtual Proxy ist aber ersichtlich. Zu startende Klasse: dpc.virtualexample.client

19 Seite 18 A2. Bibliographie Blosser, Jeremy (2001). Explore the Dynamic Proxy API. Stand Blosser, Jeremy (2001) Java Tip 98: Reflect on the Visitor design pattern. Stand Gamma, Erich; Helm, Richard; Johnson Ralph; Vlissides, John (1995). Design Patterns - Elements of Reusable Object-Oriented Software. 20., Boston u.a.: Addison-Wesley Halloway, Stuart (2001) Dynamic Proxies. ftp://ftp.ora.com/pub/conference/java2001/halloway_dynamic_proxies.zip Stand Jung, Christoph G. (2001) Dynamic Proxies. Stand Lavers, Tim (2001) Java Tip 108: Apply RMI autogeneration. Stand Portwood, Michael T. (2001) Using Java Technology Reflection to Improve Design. Stand Sun Microsystems, Inc. (2001) Dynamic Proxy Classes. Stand Sun Microsystems, Inc. (2001) Using dynamic proxies to layer new functionality over existing code. Stand Sun Microsystems, Inc. (2001) Using java.lang.reflect.proxy to Interpose on Java Class Methods. Stand Tarr, Bob (2001) Dynamic Proxies in Java. Stand

Anleitung über den Umgang mit Schildern

Anleitung über den Umgang mit Schildern Anleitung über den Umgang mit Schildern -Vorwort -Wo bekommt man Schilder? -Wo und wie speichert man die Schilder? -Wie füge ich die Schilder in meinen Track ein? -Welche Bauteile kann man noch für Schilder

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Factory Method (Virtual Constructor)

Factory Method (Virtual Constructor) Factory Method (Virtual Constructor) Zweck: Definition einer Schnittstelle für Objekterzeugung Anwendungsgebiete: Klasse neuer Objekte bei Objekterzeugung unbekannt Unterklassen sollen Klasse neuer Objekte

Mehr

Java: Vererbung. Teil 3: super() www.informatikzentrale.de

Java: Vererbung. Teil 3: super() www.informatikzentrale.de Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

Daniel Warneke warneke@upb.de 08.05.2006. Ein Vortrag im Rahmen des Proseminars Software Pioneers

Daniel Warneke warneke@upb.de 08.05.2006. Ein Vortrag im Rahmen des Proseminars Software Pioneers Design Patterns Daniel Warneke warneke@upb.de 08.05.2006 Ein Vortrag im Rahmen des Proseminars Software Pioneers Design Patterns 1/23 Übersicht Einleitung / Motivation Design Patterns Beispiele Rolle des

Mehr

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung für Anfänger am Beispiel PHP Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten

Mehr

Speicher in der Cloud

Speicher in der Cloud Speicher in der Cloud Kostenbremse, Sicherheitsrisiko oder Basis für die unternehmensweite Kollaboration? von Cornelius Höchel-Winter 2013 ComConsult Research GmbH, Aachen 3 SYNCHRONISATION TEUFELSZEUG

Mehr

Professionelle Seminare im Bereich MS-Office

Professionelle Seminare im Bereich MS-Office Der Name BEREICH.VERSCHIEBEN() ist etwas unglücklich gewählt. Man kann mit der Funktion Bereiche zwar verschieben, man kann Bereiche aber auch verkleinern oder vergrößern. Besser wäre es, die Funktion

Mehr

Einführung in die Java- Programmierung

Einführung in die Java- Programmierung Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113

Mehr

Ist Fernsehen schädlich für die eigene Meinung oder fördert es unabhängig zu denken?

Ist Fernsehen schädlich für die eigene Meinung oder fördert es unabhängig zu denken? UErörterung zu dem Thema Ist Fernsehen schädlich für die eigene Meinung oder fördert es unabhängig zu denken? 2000 by christoph hoffmann Seite I Gliederung 1. In zu großen Mengen ist alles schädlich. 2.

Mehr

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als

Mehr

Projektmanagement in der Spieleentwicklung

Projektmanagement in der Spieleentwicklung Projektmanagement in der Spieleentwicklung Inhalt 1. Warum brauche ich ein Projekt-Management? 2. Die Charaktere des Projektmanagement - Mastermind - Producer - Projektleiter 3. Schnittstellen definieren

Mehr

Version smarter mobile(zu finden unter Einstellungen, Siehe Bild) : Gerät/Typ(z.B. Panasonic Toughbook, Ipad Air, Handy Samsung S1):

Version smarter mobile(zu finden unter Einstellungen, Siehe Bild) : Gerät/Typ(z.B. Panasonic Toughbook, Ipad Air, Handy Samsung S1): Supportanfrage ESN Bitte füllen Sie zu jeder Supportanfrage diese Vorlage aus. Sie helfen uns damit, Ihre Anfrage kompetent und schnell beantworten zu können. Verwenden Sie für jedes einzelne Thema jeweils

Mehr

Menü auf zwei Module verteilt (Joomla 3.4.0)

Menü auf zwei Module verteilt (Joomla 3.4.0) Menü auf zwei Module verteilt (Joomla 3.4.0) Oft wird bei Joomla das Menü in einem Modul dargestellt, wenn Sie aber z.b. ein horizontales Hauptmenü mit einem vertikalen Untermenü machen möchten, dann finden

Mehr

Der lokale und verteilte Fall

Der lokale und verteilte Fall Lokale Beans Der lokale und verteilte Fall RemoteClient Lokaler Client (JSP) RemoteSession/Entity-Bean Lokale Session/Entity-Bean 2 Lokale Beans Die bisher vorgestellten EJBswaren immer in der Lage auf

Mehr

Anton Ochsenkühn. amac BUCH VERLAG. Ecxel 2016. für Mac. amac-buch Verlag

Anton Ochsenkühn. amac BUCH VERLAG. Ecxel 2016. für Mac. amac-buch Verlag Anton Ochsenkühn amac BUCH VERLAG Ecxel 2016 für Mac amac-buch Verlag 2 Word-Dokumentenkatalog! Zudem können unterhalb von Neu noch Zuletzt verwendet eingeblendet werden. Damit hat der Anwender einen sehr

Mehr

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9 Prof. Dr. Wilhelm Schäfer Paderborn, 15. Dezember 2014 Christian Brenner Tristan Wittgen Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9 Aufgabe 1 Codegenerierung

Mehr

Dokumentenverwaltung im Internet

Dokumentenverwaltung im Internet Dokumentenverwaltung im Internet WS 09/10 mit: Thema: Workflow und Rollenverteilung im Backend Gruppe: DVI 10 Patrick Plaum und Kay Hofmann Inhalt 1. Benutzer und Benutzergruppen erstellen...2 1.1. Benutzergruppen...2

Mehr

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3 Handbuch Fischertechnik-Einzelteiltabelle V3.7.3 von Markus Mack Stand: Samstag, 17. April 2004 Inhaltsverzeichnis 1. Systemvorraussetzungen...3 2. Installation und Start...3 3. Anpassen der Tabelle...3

Mehr

Große Übung Praktische Informatik 1

Große Übung Praktische Informatik 1 Große Übung Praktische Informatik 1 2005-12-08 fuessler@informatik.uni-mannheim.de http://www.informatik.uni-mannheim.de/pi4/people/fuessler 1: Announcements / Orga Weihnachtsklausur zählt als Übungsblatt,

Mehr

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016 L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016 Referentin: Dr. Kelly Neudorfer Universität Hohenheim Was wir jetzt besprechen werden ist eine Frage, mit denen viele

Mehr

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff Java Reflection Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff Java Reflection Die Java Reflection API liefert per Introspection Informationen über Klassen => Meta-Daten.

Mehr

Primzahlen und RSA-Verschlüsselung

Primzahlen und RSA-Verschlüsselung Primzahlen und RSA-Verschlüsselung Michael Fütterer und Jonathan Zachhuber 1 Einiges zu Primzahlen Ein paar Definitionen: Wir bezeichnen mit Z die Menge der positiven und negativen ganzen Zahlen, also

Mehr

1 Mathematische Grundlagen

1 Mathematische Grundlagen Mathematische Grundlagen - 1-1 Mathematische Grundlagen Der Begriff der Menge ist einer der grundlegenden Begriffe in der Mathematik. Mengen dienen dazu, Dinge oder Objekte zu einer Einheit zusammenzufassen.

Mehr

Arbeiten mit UMLed und Delphi

Arbeiten mit UMLed und Delphi Arbeiten mit UMLed und Delphi Diese Anleitung soll zeigen, wie man Klassen mit dem UML ( Unified Modeling Language ) Editor UMLed erstellt, in Delphi exportiert und dort so einbindet, dass diese (bis auf

Mehr

Zählen von Objekten einer bestimmten Klasse

Zählen von Objekten einer bestimmten Klasse Zählen von Objekten einer bestimmten Klasse Ziel, Inhalt Zur Übung versuchen wir eine Klasse zu schreiben, mit der es möglich ist Objekte einer bestimmten Klasse zu zählen. Wir werden den ++ und den --

Mehr

Informationen zum neuen Studmail häufige Fragen

Informationen zum neuen Studmail häufige Fragen 1 Stand: 15.01.2013 Informationen zum neuen Studmail häufige Fragen (Dokument wird bei Bedarf laufend erweitert) Problem: Einloggen funktioniert, aber der Browser lädt dann ewig und zeigt nichts an Lösung:

Mehr

Grundlagen der Theoretischen Informatik, SoSe 2008

Grundlagen der Theoretischen Informatik, SoSe 2008 1. Aufgabenblatt zur Vorlesung Grundlagen der Theoretischen Informatik, SoSe 2008 (Dr. Frank Hoffmann) Lösung von Manuel Jain und Benjamin Bortfeldt Aufgabe 2 Zustandsdiagramme (6 Punkte, wird korrigiert)

Mehr

Bereich METIS (Texte im Internet) Zählmarkenrecherche

Bereich METIS (Texte im Internet) Zählmarkenrecherche Bereich METIS (Texte im Internet) Zählmarkenrecherche Über die Zählmarkenrecherche kann man nach der Eingabe des Privaten Identifikationscodes einer bestimmten Zählmarke, 1. Informationen zu dieser Zählmarke

Mehr

Handbuch für Redakteure

Handbuch für Redakteure Handbuch für Redakteure Erste Schritte... 1 Artikel erstellen... 2 Artikelinhalt bearbeiten... 3 Artikel bearbeiten... 3 Grunddaten ändern... 5 Weitere Artikeleigenschaften... 5 Der WYSIWYG-Editor... 6

Mehr

Synchronisations- Assistent

Synchronisations- Assistent TimePunch Synchronisations- Assistent Benutzerhandbuch Gerhard Stephan Softwareentwicklung -und Vertrieb 25.08.2011 Dokumenten Information: Dokumenten-Name Benutzerhandbuch, Synchronisations-Assistent

Mehr

4 Aufzählungen und Listen erstellen

4 Aufzählungen und Listen erstellen 4 4 Aufzählungen und Listen erstellen Beim Strukturieren von Dokumenten und Inhalten stellen Listen und Aufzählungen wichtige Werkzeuge dar. Mit ihnen lässt sich so ziemlich alles sortieren, was auf einer

Mehr

Eine eigene Seite auf Facebook-Fanseiten einbinden und mit einem Tab verbinden.

Eine eigene Seite auf Facebook-Fanseiten einbinden und mit einem Tab verbinden. Eine eigene Seite auf Facebook-Fanseiten einbinden und mit einem Tab verbinden. Nach den Änderungen die Facebook vorgenommen hat ist es einfacher und auch schwerer geworden eigene Seiten einzubinden und

Mehr

Programme im Griff Was bringt Ihnen dieses Kapitel?

Programme im Griff Was bringt Ihnen dieses Kapitel? 3-8272-5838-3 Windows Me 2 Programme im Griff Was bringt Ihnen dieses Kapitel? Wenn Sie unter Windows arbeiten (z.b. einen Brief schreiben, etwas ausdrucken oder ein Fenster öffnen), steckt letztendlich

Mehr

GEVITAS Farben-Reaktionstest

GEVITAS Farben-Reaktionstest GEVITAS Farben-Reaktionstest GEVITAS Farben-Reaktionstest Inhalt 1. Allgemeines... 1 2. Funktionsweise der Tests... 2 3. Die Ruhetaste und die Auslösetaste... 2 4. Starten der App Hauptmenü... 3 5. Auswahl

Mehr

Webalizer HOWTO. Stand: 18.06.2012

Webalizer HOWTO. Stand: 18.06.2012 Webalizer HOWTO Stand: 18.06.2012 Copyright 2003 by manitu. Alle Rechte vorbehalten. Alle verwendeten Bezeichnungen dienen lediglich der Kennzeichnung und können z.t. eingetragene Warenzeichen sein, ohne

Mehr

FAQ 04/2015. Auswirkung der ISO 14119 auf 3SE53/3SF13 Positionsschalter. https://support.industry.siemens.com/cs/ww/de/view/109475921

FAQ 04/2015. Auswirkung der ISO 14119 auf 3SE53/3SF13 Positionsschalter. https://support.industry.siemens.com/cs/ww/de/view/109475921 FAQ 04/2015 Auswirkung der ISO 14119 auf 3SE53/3SF13 Positionsschalter mit https://support.industry.siemens.com/cs/ww/de/view/109475921 Dieser Beitrag stammt aus dem Siemens Industry Online Support. Es

Mehr

Applet Firewall und Freigabe der Objekte

Applet Firewall und Freigabe der Objekte Hauptseminar Applet Firewall und Freigabe der Objekte Nachweis von Sicherheitseigenschaften für JavaCard Jin Zhou Ein Überblick über diesen Vortrag Applet Firewall Kontext JCRE Entry Point Objekt Shareable

Mehr

Informationsblatt Induktionsbeweis

Informationsblatt Induktionsbeweis Sommer 015 Informationsblatt Induktionsbeweis 31. März 015 Motivation Die vollständige Induktion ist ein wichtiges Beweisverfahren in der Informatik. Sie wird häufig dazu gebraucht, um mathematische Formeln

Mehr

Hinweise in Leichter Sprache zum Vertrag über das Betreute Wohnen

Hinweise in Leichter Sprache zum Vertrag über das Betreute Wohnen Hinweise in Leichter Sprache zum Vertrag über das Betreute Wohnen Sie möchten im Betreuten Wohnen leben. Dafür müssen Sie einen Vertrag abschließen. Und Sie müssen den Vertrag unterschreiben. Das steht

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

1 topologisches Sortieren

1 topologisches Sortieren Wolfgang Hönig / Andreas Ecke WS 09/0 topologisches Sortieren. Überblick. Solange noch Knoten vorhanden: a) Suche Knoten v, zu dem keine Kante führt (Falls nicht vorhanden keine topologische Sortierung

Mehr

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: 24.09.2014)

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: 24.09.2014) Handbuch NAFI Online-Spezial 1. Auflage (Stand: 24.09.2014) Copyright 2016 by NAFI GmbH Unerlaubte Vervielfältigungen sind untersagt! Inhaltsangabe Einleitung... 3 Kundenauswahl... 3 Kunde hinzufügen...

Mehr

Übung: Verwendung von Java-Threads

Übung: Verwendung von Java-Threads Übung: Verwendung von Java-Threads Ziel der Übung: Diese Übung dient dazu, den Umgang mit Threads in der Programmiersprache Java kennenzulernen. Ein einfaches Java-Programm, das Threads nutzt, soll zum

Mehr

http://train-the-trainer.fh-joanneum.at IINFO Storyboard

http://train-the-trainer.fh-joanneum.at IINFO Storyboard IINFO Storyboard Allgemeine Bemerkungen und Richtlinien zur Handhabung. Das Storyboard besteht aus einem Web, d.h. einer vernetzten Struktur von HTML-Seiten welche später von den Programmieren direkt als

Mehr

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert Beamen in EEP Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert Zuerst musst du dir 2 Programme besorgen und zwar: Albert, das

Mehr

affilinet_ Flash-Spezifikationen

affilinet_ Flash-Spezifikationen affilinet_ Flash-Spezifikationen Inhaltsverzeichnis Allgemeines...2 Klickzählung...2 Lead/Sale Programme... 2 PPC und Kombi Programme...3 Übergabe von Formulardaten...4 clicktag Variante Sale/Lead Programm...4

Mehr

Leseprobe. Bruno Augustoni. Professionell präsentieren. ISBN (Buch): 978-3-446-44285-6. ISBN (E-Book): 978-3-446-44335-8

Leseprobe. Bruno Augustoni. Professionell präsentieren. ISBN (Buch): 978-3-446-44285-6. ISBN (E-Book): 978-3-446-44335-8 Leseprobe Bruno Augustoni Professionell präsentieren ISBN (Buch): 978-3-446-44285-6 ISBN (E-Book): 978-3-446-44335-8 Weitere Informationen oder Bestellungen unter http://wwwhanser-fachbuchde/978-3-446-44285-6

Mehr

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Java Kurs für Anfänger Einheit 4 Klassen und Objekte Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse

Mehr

Lernerfolge sichern - Ein wichtiger Beitrag zu mehr Motivation

Lernerfolge sichern - Ein wichtiger Beitrag zu mehr Motivation Lernerfolge sichern - Ein wichtiger Beitrag zu mehr Motivation Einführung Mit welchen Erwartungen gehen Jugendliche eigentlich in ihre Ausbildung? Wir haben zu dieser Frage einmal die Meinungen von Auszubildenden

Mehr

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen. Übersicht Struts Forms Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen. Allgemeines Autor: Sascha Wolski http://www.laliluna.de/tutorials.html

Mehr

Menü Macro. WinIBW2-Macros unter Windows7? Macros aufnehmen

Menü Macro. WinIBW2-Macros unter Windows7? Macros aufnehmen Menü Macro WinIBW2-Macros unter Windows7?... 1 Macros aufnehmen... 1 Menübefehle und Schaltflächen in Macros verwenden... 4 Macros bearbeiten... 4 Macros löschen... 5 Macro-Dateien... 5 Macros importieren...

Mehr

Jederzeit Ordnung halten

Jederzeit Ordnung halten Kapitel Jederzeit Ordnung halten 6 auf Ihrem Mac In diesem Buch war bereits einige Male vom Finder die Rede. Dieses Kapitel wird sich nun ausführlich diesem so wichtigen Programm widmen. Sie werden das

Mehr

Das Festkomitee hat die Abi-Seite neu konzipiert, die nun auf einem (gemieteten) Share Point Server

Das Festkomitee hat die Abi-Seite neu konzipiert, die nun auf einem (gemieteten) Share Point Server Hallo Leute Das Festkomitee hat die Abi-Seite neu konzipiert, die nun auf einem (gemieteten) Share Point Server (= echtes - zeug ) liegt! Die neue Form hat insbesondere folgende Vorteile: Du bekommst einen

Mehr

Gutes Leben was ist das?

Gutes Leben was ist das? Lukas Bayer Jahrgangsstufe 12 Im Hirschgarten 1 67435 Neustadt Kurfürst-Ruprecht-Gymnasium Landwehrstraße22 67433 Neustadt a. d. Weinstraße Gutes Leben was ist das? Gutes Leben für alle was genau ist das

Mehr

ObjectBridge Java Edition

ObjectBridge Java Edition ObjectBridge Java Edition Als Bestandteil von SCORE Integration Suite stellt ObjectBridge Java Edition eine Verbindung von einem objektorientierten Java-Client zu einer fast beliebigen Server-Komponente

Mehr

Wir arbeiten mit Zufallszahlen

Wir arbeiten mit Zufallszahlen Abb. 1: Bei Kartenspielen müssen zu Beginn die Karten zufällig ausgeteilt werden. Wir arbeiten mit Zufallszahlen Jedesmal wenn ein neues Patience-Spiel gestartet wird, muss das Computerprogramm die Karten

Mehr

WebService in Java SE und EE

WebService in Java SE und EE Schlüsselworte Java, JAX-WS, JAX-RS, JAXB, XML. Einleitung WebService in Java SE und EE Wolfgang Nast MT AG Ratingen Es werden die Mölichkeiten von WebServices in Java SE und EE, mit SOAP und REST gezeigt.

Mehr

Nicht kopieren. Der neue Report von: Stefan Ploberger. 1. Ausgabe 2003

Nicht kopieren. Der neue Report von: Stefan Ploberger. 1. Ausgabe 2003 Nicht kopieren Der neue Report von: Stefan Ploberger 1. Ausgabe 2003 Herausgeber: Verlag Ploberger & Partner 2003 by: Stefan Ploberger Verlag Ploberger & Partner, Postfach 11 46, D-82065 Baierbrunn Tel.

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Persönliche Zukunftsplanung mit Menschen, denen nicht zugetraut wird, dass sie für sich selbst sprechen können Von Susanne Göbel und Josef Ströbl

Persönliche Zukunftsplanung mit Menschen, denen nicht zugetraut wird, dass sie für sich selbst sprechen können Von Susanne Göbel und Josef Ströbl Persönliche Zukunftsplanung mit Menschen, denen nicht zugetraut Von Susanne Göbel und Josef Ströbl Die Ideen der Persönlichen Zukunftsplanung stammen aus Nordamerika. Dort werden Zukunftsplanungen schon

Mehr

Nutzung von GiS BasePac 8 im Netzwerk

Nutzung von GiS BasePac 8 im Netzwerk Allgemeines Grundsätzlich kann das GiS BasePac Programm in allen Netzwerken eingesetzt werden, die Verbindungen als Laufwerk zu lassen (alle WINDOWS Versionen). Die GiS Software unterstützt nur den Zugriff

Mehr

10 Erweiterung und Portierung

10 Erweiterung und Portierung 10.1 Überblick In vielen Fällen werden Compiler nicht vollständig neu geschrieben, sondern von einem Rechnersystem auf ein anderes portiert. Das spart viel Arbeit, ist aber immer noch eine sehr anspruchsvolle

Mehr

Gruppenrichtlinien und Softwareverteilung

Gruppenrichtlinien und Softwareverteilung Gruppenrichtlinien und Softwareverteilung Ergänzungen zur Musterlösung Bitte lesen Sie zuerst die gesamte Anleitung durch! Vorbemerkung: Die Begriffe OU (Organizational Unit) und Raum werden in der folgenden

Mehr

Doku zur Gebäudebrüter Datenbank

Doku zur Gebäudebrüter Datenbank Autor: Christina Baradari, christina.baradari@berlin.de, 0162 2008 114 Doku zur Gebäudebrüter Datenbank Team Web Programmierer: Rahim Baradari Inhaltsverzeichnis 1 Suchen nach Kartierungsdaten... 2 1.1

Mehr

Statuten in leichter Sprache

Statuten in leichter Sprache Statuten in leichter Sprache Zweck vom Verein Artikel 1: Zivil-Gesetz-Buch Es gibt einen Verein der selbstbestimmung.ch heisst. Der Verein ist so aufgebaut, wie es im Zivil-Gesetz-Buch steht. Im Zivil-Gesetz-Buch

Mehr

FAQ Spielvorbereitung Startspieler: Wer ist Startspieler?

FAQ Spielvorbereitung Startspieler: Wer ist Startspieler? FAQ Spielvorbereitung Startspieler: Wer ist Startspieler? In der gedruckten Version der Spielregeln steht: der Startspieler ist der Spieler, dessen Arena unmittelbar links neben dem Kaiser steht [im Uhrzeigersinn].

Mehr

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests. Universität Osnabrück 1 Problemstellung 3 - Objektorientierte Programmierung in Java Vorlesung 24: Reflection 1 SS 2006 Prof. Dr. Frank M. Thiesing, FH Osnabrück Um ein Objekt anzulegen, eine seiner Methoden

Mehr

1 Vom Problem zum Programm

1 Vom Problem zum Programm Hintergrundinformationen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik WS 02/03 AG Betriebssysteme FB3 Kirsten Berkenkötter 1 Vom Problem zum Programm Aufgabenstellung analysieren

Mehr

Nina. bei der Hörgeräte-Akustikerin. Musterexemplar

Nina. bei der Hörgeräte-Akustikerin. Musterexemplar Nina bei der Hörgeräte-Akustikerin Nina bei der Hörgeräte-Akustikerin Herausgeber: uphoff pr-consulting Alfred-Wegener-Str. 6 35039 Marburg Tel.: 0 64 21 / 4 07 95-0 info@uphoff-pr.de www.uphoff-pr.de

Mehr

WinWerk. Prozess 6a Rabatt gemäss Vorjahresverbrauch. KMU Ratgeber AG. Inhaltsverzeichnis. Im Ifang 16 8307 Effretikon

WinWerk. Prozess 6a Rabatt gemäss Vorjahresverbrauch. KMU Ratgeber AG. Inhaltsverzeichnis. Im Ifang 16 8307 Effretikon WinWerk Prozess 6a Rabatt gemäss Vorjahresverbrauch 8307 Effretikon Telefon: 052-740 11 11 Telefax: 052-740 11 71 E-Mail info@kmuratgeber.ch Internet: www.winwerk.ch Inhaltsverzeichnis 1 Ablauf der Rabattverarbeitung...

Mehr

Whitepaper. Produkt: combit Relationship Manager 7. combit Relationship Manager email-rückläufer Script. combit GmbH Untere Laube 30 78462 Konstanz

Whitepaper. Produkt: combit Relationship Manager 7. combit Relationship Manager email-rückläufer Script. combit GmbH Untere Laube 30 78462 Konstanz combit GmbH Untere Laube 30 78462 Konstanz Whitepaper Produkt: combit Relationship Manager 7 combit Relationship Manager email-rückläufer Script Inhalt Einleitung 3 Notwendige Anpassungen 3 crm Solution

Mehr

Beweisbar sichere Verschlüsselung

Beweisbar sichere Verschlüsselung Beweisbar sichere Verschlüsselung ITS-Wahlpflichtvorlesung Dr. Bodo Möller Ruhr-Universität Bochum Horst-Görtz-Institut für IT-Sicherheit Lehrstuhl für Kommunikationssicherheit bmoeller@crypto.rub.de 6

Mehr

Folge 18 - Vererbung

Folge 18 - Vererbung Workshop Folge 18 - Vererbung 18.1 Ein einfacher Fall der Vererbung Schritt 1 - Vorbereitungen Besorgen Sie sich - vielleicht aus einer der Übungen der Folge 17 - ein fertiges und lauffähiges Listenprojekt,

Mehr

Hilfedatei der Oden$-Börse Stand Juni 2014

Hilfedatei der Oden$-Börse Stand Juni 2014 Hilfedatei der Oden$-Börse Stand Juni 2014 Inhalt 1. Einleitung... 2 2. Die Anmeldung... 2 2.1 Die Erstregistrierung... 3 2.2 Die Mitgliedsnummer anfordern... 4 3. Die Funktionen für Nutzer... 5 3.1 Arbeiten

Mehr

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 9 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:

Mehr

Gezielt über Folien hinweg springen

Gezielt über Folien hinweg springen Gezielt über Folien hinweg springen Nehmen wir an, Sie haben eine relativ große Präsentation. Manchmal möchten Sie über Folien hinweg zu anderen Folien springen. Das kann vorkommen, weil Sie den gesamten

Mehr

ONLINE-AKADEMIE. "Diplomierter NLP Anwender für Schule und Unterricht" Ziele

ONLINE-AKADEMIE. Diplomierter NLP Anwender für Schule und Unterricht Ziele ONLINE-AKADEMIE Ziele Wenn man von Menschen hört, die etwas Großartiges in ihrem Leben geleistet haben, erfahren wir oft, dass diese ihr Ziel über Jahre verfolgt haben oder diesen Wunsch schon bereits

Mehr

Moni KielNET-Mailbox

Moni KielNET-Mailbox Bedienungsanleitung Moni -Mailbox Die geht für Sie ran! Wann Sie wollen, wo immer Sie sind! im Festnetz Herzlichen Glückwunsch zu Moni Ihrer persönlichen -Mailbox! Wir haben Ihre persönliche -Mailbox eingerichtet.

Mehr

Alle Schlüssel-Karten (blaue Rückseite) werden den Schlüssel-Farben nach sortiert und in vier getrennte Stapel mit der Bildseite nach oben gelegt.

Alle Schlüssel-Karten (blaue Rückseite) werden den Schlüssel-Farben nach sortiert und in vier getrennte Stapel mit der Bildseite nach oben gelegt. Gentlemen", bitte zur Kasse! Ravensburger Spiele Nr. 01 264 0 Autoren: Wolfgang Kramer und Jürgen P. K. Grunau Grafik: Erhard Dietl Ein Gaunerspiel für 3-6 Gentlemen" ab 10 Jahren Inhalt: 35 Tresor-Karten

Mehr

Übungen zu Softwaretechnik

Übungen zu Softwaretechnik Prof. Dr. Dr. h.c. M. Broy Lösungsblatt 11 Dr. H. Ehler, S. Wagner 23. Januar 2004 Übungen zu Softwaretechnik Aufgabe 16 Qualitätseigenschaften Broker-Pattern Beurteilen Sie das in Aufgabe 15 benutzte

Mehr

Software Engineering Klassendiagramme Assoziationen

Software Engineering Klassendiagramme Assoziationen Software Engineering Klassendiagramme Assoziationen Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Lesen von Multiplizitäten (1) Multiplizitäten werden folgendermaßen

Mehr

MCRServlet Table of contents

MCRServlet Table of contents Table of contents 1 Das Zusammenspiel der Servlets mit dem MCRServlet... 2 1 Das Zusammenspiel der Servlets mit dem MCRServlet Als übergeordnetes Servlet mit einigen grundlegenden Funktionalitäten dient

Mehr

1. Allgemein 2. 2. Speichern und Zwischenspeichern des Designs 2. 3. Auswahl der zu bearbeitenden Seite 2. 4. Text ergänzen 3. 5. Textgrösse ändern 3

1. Allgemein 2. 2. Speichern und Zwischenspeichern des Designs 2. 3. Auswahl der zu bearbeitenden Seite 2. 4. Text ergänzen 3. 5. Textgrösse ändern 3 Inhaltsverzeichnis 1. Allgemein 2 2. Speichern und Zwischenspeichern des Designs 2 3. Auswahl der zu bearbeitenden Seite 2 4. Text ergänzen 3 5. Textgrösse ändern 3 6. Schriftart ändern 3 7. Textfarbe

Mehr

Einleitung. Hauptteil. Wir befinden uns nun im Demoarchiv.

Einleitung. Hauptteil. Wir befinden uns nun im Demoarchiv. Dublettenprüfung Einleitung Herzlich willkommen zum ELOoffice 8 Video-Training Dublettenprüfung. Mein Name ist Andreas Schulz, ich bin bei ELO für das Produktmanagement verantwortlich und werde Sie in

Mehr

Kulturelle Evolution 12

Kulturelle Evolution 12 3.3 Kulturelle Evolution Kulturelle Evolution Kulturelle Evolution 12 Seit die Menschen Erfindungen machen wie z.b. das Rad oder den Pflug, haben sie sich im Körperbau kaum mehr verändert. Dafür war einfach

Mehr

Objektorientierte Programmierung. Kapitel 12: Interfaces

Objektorientierte Programmierung. Kapitel 12: Interfaces 12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/

Mehr

Robot Karol für Delphi

Robot Karol für Delphi Robot Karol für Delphi Reinhard Nitzsche, OSZ Handel I Version 0.1 vom 24. Januar 2003 Zusammenfassung Nach der Einführung in die (variablenfreie) Programmierung mit Robot Karol von Freiberger und Krško

Mehr

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015 Software Engineering Zur Architektur der Applikation Data Repository Franz-Josef Elmer, Universität Basel, HS 2015 Software Engineering: Mit acht bewährten Praktiken zu gutem Code 2 Schichtarchitektur

Mehr

Insiderwissen 2013. Hintergrund

Insiderwissen 2013. Hintergrund Insiderwissen 213 XING EVENTS mit der Eventmanagement-Software für Online Eventregistrierung &Ticketing amiando, hat es sich erneut zur Aufgabe gemacht zu analysieren, wie Eventveranstalter ihre Veranstaltungen

Mehr

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup. 04.06.2005 Conrad Kobsch

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup. 04.06.2005 Conrad Kobsch Ein Blick voraus des Autors von C++: Bjarne Stroustrup 04.06.2005 Conrad Kobsch Inhalt Einleitung Rückblick Nur eine Übergangslösung? Was würde C++ effektiver machen? Quelle 2 Einleitung Wo steht C++,

Mehr

Zahlen auf einen Blick

Zahlen auf einen Blick Zahlen auf einen Blick Nicht ohne Grund heißt es: Ein Bild sagt mehr als 1000 Worte. Die meisten Menschen nehmen Informationen schneller auf und behalten diese eher, wenn sie als Schaubild dargeboten werden.

Mehr

Datei Erweiterungen Anzeigen!

Datei Erweiterungen Anzeigen! Einleitung Beim Kauf eines PCs werden die Dateierweiterungen sowie einige Dateien nicht angezeigt. Grund: Es gibt sehr viele Dateien die für das System ganz wichtig sind. Diese Dateien und auch Ordner

Mehr

Woche 1: Was ist NLP? Die Geschichte des NLP.

Woche 1: Was ist NLP? Die Geschichte des NLP. Woche 1: Was ist NLP? Die Geschichte des NLP. Liebe(r) Kursteilnehmer(in)! Im ersten Theorieteil der heutigen Woche beschäftigen wir uns mit der Entstehungsgeschichte des NLP. Zuerst aber eine Frage: Wissen

Mehr

1. Adressen für den Serienversand (Briefe Katalogdruck Werbung/Anfrage ) auswählen. Die Auswahl kann gespeichert werden.

1. Adressen für den Serienversand (Briefe Katalogdruck Werbung/Anfrage ) auswählen. Die Auswahl kann gespeichert werden. Der Serienversand Was kann man mit der Maske Serienversand machen? 1. Adressen für den Serienversand (Briefe Katalogdruck Werbung/Anfrage ) auswählen. Die Auswahl kann gespeichert werden. 2. Adressen auswählen,

Mehr

S/W mit PhotoLine. Inhaltsverzeichnis. PhotoLine

S/W mit PhotoLine. Inhaltsverzeichnis. PhotoLine PhotoLine S/W mit PhotoLine Erstellt mit Version 16.11 Ich liebe Schwarzweiß-Bilder und schaue mir neidisch die Meisterwerke an, die andere Fotografen zustande bringen. Schon lange versuche ich, auch so

Mehr

Lizenzierung von SharePoint Server 2013

Lizenzierung von SharePoint Server 2013 Lizenzierung von SharePoint Server 2013 Das Lizenzmodell von SharePoint Server 2013 besteht aus zwei Komponenten: Serverlizenzen zur Lizenzierung der Serversoftware und CALs zur Lizenzierung der Zugriffe

Mehr

Die Textvorlagen in Microsoft WORD und LibreOffice Writer

Die Textvorlagen in Microsoft WORD und LibreOffice Writer Die Textvorlagen in Microsoft WORD und LibreOffice Writer Liebe Teilnehmer(-innen) am Landeswettbewerb Deutsche Sprache und Literatur Baden- Württemberg, Diese Anleitung soll Ihnen helfen Ihren Wettbewerbsbeitrag

Mehr

Konzentration auf das. Wesentliche.

Konzentration auf das. Wesentliche. Konzentration auf das Wesentliche. Machen Sie Ihre Kanzleiarbeit effizienter. 2 Sehr geehrte Leserin, sehr geehrter Leser, die Grundlagen Ihres Erfolges als Rechtsanwalt sind Ihre Expertise und Ihre Mandantenorientierung.

Mehr