Kommunikation zwischen Objekten



  • Hallo bin gerade dabei mich in die objektorientierung einzufinden und hab da
    noch so meine Schwierigkeiten.

    Hab bisher eher mit PHP und dergleichen gearbeitet, wo ich kaum in solche situationen kam wie jetzt mit C++.

    Ich versuche mal meinen derzeitigen Ansatz zu erklären und hoffe ihr könnt mir dabei helfen einen möglichst brauchbaren Weg zu finden.

    Beispiel:

    Ich habe eine Object "core", das so gesehen meine kernroutinen bereit stellt.

    Das Objekt core instantiiert verschiedene Objekte die für den Programmablauf benötigt werden. darunter einen "eventhanlder" und einen "loghandler".

    Der EventHandler verarbeitet alle arten von Events die auftreten, während der LogHandler meine log Datei verwaltet und Einträge in diese schreibt.

    Jetzt kennen sich EventHandler und LogHandler nicht.
    Ich möchte bei bestimmten events aber einen Eintrag in die log schreiben.
    Dazu müsste ich also eine Verbindung zwischen EventHandler und LogHandler herstellen.

    Derzeit mache ich das wie folgt. Beim Konstruktoraufruf der beiden Handler übergebe ich eine referenz auf core.

    Also haben EventHandler und LogHandler beide eine Referenz auf das verwaltende Objekt core.

    Für die verbindung habe ich mir jetzt Getter methoden in core bereit gestellt, die entweder eine referenz auf das objekt eventhandler oder das objekt loghandler zurück geben.

    Wenn ich also vom EventHandler aus in die Log schreiben will, rufe ich über dessen referenz auf core die getter methode für den LogHandler auf. So dass der Eventhandler die referenz auf den LogHandler bekommt und kann somit in die log schreiben.

    Ich bin mir jetzt nur nicht sicher ob das so empfehlenswert ist, bzw. ob es nach der Objektorientierung bessere Ansätze gibt sowas umzusetzen.

    Bin da noch ziemlich unerfahren mit.

    Wäre für jede Hilfe dankbar. 😉



  • Das ist völlig in Ordnung. Wenn der Loghandler des Core allerdings nie geändert wird, kannst du im Eventhandler auch eine Referenz auf den Loghandler speichern, die sich der Eventhandler bei der Initialisierung einmal vom Core besorgt.



  • Hui, bin jetz doch etwas überrascht, dass ich es auf anhieb nicht falsch mache ^^

    Ok die Referenzübergabe bei der Initialisierung könnte ich machen, muss nur mal sehen, die sich das weiter entwickelt, da ich derzeit auch andere Objekte habe die eine Referenz auf den LogHandler benötigen, wollte ich das erstmal vom core auf Anfrage verteilen lassen.

    Wie bilde ich das ganze jetzt in UML ab ?
    Da ich davon ausgehe, das die Kommunikation zwischen EventHandler und LogHandler
    eher indirekt und nur temporär stattfindet würde ich diese beiden Klassen unabhängig darstellen und nur über die ... Aggregation is das glaube ich ... zum core abbilden oder ?



  • ZSchneidi schrieb:

    Wie bilde ich das ganze jetzt in UML ab ?
    Da ich davon ausgehe, das die Kommunikation zwischen EventHandler und LogHandler
    eher indirekt und nur temporär stattfindet würde ich diese beiden Klassen unabhängig darstellen und nur über die ... Aggregation is das glaube ich ... zum core abbilden oder ?

    Die Kommunikation findet durchaus nicht indirekt statt. Der EventHandler hält nur keine permanente Referenz auf den Loghandler, er besorgt sich aber eine wenn er eine braucht und spricht den LogHandler dann auch direkt an.

    Im statischen Diagramm hat er dann tatsächlich keine Verbindung zum Loghandler. Im Ablaufdiagramm allerdings schon. Das zeigt, dass auch UML da nicht perfekt ist, denn die statischen Beziehungsdiagramme zeigen eben nur das, was statisch ist, und damit eigentlich einen zustand, der nie gegeben ist, weil ein Programm eben immer läuft und wie in deinem Beispiel z.B. Referenzen auf- und abgebaut werden, die das Diagramm nicht zeigt.



  • Also würde ich in einem Klassendiagramm diese Beziehung nicht mit aufzeigen ?

    Das hilft mir schon mal ein ganzes Stückchen weiter, da ich immer noch gegrübelt hab, wie ich das darstellen soll.

    Bis hierher schonmal vielen dank für die mühe das hier zu lesen pumuckl 😃


Anmelden zum Antworten