Dies ist eine statische Kopie unseres alten Forums. Es sind keine Interaktionen möglich.
This is a static copy of our old forum. Interactions are not possible.

Merryluzy

Trainee

  • "Merryluzy" started this thread

Posts: 91

Date of registration: Jul 9th 2006

1

Sunday, July 9th 2006, 3:53pm

Was sind Proxies?

Hallo!

ich weiß gar nicht ob ich im "richtigen" Forum gelandet bin.
Vielleicht kann mir jemand weiterhelfen?

Was sind Proxies? Ich arbeite das Buch "core Java 2" von Horstmann und Cornell durch. Im 6.Kapitel geht es um Schnittstellen und innere Klassen.
Ich verstehe nicht, was ein Proxy macht, was es ist.

Da steht:
"Mit einem Proxy erzeugt man zur Laufzeit neue Klassen, die eine gegebene Menge von Schnittstellen implementiert. Proxies sind nur dann erforderlich, wenn man zur Kompilierzeit noch nicht weiß, welche Schnittstellen man implementieren muss."

Ist es sowas wie ein "Platzhalter"?

Ach noch was: Ich bin kein ganzer Informatiker? Ist nur mein Nebenfach.

Eine Bitte: Könntet ihr, wenn möglich, es gaaanz einfach erklären? Sozusagen Informatik-für-Dummies.

Wäre euch für eine Antwort dankbar.

Gruß. ?(

neweb

Erfahrener Schreiberling

  • "neweb" is male

Posts: 496

Date of registration: Jun 16th 2006

Location: Hannover

2

Sunday, July 9th 2006, 4:35pm

Wie man Proxy-Klassen erstellt und verwendet steht im Prinzip hier:
http://www.mathematik.uni-muenchen.de/~v…flect/Proxy.htm

Ich denke aber nicht, dass man das als nicht Informatiker unbedingt wissen muss, weil Proxy-Klassen eigentlich eher in die etwas weiter fortgeschrittene Programmierung gehören :)...

Das ganze einfacher zu erklären ist nicht so einfach :)

Einfach gesagt sind Proxy-Klassen Klassen, die sich zur Laufzeit um neue Interfaces erweitern lassen. D.h. zur Laufzeit werden neue Funktionen hinzugefügt. (Auf der o.g. Seite ist weiter unten ein Beispiel dafür.)
Das Wesen der Dinge ist es, dass sie plötzlich verschwinden und dann unerwartet an einem ganz anderen Ort wieder auftauchen.

This post has been edited 1 times, last edit by "neweb" (Jul 9th 2006, 4:42pm)


Merryluzy

Trainee

  • "Merryluzy" started this thread

Posts: 91

Date of registration: Jul 9th 2006

3

Sunday, July 9th 2006, 4:43pm

Danke neweb!

Ich werde es mir Zuhause genauer anschauen.

Vielleicht muss ich das Unterkapitel überspringen.

Gruß, Merryluzy.

neweb

Erfahrener Schreiberling

  • "neweb" is male

Posts: 496

Date of registration: Jun 16th 2006

Location: Hannover

4

Sunday, July 9th 2006, 4:52pm

Ich glaube, dass das Java-Buch mit dem du arbeitest nicht nur Grundlagen behandelt und du noch häufiger Probleme haben wirst, das geschriebene zu verstehen. Falls du Programmieranfänger bist, solltest du vielleicht erst einmal mit einem anderen Buch arbeiten, welches auch wirklich auf Programmieranfänger abzielt.
Das Wesen der Dinge ist es, dass sie plötzlich verschwinden und dann unerwartet an einem ganz anderen Ort wieder auftauchen.


Merryluzy

Trainee

  • "Merryluzy" started this thread

Posts: 91

Date of registration: Jul 9th 2006

5

Sunday, July 9th 2006, 5:00pm

Hallo

Es steht "Band 1-Grundlagen" auf dem Einband drauf.

Und: "Einführung in die objektorientierte Programmierung."

Hast Du einen anderen Vorschlag? Handbuch vom RRZN?

Gruß, Merryluzy.

This post has been edited 1 times, last edit by "Merryluzy" (Jul 9th 2006, 5:20pm)


Sinan

Senior Schreiberling

  • "Sinan" is male

Posts: 1,021

Date of registration: Jul 5th 2003

Location: Malaga

Occupation: Senior Cloud Solution Engineer bei Oracle

6

Sunday, July 9th 2006, 5:12pm

Quoted

Original von Merryluzy
Hast Du einen anderen Vorschlag? Handbuch vom RRZN?

Handbücher von RRZN sind generell gut. Besster finde ich aber auf jeden Fall Java ist auch eine Insel
einfach und verständlich geschrieben
und
Go to Java 2
With great power comes great responsibility

neweb

Erfahrener Schreiberling

  • "neweb" is male

Posts: 496

Date of registration: Jun 16th 2006

Location: Hannover

7

Sunday, July 9th 2006, 5:15pm

Quoted

Original von Merryluzy
Hallo

Es steht "Band 1-Grundlagen" auf dem Einband drauf.

Und: "Einführung in die objektorientierte Programmierung."

Hast Du einen anderen Vorschlag? Handbuch vom RRZN?

Gruß, Tugba.


Grundlagen mag sein. Wichtiger ist, an wen sich das Buch richtet. Außerdem kann man Grundlagen auf jeden Band eins schreiben :).

Das RRZN-Handbuch mag gut sein (habe ich auch hier liegen) hat aber einige Fehler. Im Prinzip würde ich es aber schon empfehlen.
Ansonsten bekommst du über die Bibl bestimmt Mössenböck - Sprechen Sie Java?.
Ansonsten gibt es Java-Buch und Java ist auch eine Insel als Onlinebücher.

Ansonsten habe ich von einigen Seiten her immer wieder gehört, dass das Skript vom GDV zur Java-Vorlesung ganz gut sein soll (Das vom SIM ist ja bekannter maßen nicht so toll).

Ansonsten wüsste ich grad aus dem Kopf keine weiteren Bücher, die sich lohnen würden.
Das Wesen der Dinge ist es, dass sie plötzlich verschwinden und dann unerwartet an einem ganz anderen Ort wieder auftauchen.


Merryluzy

Trainee

  • "Merryluzy" started this thread

Posts: 91

Date of registration: Jul 9th 2006

8

Sunday, July 9th 2006, 5:19pm

Hallo

Danke an euch beide!

Ich werde bestimmt da weiterschauen.
Aber ich bin schon ein Drittel des Buches durch, da will ich kein neues anfangen.

Gruß, Merryluzy.

neweb

Erfahrener Schreiberling

  • "neweb" is male

Posts: 496

Date of registration: Jun 16th 2006

Location: Hannover

9

Monday, July 10th 2006, 2:16pm

Also falls es jemanden noch interessiert. Hier ist ein Beispiel für eine einfache Anwendung von Proxies:

Quoted

App.java
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;


public class App {
public static void main(String args[]) {
InvocationHandler handler = new TestProxie();

ClassLoader sysClassLoader = ClassLoader.getSystemClassLoader();

Class[] proxyInterfaces =

Proxy proxy = (Proxy)Proxy.newProxyInstance(sysClassLoader, proxyInterfaces,
handler);

((IPerson)proxy).setName("Bob");
System.out.println("Name: "+((IPerson)proxy).getName());

System.out.println("IPerson: "+(proxy instanceof IPerson));
System.out.println("IEmail: "+(proxy instanceof IEmail));
System.out.println("IFon: "+(proxy instanceof IFon));
System.out.println("IJabber: "+(proxy instanceof IJabber));
}

}


Quoted

TestProxy.java
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;


public class TestProxie implements InvocationHandler {
Map valueMap;

public TestProxie() {
valueMap=new HashMap();
}

public Object invoke(Object proxy, Method m, Object[] args)
throws Throwable {
String mName=m.getName();

if(mName.startsWith("set")) {
valueMap.put(mName.substring(mName.indexOf("set")+3), args[0]);
return args[0];

} else if (mName.startsWith("get")) {
return valueMap.get(mName.substring(mName.indexOf("get")+3));
}

return null;
}

}


Quoted

IPerson.java
public interface IPerson {
public String getName();
public void setName(String name);
}


Dazu braucht man noch die Interfaces IEmail.java, IFon.java und IJabber.java, in die man weitere Getter und Setter-Funktionen einbauen kann. Das Programm (App.java) erzeugt eine neue Instanz eines Proxies. Ein Proxie benötigt immer eine Instanz des ClassLoaders, eine Instanz eines Handlers (muss die invocation-Funktion enthalten, ist implements InvokationHandler) und ein Array mit den Interfaces, die genutzt werden sollen. In dem Array können beliebige Interfaces angegeben werden. Im Beispiel wird ein Objekt mit den Interfaces IPerson, IEmail und IFon angelegt. Im nächsten Schritt wird ein Name (Funktion wird über IPerson bereitgestellt) in den Proxy gespeichert. Danach wird einzeln überprüft, ob ein Interface implementiert wurde.

Bei Proxies wird immer die Funktion invoke aufgerufen, wenn eine Funktion aufgerufen wird. Dabei wird an Invoke die Funktion sowie die Argumente übergeben. Über den Namen der Funktion kann man dann bestimmte Funktionen ausführen (m.getName). In diesem Beispiel können werte per get und set gesetzt werden. Die verfügbaren Funktionen werden dabei über die Interfaces festgelegt.
Das Wesen der Dinge ist es, dass sie plötzlich verschwinden und dann unerwartet an einem ganz anderen Ort wieder auftauchen.


Merryluzy

Trainee

  • "Merryluzy" started this thread

Posts: 91

Date of registration: Jul 9th 2006

10

Monday, July 10th 2006, 5:23pm

Hallo neweb!

Danke für Deine Mühe!

Gruß.

neweb

Erfahrener Schreiberling

  • "neweb" is male

Posts: 496

Date of registration: Jun 16th 2006

Location: Hannover

11

Monday, July 10th 2006, 5:32pm

Quoted

Original von Merryluzy
Hallo neweb!

Danke für Deine Mühe!

Gruß.

NP :)

Ich wollte es doch nur selber verstehen ^^

Praktische Sache diese Proxies... sollte man aber besser umgehen sollte man...
Das Wesen der Dinge ist es, dass sie plötzlich verschwinden und dann unerwartet an einem ganz anderen Ort wieder auftauchen.