# Methoden-Pointer?



## napwatcher (10. Jun 2008)

Hallo zusammen,

ich portiere gerade eine Anwendung von Delphi nach Java und habe folgendes Design-Problem:

Meine Klasse in Delphi sieht gekürzt so aus: Wichtig darin ist das Proc-array - ein Zeiger auf Objektprozeduren von TParser ( wie z.B. zahl, buchstabe oder andere )


```
type
  TParser = class(TObject)
  public
   [b] Proc : array of procedure of objects;[/b]
    Zahlen : array[0..100] of extended;
   procedure zahl;
   procedure buchstabe;
   procedure metacode;
   procedure start;
  end;
```

In der Prozedur TParser.metacode fülle ich das Proc-array folgendermaßen mit Pointern auf die Prozeduren zahl/buchstabe und weitere von TParser.

z.B.: Proc[p] := zahl;


procedure "start" ruft dann die Proc_-Prozeduren nacheinander auf.... .
...
...
nun möchte ich diese gleiche Funktionalität - also Aufrufe von Methoden über einen "Methoden-pointer" in Java implementieren, was mich aufgrund des Pointerverbots vor ein großes Problem stellt. (vielleicht geht es auch gar nicht). 

Wenn jemand eine alternative Idee hätte, um diese Funktionalität zu erhalten, wäre ich sehr froh!

napwatcher_


----------



## SlaterB (10. Jun 2008)

schau mal hier rein:
http://www.java-forum.org/de/viewtopic.php?t=68319


----------



## ARadauer (10. Jun 2008)

gibt keine Funktionspainter in java, stimmt.

Du kannst dir ja mal das Command Pattern ansehen, es dient dazu, um verhalten in einer Klasse zu kapseln.

du hast ein Interface, dass deine Methode beinhaltet. Du erstellt ein paar Klassen die diene Prozduren darstellen, die alle dieses Interface implementieren.

Instanzen dieser Klassen kannst du dann in ein Array packen, drüber itterieren und die methoden aufrufen.


----------



## ARadauer (10. Jun 2008)

jetzt wo ich das beschrieben habe, bin ich mir nicht mehr sicher ob das nicht doch ein strategy pattern ist.

wo war da nochmal genau der unterschied?? strategy vs command pattern?


----------



## AlArenal (10. Jun 2008)

napwatcher hat gesagt.:
			
		

> ... was mich aufgrund des Pointerverbots vor ein großes Problem stellt.



Es gibt kein Pointerverbot in Java. Es gibt nur einfach keine Pointer  (jedenfalls nicht im klassischen Sinne als direkt manipulierbare Adresszeiger)


----------



## maki (10. Jun 2008)

ARadauer hat gesagt.:
			
		

> jetzt wo ich das beschrieben habe, bin ich mir nicht mehr sicher ob das nicht doch ein strategy pattern ist.
> 
> wo war da nochmal genau der unterschied?? strategy vs command pattern?


Command pattern verstehe ich so, dass eine Aktion in eine Klasse gekapselt wird, Strategy kapeselt imho einen Algorythmus und State einen Zustand.

Diese Mustern sind alle sehr ähnlich, kommt auf den Anwendungsfall an, im Endeffekt sind alle nur Polymorphie


----------



## napwatcher (10. Jun 2008)

Habe mich durch die Reflection-Klassen gelesen und bin ganz erstaunt, was da alles jetzt so möglich ist. 
Und auch mein Problem kann man relativ einfach umsetzen.

Folgender Link enthält auch das untere Lösungsbeispiel und erklärt sehr schön die Zusammenhänge

Hier ein sehr schönes Beispiel





```
package test2;

interface DynamBase
{
  void meth();
}

class DynamBaseMethod implements DynamBase
{
  public void meth()
  {
    System.out.println( "Bewusste Raucher trinken Filterkaffee" );
  }
}

class DynamAbstract
{
  public static void main( String args[] ) throws Exception
  {
    Class clazz = Class.forName( "test2.DynamBaseMethod" );

    DynamBase o = (DynamBase) clazz.newInstance();

    o.meth();
  }
}
```


Vielen Dank für Eure Hinweise - hätte sonst ewig gesucht!


----------

