Kommunikation zwischen Klassen

Status
Nicht offen für weitere Antworten.

monade

Mitglied
Hi,
mal eine prinzipielle Frage:
Angenommen ich hab 3 Klassen A,B,C und mein Code sieht etwas so aus:
Code:
public class A extends JPanel{
	
	private B classB = new B();
	private C classC = new C(); // B, C extends JComponent/JWhatever..

	public A(){
		this.add(classB);
		this.add(classC)
	}
	
}
Jetzt will ich, dass die Klassen/Komponenten classB und classC kommunizieren können, also dass sich C updated, wenn sich in B was ändert, und umgekehrt. In meinen JAVA-Anfängen hab ich das jetzt so gemacht, dass ich für B und C ein gemeinsames Model definiert und zusätzlich B und C als Listener für das Model registriert habe. Hat soweit auch funktioniert, aber irgendwie stößt das langsam an Grenzen. In meinem jetztigen Projekt hab ich zig Klassen, die alle untereinander kommunizieren müssen. Ein gemeinsames Model für alle Klassen zu definieren ist irgendwie idiotisch, weil Klasse B mit Klasse C andere Informationen austauschen muss, wie Klasse C mit Klasse D. Außerdem widerspricht es meine ich dem Grundgedanken des Models.
Ich bin sicher, dass es für sowas Grundlegendes schon Lösungen geben muss, könnt ihr mir da auf die Sprünge helfen?

Vielen Dank,
monade
 

sliwalker

Top Contributor
Hi,

man hört das Dir klar ist, dass man das nicht in einem Satz erklären kann. Aber damit Du die Richtung weist, folgendes:

1. Du kannst Interfaces verwenden, damit Du sichergehen kannst, dass eine bestimmte Methode in einer fremden Klasse vorhanden ist. So könntest Du in A etwas ändern und weißt, dass Du in B die Methode updateB() aufrufen kannst, der Du dann das geänderte A mitgeben kannst.
(Ist viel Schreibarbeit, aber eine durchaus gute Lösung...gerade bei vielen Klassen.)

2. Du kannst ein Entwurfsmuster umsetzen...und zwar das ObserverPattern(gibts auch ein FAQ-Eintrag) in diesem Forum.
Dort registrierst Du Klassen bei einem Observer, die immer nach einer Änderung an einem Model benachrichtigt werden...sprich es wird bei einer Änderung eine bestimme Methode aufgerufen, die das geänderte Objekt(Model) mitbekommt.


Beides Ansätze, die bei Dir klappen müssten.

greetz
SLi
 
S

SlaterB

Gast
also ein gemeinsames Model ist ja schon bisschen was anderes als sich 'nur' in bestimmten Situationen gegenseitig zu informieren,

wenn du die gemeinsmen Models brauchst, dann musst du sie notfalls in einer hohen Zahl einfügen für jedes Paar von Klassen,
diese enthalten dann ja auch echte, insbesondere unterschiedliche Informationen,
die kann man nicht generalisieren

wenns nur um Informierung geht, dann reichen doch allseits beliebte Listener/ Observer usw.,
zunächst mal muss jede Klasse ein Observer sein, wenn man es ganz allgemein baut, kann als Ereignis fast nur ein Objekt gegeben werden,
bestenfalls ein gemeinsames Interface aller fraglichen Klassen,

ob B nun von C oder D informiert wurde kann man dabei nicht erkennen, müsste erst manuell unterschieden werden,

alles höher typisierte erfordert wieder mehr unterschiedliche Listener

auf jeden Fall kann man bei sowas einfache Hilsoperationen wie
registriereGegenseitig(objectB, objectC); aufrufen, oder
registriereAlleUntereinander(objectB, objectC, objectD);
---------

was mir spontan noch einfällt: anonyme kleine Listener, die die schwachte Typisierung etwas aufheben,

Code:
registriereGegenseitig(
  objectB, 
  new ListenerXY() {
    public void event(Object x) {
      objectB.eventTypC((C) x);
    }
  },
  objectC,
  new ListenerXY() {
    public void event(Object x) {
      objectC.eventTypB((B) x);
    }
  },
);
hier wird bei objectC der erste Listener registriert, der dann bei objectB die Operation eventTypC() aufruft,
bei objectB genau andersrum
 

monade

Mitglied
SlaterB hat gesagt.:
wenn du die gemeinsmen Models brauchst...
SlaterB hat gesagt.:
wenns nur um Informierung geht...

Im Grunde brauche ich beides. Für das gegenseitige Informieren über Änderungen ist das ObserverPattern-Konzept ziemlich interessant, danke für den Tip!
Es ist aber tatsächlich so, dass die meisten Klassen auch gemeinsame Models benötigen. Im Moment hab ich ein riesengroßes Model, und viele Klassen nutzen (sich überschneidende) Teile dieses Models. Angenommen in meinem Model sind die Variablen v,w,x,y,z definiert, dann benötigt etwa Klasse B das Wissen um v,w,x,y und Klasse C x,y,z, usw.
Wie auch immer ich es löse ists ungeschickt. Definiere ich für B und C ein eigenes Model, hab ich die doppelte Information x,y,z (und noch dazu das Problem der "Synchronisation", wenn sich x,y,z ändern), bleibe ich beim gemeinsamen großen Model, so ist ist etwa für C die Information v,w eigentlich redundant. Definiere ich wiederum für B ein Model mit v,w, für C ein Model mit z und ein gemeinsames Model x,y, hab ich spätestens bei der Klasse D, die v und z benötigt, ein Problem. Dann brauch ich nämlich gemeinsame Models D-B, D-C, usw. usw. und im Endeffekt lande ich hier:
SlaterB hat gesagt.:
wenn du die gemeinsmen Models brauchst, dann musst du sie notfalls in einer hohen Zahl einfügen für jedes Paar von Klassen
was auch sehr unschön ist. Gibt es da keinen Ausweg?

Und noch eine Frage: im MVC-Konzept gibt es für einen View in den Tutorials immer die Getter und Setter setModel()/getModel(). Was aber ist dann die "Code-Konvention", wenn ich wie in meinem Fall mehrere Models für meinen View brauche. Definiere ich dann im View einfach setModel1()/setModel2()... ? Oder gibts ne andere Konvention (zB die Models zusammenfassen zu einem SuperModel)?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 3
F Klassen Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 4
G Kommunikation zwischen zwei Klassen Java Basics - Anfänger-Themen 5
V Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 2
L Kommunikation zwischen mehreren Klassen Java Basics - Anfänger-Themen 2
G Nochmal Problem mit Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 3
G Kommunikation zwischen Klassen, aber bitte MVC Java Basics - Anfänger-Themen 12
A Kommunikation zwischen nebenläufigen Threads Java Basics - Anfänger-Themen 4
P Kommunikation zwischen zwei *.class Java Basics - Anfänger-Themen 3
T Kommunikation zwischen Controller und GUI Java Basics - Anfänger-Themen 2
S Frage zur Kommunikation zwischen Objekten Java Basics - Anfänger-Themen 5
J Kommunikation zwischen zwei JAVA-Dateien Java Basics - Anfänger-Themen 8
S Kommunikation zwischen Komponenten in einem JFrame Java Basics - Anfänger-Themen 10
B Kommunikation zwischen Klasse und Listener Java Basics - Anfänger-Themen 2
D Kommunikation zwischen zwei Java Anwendungen möglich? Java Basics - Anfänger-Themen 6
G Kommunikation zwischen Applet und Java-Anwendung über TCP/IP Java Basics - Anfänger-Themen 3
M Kommunikation zwischen GUI und Event -Klasse Java Basics - Anfänger-Themen 3
Q Kommunikation zwischen Frames Java Basics - Anfänger-Themen 3
B Kommunikation mit Seriellen Schnittstellen + Integration einer lib Java Basics - Anfänger-Themen 1
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
I Kommunikation "normaler PC" mit lokaler Software an "Cloud Service" und umgekehrt Java Basics - Anfänger-Themen 15
izoards Socket Kommunikation Java Basics - Anfänger-Themen 16
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
A Client-Server Kommunikation Java Basics - Anfänger-Themen 3
S JavaFX-Arduino Kommunikation mit LCD-Anzeige Java Basics - Anfänger-Themen 0
M Input/Output Kommunikation mit externen Geräten Java Basics - Anfänger-Themen 0
M OOP Kommunikation MVC und DTO Java Basics - Anfänger-Themen 13
K Kommunikation von Java RMI und Webservices Java Basics - Anfänger-Themen 9
H Einfache Client/Server-Kommunikation Java Basics - Anfänger-Themen 16
E MVC: Kommunikation der Modellteile Java Basics - Anfänger-Themen 12
G Klassen Kommunikation zw. Klassen Java Basics - Anfänger-Themen 28
B Socket Kommunikation in beide Richtungen Java Basics - Anfänger-Themen 12
F Socket Kommunikation Java Basics - Anfänger-Themen 4
G Server-Client Kommunikation Java Basics - Anfänger-Themen 3
J Panel-übergreifende Kommunikation Java Basics - Anfänger-Themen 3
J RxTx/RS232 Kommunikation (TwoWay) Java Basics - Anfänger-Themen 10
Z Tomcat Server Kommunikation zu Client Applet Java Basics - Anfänger-Themen 5
G Datenstruktur und die Kommunikation mit der GUI Java Basics - Anfänger-Themen 10
W Inter-Thread-Kommunikation Java Basics - Anfänger-Themen 3
T Kommunikation zw. 2 Javaprogrammen Aufr --> Verab. -> Java Basics - Anfänger-Themen 6
P Kommunikation mit Prozess Java Basics - Anfänger-Themen 3
H Kommunikation C++ <> Java Java Basics - Anfänger-Themen 4
A Kommunikation Java-Anwendung <-> Java-Applet Java Basics - Anfänger-Themen 24
D Thread und Process Kommunikation bei eigener Console Java Basics - Anfänger-Themen 2
P asynchrone Kommunikation Applet Servlet mit RMI möglich Java Basics - Anfänger-Themen 4
F Kommunikation von 2 Klasse Java Basics - Anfänger-Themen 5
B jtapi <-> tapi Kommunikation Java Basics - Anfänger-Themen 2
S Kommunikation zwsichen Klassen. Java Basics - Anfänger-Themen 9
D J/Direct oder JNI? .bzw. Kommunikation mit Windows-API. Java Basics - Anfänger-Themen 2
M probleme in der kommunikation von klassen Java Basics - Anfänger-Themen 5
A Kleines GIT-Verständnisproblem zwischen zwei Rechnern Java Basics - Anfänger-Themen 6
Distanz zwischen zwei Zeichenfolgen in einem String bestimmen Java Basics - Anfänger-Themen 5
S Unterschied zwischen Denkweisen Java Basics - Anfänger-Themen 13
O Klassen Zusammenspiel zwischen 2 Klassen Java Basics - Anfänger-Themen 1
Ras Unterschied zwischen parser xml and api xml Java Basics - Anfänger-Themen 7
X Was ist der Unterschied zwischen materialisierten und nichtmaterialisierten Attributen einer Klasse? Java Basics - Anfänger-Themen 1
F Abstand zwischen zwei Objekten berechnen wie? Java Basics - Anfänger-Themen 1
S Längster Pfad zwischen zwei Vertices in einem Graph Java Basics - Anfänger-Themen 3
U Erste Schritte nextGaussian zwischen zwei Werten Java Basics - Anfänger-Themen 19
jhCDtGVjcZGcfzug Was ist der Unterschied zwischen diesen Quellcodes? Java Basics - Anfänger-Themen 3
rafi072001 Assoziation zwischen Musiker und Label Java Basics - Anfänger-Themen 1
I Best Practice Saubere Verbindung zwischen API und Business Layer mit DTO's Java Basics - Anfänger-Themen 2
A Parametar übergabe zwischen Methoden Java Basics - Anfänger-Themen 26
W User zwischen Optionen wählen lassen Java Basics - Anfänger-Themen 1
I Differenz zwischen LocalDateTime Java Basics - Anfänger-Themen 4
Leo_1789 Differenz ausrechnen zwischen denn idealgewicht und denn echten Gewicht Java Basics - Anfänger-Themen 7
E Wie gebe ich alle Daten zwischen zwei Zeitpunkten aus? Java Basics - Anfänger-Themen 2
P Methode die ausgibt wie viele Primzahlen es zwischen 2 und n gibt Java Basics - Anfänger-Themen 10
marcooooo Separator zwischen allen Zeichen eines Strings einfügen Java Basics - Anfänger-Themen 29
NeoLexx Zuweisungskompatibilität zwischen Vererbungsbeziehungen (Polymorphie) Java Basics - Anfänger-Themen 18
L Threads Synchronisierung zwischen threads Java Basics - Anfänger-Themen 4
N Berührung zwischen Rechtecken Java Basics - Anfänger-Themen 5
Y Unterschied zwischen WindowBuilder und herkömmlichen erstellen des GUI´s? Java Basics - Anfänger-Themen 9
J Wert zwischen JFrames übergeben Java Basics - Anfänger-Themen 2
U Worin besteht der Unterschied zwischen call by reference und call by value? Java Basics - Anfänger-Themen 14
E Unterschied zwischen new und import Java Basics - Anfänger-Themen 5
J Punkt auf,über,unter oder zwischen 2 Geraden Java Basics - Anfänger-Themen 14
B Unterschied zwischen (List<T> a) und (T[] a) Java Basics - Anfänger-Themen 7
Dilara_K Abstand zwischen den Doppelwerten in einem Array herausfinden Java Basics - Anfänger-Themen 20
S Nach dem Herüberschieben eines Arrays zwischen 2 Frames öffnet sich das Frame nicht mehr Java Basics - Anfänger-Themen 12
D Zufallszahl zwischen 10 und 99? Java Basics - Anfänger-Themen 5
J Objektzugriff zwischen disjunkten Klassen Java Basics - Anfänger-Themen 1
L Den Winkel zwischen zwei Vektoren berechnen! Java Basics - Anfänger-Themen 2
A Methoden Unterscheid zwischen public und ohne Java Basics - Anfänger-Themen 9
X Input/Output Höchste Temperaturschwankung zwischen 2 Tagen Java Basics - Anfänger-Themen 2
Bluedaishi der Monat zwischen zwei Datumsangaben Java Basics - Anfänger-Themen 15
R Threads Pause zwischen zwei Schleifen Java Basics - Anfänger-Themen 1
Aprendiendo Unterschied zwischen Referenzvariable und Instanzvariable. Java Basics - Anfänger-Themen 2
N Unterschied zwischen Checked und Unchecked Exceptions Java Basics - Anfänger-Themen 12
S Parameterübergabe zwischen zwei Programme Java Basics - Anfänger-Themen 4
S Erste Schritte Zwischen zwei Punkten ein Minimumpkt./Maxima finden Java Basics - Anfänger-Themen 1
K Klassen Array zwischen Klassen übergeben Java Basics - Anfänger-Themen 2
Arif OOP Die Bindung zwischen einem äußeren und einem inneren Objekt Java Basics - Anfänger-Themen 2
schoenosrockos Unterschied zwischen Objekten und vererbungen Java Basics - Anfänger-Themen 1
S OOP Variablen zwischen mehreren Klassen Java Basics - Anfänger-Themen 11
H Klassen Konstruktor Parameter als Instanzvariablen zwischen speichern... Java Basics - Anfänger-Themen 11
J Variablen Unterschied zwischen lokalen-, Instanz-, Klassenvariablen Java Basics - Anfänger-Themen 6
N Dauer zwischen zwei LocalDateTime Objekten berechnen? Java Basics - Anfänger-Themen 4
P Ungerade Zahlen ausgeben lassen zwischen Spannweite zweier eingegeben zahlen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben