# Methoden in verschiedenen Klassen aufrufen



## MQue (22. Mai 2007)

Hallo,


ich habe ein Problem mit den Methodenaufrufen in verschiedenen Klassen und zwar habe ich 3 Klassen für die serielle schnittstelle (ich hab auch so viel Ports). je nach x soll die Methode "writeToRemote" in der Klasse SerielleSchnittstelle1, SerielleSchnittstelle2 oder SerielleSchnittstelle3 aufgerufen werden. Gibts da noch eine andere (kürzere) Möglichkeit als die unten?
z.B.: SerielleSchnittstelle + x.writeToRemote(..) oder sowas ähnliches

Vorallem ist mein Problem, dass eine Klasse für eine serielle Schnittstelle hinzugefügt oder weggenommen werden kann und ich dann nicht in diesem Programmteil herumkopieren bzw. herumprogrammieren will, das ganze soll also dynamisch sein.

Herzliche Dank für die Antworten.

lg 
Michl



```
private int x = 0;

x ändert sich hier.


if ((x == 1)
            SerielleSchnittstelle1.writeToRemote(anfrage);  //writeToRemote ist eine statische Methode
else if ((x == 2)
            SerielleSchnittstelle2.writeToRemote(anfrage);
else if ((x == 3)
            SerielleSchnittstelle3.writeToRemote(anfrage);
```


----------



## kama (22. Mai 2007)

Hallo,

schon mal über ein Array der Schnittstellen nachgedacht?

MfG
Karl Heinz Marbaise


----------



## MQue (22. Mai 2007)

und wie mach ich das?


----------



## kama (22. Mai 2007)

Hallo,



			
				Michael1234 hat gesagt.:
			
		

> und wie mach ich das?



Schau Dir das mal an.

MfG
Karl Heinz Marbaise


----------



## MQue (22. Mai 2007)

ja das ist mir bekannt, dass ich Objete in eine Array geben kann bzw. eine Referenz.
Mein Problem ist aber, dass ich eine KlassenMethode aufrufe und daher Klassen in ein Array geben müsste, da liegt mein Problem.

ist das irgendwie möglich?

vielen Dank


----------



## EOB (22. Mai 2007)

wo ist denn der unterschied, ob du ein objekt oder eine klasse reinpackst?

grüße


----------



## FelixB (22. Mai 2007)

lies dir mal Java Grundlagen duch...

ein Objekt ist eine Instanz einer Klasse.


----------



## EOB (22. Mai 2007)

meinst du mich? mir war das klar...ich wollte es vom poster hören . am besten, du machst dir noch ein interface drüber, dann kannst du sogar verschiedenen klassen reinpacken! :meld: 

grüße


----------



## MQue (22. Mai 2007)

das man aus Klassen Objekte instanziert ist mir bekannt ja aber das ich Klassen in ein Array packen kann nicht.
Vor allem welchen typ hat das array wenn ich die Klassen:

SerielleSchnittstelle1
SerielleSchnittstelle2
SerielleSchnittstelle3
SerielleSchnittstelle4
 in das array geben möchte?

lg


----------



## EOB (22. Mai 2007)

also du verstehst da was nicht...was ist für dich eine klasse und was ein objekt einer klasse? was willst du sonst in ein array oder jede andere Datenstruktur packen?

beispiel:


```
Klasse klasse = new Klasse();

Klasse[] klassenArray = new Klasse[10];

klassenArray[0] = klasse;
```

was geht daran nicht?



> Vor allem welchen typ hat das array wenn ich die Klassen:



tja, dann musst du drüber noch ein interface bauen, welche deine schnittstellen implementieren. also sowas:


```
interface ISchnittstelle{
    writeToRemote(String anfrage);

}

//und dann

class Schnittstelle1 implements ISchnittstelle{
    //implementierung
}
```

du kannst mir folgen?

grüße


----------



## MQue (22. Mai 2007)

nicht wirklich, du erzeugst ja wieder ein Objekt einer Klasse und gibst es dann in ein Array, das ist mir schon klar aber das brauch ich nicht.
Ich möchte, wenn x = 1 ist, die statisch Methode von SerielleSchnittstelle1 aufrufen, wenn x = 2 dann SerielleSchnittstelle2 usw.


----------



## FelixB (22. Mai 2007)

EOB hat gesagt.:
			
		

> meinst du mich?



nein, natürlich nicht 

wir haben nur dummerweise zeitgleich gepostet und ich war langsamer...


----------



## SlaterB (22. Mai 2007)

statische Operation sind eben tödlich bei dynamischer Programmierung mit Arrays oder auch Vererbung,
da kann man nix machen,
jedenfalls nix sinnvolles,

könntest natürlich die class-Objekte in ein Array speichern und dann über Reflection die Operation aufrufen, 
aber lass sowas lieber sein, mein Tipp


----------



## Yzebär (22. Mai 2007)

Mich würde mal interessieren, worin sich die Schnittstellen1...3 bzw. ihre writeToRemote-Methoden unterscheiden und warum du keine Schnittstellenobjekte verwendest (die von einer abstrakten Klasse abgeleitet sind oder ein Interface implementieren).


----------



## EOB (22. Mai 2007)

genau, beschreib doch mal, was du machen willst...da gibts sicher ne einfacherer lösung für...

grüße


----------



## MQue (22. Mai 2007)

die klassen SerielleSchnittstelle1, 2,3 unterscheiden sich nur dadurch, das die Klasse SerielleSchnittstelle1 auf COM1, die SerielleSchnittstelle2 auf COM2 uws schreibt.


----------



## SlaterB (22. Mai 2007)

benutzte ein Interface und nicht-statische Operationen (und seien es einzelne Singleton-Objekte),
schon gehts,

das ist Standard, da gibts keinen Grund dagegen,
da braucht man hier gar nicht krampfhaft nach Alternativen suchen


----------



## MQue (22. Mai 2007)

Mein Problem ist ja, dass der Auftraggeber reiner C- Programmierer ist und mich da in teufels Küche geritten hat, da er es genauso haben will, sonst kennt sich ja keiner aus dort.
So ist das in der Praxis.


----------



## Yzebär (22. Mai 2007)

Wenn sich nur Parameter (wie der Port, die Baudrate etc.) unterscheiden, brauchst du keine 3 Klassen dafür. Du definierst eine Klasse SerielleSchnittstelle und an den Stellen, wo sie verwendet wird erzeugst du ein Objekt der Klasse und setzt die Parameter (im Konstruktor oder mit set-Methoden). Die Parameter könnten sogar zur Laufzeit aus einer Konfigurationsdatei eingelesen werden.

Wenn du statische Methoden verwenden mußt, weil dein Auftraggeber keine Ahnung hat, kannst du immer noch intern Schnittstellenobjekte verwenden. Dann mußt du die Parameter auch über statische Methoden übergeben bzw. die Schnittstellenobjekte erzeugen.


----------



## SlaterB (22. Mai 2007)

unter diesen Voraussetzungen solltest du dich dann aber an einer kleinen if-else-Konstruktion nicht stören 

Reflection oder andere schräge Lösungen fallen dann auch weg,
dann bist du chancenlos


----------



## MQue (22. Mai 2007)

Danke für die Tipps!!!


----------



## EOB (22. Mai 2007)

und so viele COMs wirds ja nicht geben, oder doch? ich würde es auch so machen. ne kleine if abfrage und dann im entsprechenden fall die params mit übergeben. 

grüße


----------

