Komponenten kommunikation

PollerJava

Top Contributor
Hallo,

ich hätte eine Frage zu den Komponenten,
wenn ich 2 Komponenten habe, dann kann ich die Kommunikation dieser 2 Komponenten über den Lollipop einzeichnen.
Wenn jetzt in der Komponente 1 Methoden in der Komponente 2 aufgerufen werden und umgekehrt, dann heißt das ja, dass ich das zeichnen muss, oder


Code:
   K1   -------| ----------  K2
         -------- |---------

also K1 ruft Methoden auf K2 auf und umgekehrt (der senkrechte Strich sollte ein Kreis sein welcher Methoden anbietet)
Weiß da jemand bescheid wie man das macht?
Vielen Dank,
lg
 
"und umgekehrt" deutet auf extrem schlechtes Design hin - um das aufzulösen gibt es verschiedene Pattern.

Keine Ahnung wie man dem sagt, aber unten habe ich dir eines aufgezeigt.

Lolipop???:L Das erinnert mich an Kojak bzw. Telly Savallas und Glatze, aber was hat das mit Software zu tun?
Meine Noch leicht getrübte Glaskugel lässtm ih vermuten, dass du die UML has bzw. using Assoziation meinst - das sind aber zwei ganz unterschiedlich Sachen.

Das unten sind lauter has-Assoziationen, weil die Klassendie Objekte der jeweils anderen Klasse exklusiv (private und ohne getter) für sich alleine haben.

Dann noch ein Hinweis - wenn du CODE-Tags verwendest, wird deine ASCII-Grafik viel schöner dargestellt.


Also so nicht!
Java:
public class A {
	private B aB = new B();

	public void f1() {aB.f2();}
	public void f2() {f3(); }
	public void f3() {} // die wird von A und B verwendet
}

Java:
public class B {
	private A anA = new A();

	public void f1() {anA.f3();}
	public void f2() {}
}


So gehts:
Java:
public class A {
	private B aB = new B();
	private C aC = new C();

	public void f1() {aB.f2();}
	public void f2() {aC.f3();}
}
Java:
public class B {
	private C aC = new C();

	public void f1() {aC.f3();}
	public void f2() {}
}
Java:
package com.javaforum.dependency;

public class C {
	public void f3() {}
}
 
Besten Dank für die Info, das ist nicht ganz das, was ich gemeint habe.
Wenn ich folgendes habe:

pollerjava-albums-komponenten-picture206-diagram1.png


Dann ist es ja so, dass laut Wikipedia der Kreis eine Schnittstelle anbietet und der Halbkreis benötigt die Schnittstelle: Also Komponente 2 benötigt Komponente 1 wenn ich das richtig versteh.

Mir geht es jetzt darum, ich möchte die Kommunikation zwischen diesen 2 Komponenten darstellen, also so in der Art:

(auf Komponentenebene - nicht auf Klassenebene - Klassenebene ist schon zu feingranular)
Komponente 1 ruft eine Methode method1() von Komponente 2 auf, nach dem Aufruf der Methode method1() wird von der Komponente 2 aus die Methode method1() der Komponente 1 aufgerufen usw.
Also das ist ja ein Wechselspiel von aufrufen, da kann ich ja nicht sagen, dass Komponente 2 die Schnittstelle von Komponente 1 benötigt?
Oder wie würdet Ihr das UML- Standard gemäß darstellen?
Vielen Dank,
lg
 
Hört sich für mich nach einem Service und Endlosschleife gleichzeitig an. Mit OSGi kannst du z.B. Services bereitstellen. Das andere "Modul" oder wie es in OSGi genannt wird: Bundle muss nur die Schnittstelle kennen.

Beschreibe vllt mal ein konkretes Beispiel. Denn das was du beschreibst, ergibt für mich nur teilweise einen Sinn.
 
Ich möchte ein konkretes FW jezt mal außen vor lassen, das Diagramm sollte Sprach und FW unabhängig sein.
Also, ein konkretes Beispiel wäre:

Es gibt eine Komponente "Zentrale" und eine Komponente "Spieler" - diese Kommunizieren über Remote Procedure call bzw. RMI:

Code:
1. Die Zentrale wird gestartet
2. nach dem Starten der Zentrale kann sich ein Spieler anmelden, d.h. der Spieler ruft über RPC eine    Methode der Zentrale auf.
3. die Zentrale sendet dem Spieler den aktuellen Spielstand, d.h. die Zentrale ruft über RPC eine Methode am Spieler auf.
4. Spieler möchte Würfeln, d.h. der Spieler ruft übe RPC eine Methode auf der Zentrale auf 

usw.

Das sind ja wechselseitige Methodenaufrufe vom Spieler zur Zentrale und auch von der Zentrale zum Spieler.
Meine Frage wäre jetzt eben, wie man sowas darstellt mittels UML- Komponentendiagramm.
Da kann ich ja nicht sagen, Zentrale bietet ein Interface an und Spieler implementiert das Interface, da ja auch Spieler ein Interface anbietet und Zentrale dieses implementiert - oder sehe ich da was falsch?
lg
 
Ich glaube, Du schmeißt da jetzt Komponentendiagramme mit Interaktionsdiagrammen zusammen. Komponentendiagramme sind eine etwas gröbere Sicht auf das System. In Deinem Beispiel mit Zentrale und Spieler: Komponente Server bietet an RPC: Komponente Client nutzt RPC. Für die Darstellung der einzelnen Methodenaufrufe kommen eher andere Diagrammtypen (z.B. Kommunikationsdiagramm oder Sequenzdiagramm) in Fage.
 
Auch auf Komponentenebene soll nicht gegenseitig zugegriffen werden. Auch hier greifen Pattern wie Dependency inversion oder ähnliche.
 

Zurück
Oben