OOP Kommunikation zwischen Objekten?

berndoa

Top Contributor
Hallo,
ich habe mal eine grundsätzliche Frage, bitte nichts zu Komplexes erwarten:
Und zwar war es schon oft so dass ich mich in folgender Situation befand:

Es müssen diverse Aufgaben erledigt werden.
bspw. muss Input eingelesen und verarbeitet werden,
es muss anderswo was mit dem Input berechnet werden,
es müssen Objekte erzeugt werden.
Auch muss womöglich was graphisch gemalt werden (GUI Kram halt).

Vielleicht kommt auch noch OCR vor.

Zumindest für mich organisatorisch war es schon immer dann am Sinnvollsten, das Ganze nahc Aufgabengebieten zu ordnen.
Gibt also sozusagen einen Input Manager, einen Math Manager,
GUI Manager, etc.

Halt für jeden Aufgabenbereich Objekt(e) einer Klasse, mit für die Aufgabe relevannten Attributen, methoden, etc.

Muss man sich wie verschiedene Abteilungen und Arbeiter in eienr Firma vorstellen.
A kriegt von rigendwoher Daten, macht was mit.
gibt es an B weiter mit gewissen Anweisungen für den nächsten Schritt.
B mahct was damit, gitbs an C weiter.

C macht was, je nach internen Vorgängen gibt er es an A zurück oder schickts an D weiter.
Kurzum, die Objekte müssen sich untereinander kennen, vielleicht muss D auch mal As Attribut kennen oder gar ändern,
etc.

Fragt sich nur, wie setzt mans um?

In python habe ich da Null problem.
Von jeder Klasse die entsprechenden objekte erzeugt, in Python kennen sich Top Level Objekte automatisch untereinander und
jedes Objekt kann auf die Attribute und Methoden anderer Klassen zugreifen.

Aber wie macht mans in java?

Da müsste ja jedes Objekt Referenzen zu allen anderen Objekten haben (PITA, und ein Alptraum falls ein neues Objekt dazukommt, muss man in allen Klassen Sachen abändern).

Wie regelt man da sowas?
Python ist recht lax mit seinen Regeln, drum kann ich es einfach direkt machen.
Da kann eine Methode in der D Klasse einfach direkt ein ebstimmtes Pbjekt der Klasse A abändern, hardgecoded.

Garantiert kein schöner Stil, aber es klappt.

Aber wie macht mans in Java?
Bitte keine Spezialklassen oder Ähnliches, will das mit dem Standard Equipment von Java umsetzen.
Mehr eigentlich eine Designfrage aber wie setzt man sowas um?

Oder eine weitere Klasse, die alle anderen Objekte kennt und "Aufgaben rumdeligiert"?
Aber da haben wir dann ja endloskaskaden wie
d.machd(c.machc(b.machb(a.macha)))
wenn der Output der Methode einer Methode als Input in der methode einer anderen methode wirken soll.
Geschweigedenn wenn zyklisch Daten hin und hergeschickt werden...
 

Ullenboom

Bekanntes Mitglied
Objektorientierung ist wie im Leben: Man kennt sich und bittet etwas zu tun. Im Speicher steht letztlich ein Objektgraph, wo Objekte verbunden sind, die sich kennen.

Jetzt gibt es 2 Fragen:

1. Wie baut man den Objektgraph auf?
2. Will man eine solche Kopplung überhaupt?

Wenn man das möchte, muss man auf externe Libs zurückgreifen (selbst programmieren lassen wir mal besser …).
IoC-Lösungen wie CDI, Spring, Guice sind gut darin, Objektgraphen aufzubauen. So schiebt man die Objekterzeugung an eine zentrale Stelle ab. Natürlich kennen sich die Objekte, die miteinander interagieren dann, das ist auch okay.

Man kann das auch anders sehen und die Dynamik in den Mittelpunkt setzen, dass Objekte andere Objekte bitten, etwas zu tun, aber es nicht wissen sollen, wer genau was macht. Hier kann ein Event-Bus interessant sind, etwas, was man IMO immer bei GUI-Anwendungen einsetzen wird.
 

KonradN

Super-Moderator
Mitarbeiter
Also erst einmal ist die Aufteilung durchaus richtig. Bei deiner Wortwahl habe ich aber etwas gestutzt:
Gibt also sozusagen einen Input Manager, einen Math Manager,
GUI Manager, etc.
Das kann in Ordnung sein, aber das kann auch bedeuten, dass Du da für irgendwelche Teile sowas wie "Gott Klassen" hast. Das sollte man eher vermeiden.

in Python kennen sich Top Level Objekte automatisch untereinander
Das ist etwas, das schrecklich ist. Geht auch prinzipiell in java. (Wieso fällt mir da direkt "Pongo" ein? Oder wie hiess das Tutorial auf YouTube?). Du hast ja auch in Java sowas wie globale Variablen bis hin zu einem:
Ich mache eine Klasse Var und da packe ich lauter public static Variablen rein und die nutze ich dann von überall.

Ja, technisch geht das. Aber das macht man einfach nicht!

Generell scheint es doch schon so zu sein, dass Du bereits eine Unterteilung in Teilbereiche hast. Diese kannst Du dann doch abtrennen. Dann hast Du eine Art Schnittstelle. Du hast also etwas, das liefert xyz. Und Du hast etwas, das verbraucht xyz. Der Verbraucher muss den Erzeuger nicht kennen.

Meine Auto verbraucht das Benzin und hat keine Ahnung, wo das herkommt und wie das transportiert wurde. Und die Raffinerie erzeugt das Benzin, ohne mein Auto zu kennen.
Diese Trennung ist auch wichtig - stelle Dir vor, ich müsste beim Fahren ständig mit der Raffinerie reden oder so... Oder die Raffinerie müsste bei der Produktion ständig bei meinem Auto nachfragen für irgendwas... Wäre doch auch unsinnig.

Statt dessen gibt es allgemeine Schnittstellen. Es gibt Puffer. Die Raffinerie erzeugt etwas und lagert es zwischen. Dann wird es transportiert und dazu werden irgendwelche Techniken eingesetzt. Prinzipiell ist dann egal, ob das Benzin in einen Tank-LKW, in ein Tank-Schiff oder gar in ein Tank-Flugzeug gepumpt wird.

Und das, was es so physikalisch gibt, gibt es auch in der Softwareentwicklung. Da wurde also nichts neues erfunden sondern es wurden nur Abläufe, die es so schon immer gibt, nachgebaut.

Und was gibt es denn dann alles?

Ich baue etwas und das sollst Du kriegen. Ich kenne Dich aber nicht. Was kann es da alles geben?

a) Ich sorge aktiv dafür, dass Du es bekommst. Aber ich kenne Dich nicht, daher kann ich es Dir nicht geben. Also nutze ich ein System, das wir beide kennen. Im realen Leben wäre es also: Ich packe es in ein Paket, gebe es der Post und die bringt es Dir. Sowas gibt es in allen möglichen Formen von relativ einfach (Es gibt einen gemeinsamen Bekannten also z.B. die Kerninstanz der Anwendung, die alle alle kennen und die dann auch alle Teile kennt auf und sage: Hier habe ich etwas fertig. Dann kann die Anwendung schauen, was da ist und es weiter geben) bis hoch kompliziert (Dann gibt es da komplexe Implementationen von "Enterprise Service Bus" wo dann auch viele Features dazu kommen wie Security, Transaktionen, ...).

b) Observer Pattern. Das geht dann in Richtung Event und ist dann auch ähnlich wie bei UIs. Der Button kennt Dein Programm nicht. Du musst den Button auch nicht genau kennen. Aber es gibt ein Event und das willst Du haben. Also sagst Du dem Control: Wenn da der Nutzer dieses Control auslöst, dann möchte ich das hier erfahren. Die Unabhängigkeit ist gegeben. In die eine Richtung ist klar: Die Framework Entwickler kennen Dich und Deine Klasse nicht. Aber auch Du musst den Knopf nicht kennen. Du hast in erster Linie ein Event und da ist egal, ob dies durch ein Knopf, ein Link, ein angeklicktes Panel, .... gekommen ist. Das Control kann einfach gewechselt werden.

c) Generell kann es natürlich auch sein, dass es einfach nur ein komplexes System ist. Dann kennen sich Teile ggf. auch gegenseitig. Das kann vorkommen. Aber da wird dann oft abstrahiert: Du hast also Interfaces. Damit hast Du eine Abhängigkeit zu einem Interface. Eine Komponente braucht also einen Consumer von etwas. Dann ist egal, was das für ein Consumer ist, so lange das Interface Consumer<etwas> implementiert wurde. Umgekehrt kann es die Beziehung auch geben. Aber auch da ist dann nur ein Interface bekannt. Damit hast Du bei der Implementation keine direkte Abhängigkeit zwischen den Teilen (und die wollten wir ja vermeiden)

Das ist nur eine grobe Zusammenstellung. Es gibt viele Möglichkeiten, wie Dinge strukturiert und aufgebaut werden können. Da hilft es bestimmt, sich einmal die gängigen Entwurfsmuster anzusehen.
 

mihe7

Top Contributor
Wieso fällt mir da direkt "Pongo" ein? Oder wie hiess das Tutorial auf YouTube?
Das Tutorial, dessen Name nicht genannt werden darf. Ich trau mich trotzdem: Pong. Wurde das Video immer noch nicht verboten?!? :p

Komisch, dass sehen meine Klassen und Objekte dort aber anders...
Vermutlich wollte @Jw456 damit sagen, dass man noch lange nicht objektorientiert programmiert, bloß weil man Klassen und Objekte im Code stehen hat. Umgekehrt braucht man nicht unbedingt eine Sprache, die Klassen oder Objekte kennt, um objektorientiert programmieren zu können.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
CptK Backpropagation parallelisieren: Kommunikation zwischen den Threads Allgemeine Java-Themen 7
L Kommunikation zwischen C# und Java? Allgemeine Java-Themen 5
S Threads Kommunikation zwischen SocketThread und WorkerThread Allgemeine Java-Themen 11
A Kommunikation zwischen 2 Jar-dateien Allgemeine Java-Themen 16
E kommunikation zwischen Fenstern Allgemeine Java-Themen 3
A Kommunikation zwischen C++ und Java-Programm Allgemeine Java-Themen 4
M Kommunikation zwischen 2 Programmen Allgemeine Java-Themen 7
G Kommunikation zwischen Threads und Gui Allgemeine Java-Themen 2
P kommunikation zwischen dialog und threads Allgemeine Java-Themen 4
V Kommunikation zwischen Programmen und Threads Allgemeine Java-Themen 7
R PIPE Kommunikation mit Prozess blockiert Allgemeine Java-Themen 0
M Checksummenprüfung bei Client Server kommunikation Allgemeine Java-Themen 3
D Interthread-Kommunikation Allgemeine Java-Themen 6
0 Lösungsweg Client Server Kommunikation Fehlermeldung ausgeben Allgemeine Java-Themen 12
L Software-Design: Kommunikation mit SerialPort (RXTX) Allgemeine Java-Themen 2
F Serielle Kommunikation Allgemeine Java-Themen 20
S Kommunikation von Core und GUI über Schnittstellen Allgemeine Java-Themen 2
P Komponenten kommunikation Allgemeine Java-Themen 7
L Serielle Kommunikation Allgemeine Java-Themen 6
G Implementierung einer Kommunikation Allgemeine Java-Themen 7
B SerialPort Kommunikation - Pufferüberlauf Allgemeine Java-Themen 6
0 Sandbox und Applet Kommunikation Allgemeine Java-Themen 9
H Java C++ Interprozess Kommunikation Allgemeine Java-Themen 7
D Klassen Kommunikation Allgemeine Java-Themen 11
M Applet Servlet Kommunikation ein Problem bei externem Server Allgemeine Java-Themen 3
F Kommunikation zw 2 Java-Programmen mit unterschiedl Compiler Allgemeine Java-Themen 13
G Kommunikation mit Remotegeräten Allgemeine Java-Themen 2
J Kommunikation mit USB Gerät, das Midi-Signale sendet Allgemeine Java-Themen 4
G Kommunikation mit der seriellen Schnittstelle Allgemeine Java-Themen 6
H Kommunikation mit einem c-Prozess funzt nicht richtig Allgemeine Java-Themen 5
C Pattern für Kommunikation gesucht Allgemeine Java-Themen 3
B Kommunikation mit entferntem Thread Allgemeine Java-Themen 6
O kommunikation zw. objekten Allgemeine Java-Themen 7
G Kommunikation von zwei Java-Programmen Allgemeine Java-Themen 3
N Inter-Thread-Kommunikation Allgemeine Java-Themen 3
M Kommunikation mit externem Programm ueber Linux-Pipes Allgemeine Java-Themen 4
T Kommunikation mit batch datei Allgemeine Java-Themen 3
K MVC - Kommunikation Controller <> Gui Allgemeine Java-Themen 5
P Kommunikation von Threads Allgemeine Java-Themen 5
H Servlet/Applet Kommunikation Allgemeine Java-Themen 2
C Kommunikation mit USB Port Allgemeine Java-Themen 1
O Text aus einer Textdatei rausholen, der zwischen zwei Schlüsselworten steht Allgemeine Java-Themen 4
B Sent and Receive Funktionen zwischen Objekten ermöglichen? Allgemeine Java-Themen 8
Master3000 Dateien zwischen verschiedenen Netzwerken senden Allgemeine Java-Themen 17
L Unterschied zwischen List und LinkedList implementierung? Allgemeine Java-Themen 15
B Schnittstelle zwischen MySQL und Apache Allgemeine Java-Themen 8
TonioTec Api für Datenaustausch zwischen Client und Server Allgemeine Java-Themen 0
Kirby.exe Schauen ob ein Kante zwischen Knoten existiert Allgemeine Java-Themen 4
L Schlüsselworte Wie kann ich am Besten ein LocalDate zwischen Anfangs und EndDate checken Allgemeine Java-Themen 10
Zrebna Random Number - Generische Formel zwischen zwei INKLUSIVEN Werten Allgemeine Java-Themen 16
N Kollision zwischen ImageIcon und Rechteck Allgemeine Java-Themen 1
D Input/Output Zwischen zwei ID-Räumen unterscheiden und Objekt löschen Allgemeine Java-Themen 16
B Zufällig zwischen vorgegebenen Zahlen auswählen Allgemeine Java-Themen 6
J Millisekunde zwischen 2 Daten Allgemeine Java-Themen 6
D Best Practice Die niedrigste Differenz zwischen zwei Listen ermitteln. Allgemeine Java-Themen 10
J Fahrroute zwischen zwei Punkten finden Allgemeine Java-Themen 1
J Transfer von Integer zwischen zwei Clients - RMI Allgemeine Java-Themen 4
F Unterschied zwischen NormalizedValue und Value Allgemeine Java-Themen 5
G Liste zwischen zwei Kalenderdaten erstellen Allgemeine Java-Themen 3
J Abhängigkeit zwischen Rechenzeit und Speicherbedarf in einen Algorithmus Allgemeine Java-Themen 7
T Strings über Bluetooth zwischen PC,µc oder Samrtphone senden und empfangen Allgemeine Java-Themen 0
H RegularExpression zwischen zwei Strings Allgemeine Java-Themen 2
V Input/Output Austausch von Bytes zwischen C# und Java Allgemeine Java-Themen 3
A Best Practice Unterschied zwischen einer sauberen Dependency Injection und einer statischen Klasse Allgemeine Java-Themen 5
R jTable, nur Werte zwischen 2 Double values ausgeben Allgemeine Java-Themen 3
J Wie erschaffe ich einen sicheren Datenaustausch zwischen Thread und Nicht-Threads Allgemeine Java-Themen 8
M Unterschied zwischen Win 7/2008R2 und Win8.1/2012R2? Allgemeine Java-Themen 8
N Zeitabstand zwischen 2 Daten(Mehrzahl von Datum) Allgemeine Java-Themen 3
O Socket-Unterschiede zwischen Windows und Ubuntu Allgemeine Java-Themen 2
Z Vergleich zwischen int und Object Allgemeine Java-Themen 1
H Gibt es einen großen Unterschied zwischen Java 6 und Java 7? Allgemeine Java-Themen 3
S Eclipse Abhängigkeiten zwischen den Projekten in Eclipse Allgemeine Java-Themen 2
G nervendes Problem mit unterschieden zwischen Javax64 und x86 | je nach Programmbedarf beides nötig Allgemeine Java-Themen 2
J Java-Implementierung diverser Beziehungen zwischen Klassen bzw. Objekten Allgemeine Java-Themen 2
B Unteschiede zwischen Kantenoperatoren Allgemeine Java-Themen 3
X Datentypen Prozentualer Abgleich zwischen 2 Strings (Pattern?) Allgemeine Java-Themen 3
Z zeit zwischen maus drücken und loslassen Allgemeine Java-Themen 7
C Komisches Verhalten zwischen Set und List bei contains Allgemeine Java-Themen 6
K Objekt-Austausch zwischen zwei Programmen über System-Clipboard Allgemeine Java-Themen 5
N Gridbaglayout - Abstände zwischen Komponenten einstellen Allgemeine Java-Themen 2
H Datenaustausch zwischen zwei Java-Programmen Allgemeine Java-Themen 5
D Exakte Unterschied zwischen diesen Elementen? Allgemeine Java-Themen 5
C Swing Daten zwischen JTable teilen Allgemeine Java-Themen 6
N Unterschied zwischen "Java" und "Java mit Eclipse" Allgemeine Java-Themen 17
X Bild im Memory zwischen speichern Allgemeine Java-Themen 11
T Zugriff zwischen Klassen für repaint Allgemeine Java-Themen 7
S Assoziation zwischen 2 klassen Allgemeine Java-Themen 14
V Threads & Pipes Datenaustausch zwischen Threads Allgemeine Java-Themen 2
G Hauptthread anhalten / Unterschied zwischen Main-Thread und dialogelement-Thread Allgemeine Java-Themen 2
C Strings zwischen 2 Zeichen auslesen Allgemeine Java-Themen 7
Lufti Unterschied zwischen Djava.library.path und Class-Path im Manifest? Allgemeine Java-Themen 2
A Differenz zwischen zwei Uhrzeiten Allgemeine Java-Themen 7
B Unterschied zwischen Klasse und Objekt? Allgemeine Java-Themen 8
S Datenformat zum Austausch zwischen Java und Python? Allgemeine Java-Themen 3
G Interface zwischen 2 Programmierern Allgemeine Java-Themen 10
B Gibt es einen Unterschied zwischen Java 1.2 und Java 2? Allgemeine Java-Themen 7
J Unterschied zwischen "Debug" und "Run" Allgemeine Java-Themen 16
A java.io-Änderungen zwischen java 1.4 und 1.6 Allgemeine Java-Themen 18
G Zwischen Datei und Verzeichnis unterscheiden. Allgemeine Java-Themen 11
J Unterschiede zwischen normaler und Debug Ausfuehrung? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben