Kommunikation zwischen Objekten/ Klassen



  • Hallo,

    ich hab mal eine generelle Frage zur Kommunikation zwischen Objekten der gleichen Klasse oder sicher auch zwischen Objekten verschiedener Klassen. Da das ja zum Grundprinzip von OOP zählt wird es höchste Eisenbahn das mal zu kapieren.

    Jetzt zur Realisierung:
    Als Übung ist eine Kontoklasse zu erstellen, die auch Überweisungen zwischen ZWei Kontoobjekten möglich macht. Als "Skizze" habe ich Referenzen Übergeben. Sollte ich lieber Pointer nehmen? Sollte es liebe eine freie Funktion sein oder virtuelle memberfubktion einer Basisklasse wozu ich tendiere?

    void ueberweis(double cash, base_konto& konto_1,base_konto& konto_2){
    
             konto_1.saldo -= cash;
             konto_2.saldo += cash;
    
             std::cout << "Überweisung abgeschlossen" << std::endl;
    }
    
    

    Hat wer ein paar Worte?

    Danke
    Lou



  • @Lou-Cyphr3 sagte in Kommunikation zwischen Objekten/ Klassen:

    Als "Skizze" habe ich Referenzen Übergeben. Sollte ich lieber Pointer nehmen? Sollte es liebe eine freie Funktion sein [...]

    Argumente dafür und dagegen, jeweils?

    @Lou-Cyphr3 sagte in Kommunikation zwischen Objekten/ Klassen:

    [...] oder virtuelle memberfubktion einer Basisklasse wozu ich tendiere?

    Wh00t!?

    @Lou-Cyphr3 sagte in Kommunikation zwischen Objekten/ Klassen:

             std::cout << "Überweisung abgeschlossen" << std::endl;
    

    Ich weiß bloß nicht warum eine Klasse die ein Konto repräsentiert irgendwas ausgeben sollte.



  • @Swordfish sagte in Kommunikation zwischen Objekten/ Klassen:

    Argumente dafür und dagegen, jeweils?

    @Lou-Cyphr3 sagte in Kommunikation zwischen Objekten/ Klassen:

    [...] oder virtuelle memberfubktion einer Basisklasse wozu ich tendiere?

    Referenzen, weil Pointer ja recht fehleranfällig sind.
    Im Besonderen macht eine virtuelle Überweisfunktion nicht so viel Sinn, aber eine
    abstrakte Basisklasse schon, da wir auch noch verschiedene Währungen implementieren sollen, die jeweils auch untereinander Überweisungen tätigen können.
    Also im Bezug auf die Kommunikation der Kindklassen macht das schon Sinn.
    andere Meinungen?

    @Lou-Cyphr3 sagte in Kommunikation zwischen Objekten/ Klassen:

             std::cout << "Überweisung abgeschlossen" << std::endl;
    

    Ich weiß bloß nicht warum eine Klasse die ein Konto repräsentiert irgendwas ausgeben sollte.

    Das ist nur Spielerei, ich weiß, dass sie das nicht tuen sollte.



  • @Lou-Cyphr3 sagte in Kommunikation zwischen Objekten/ Klassen:

    Referenzen, weil Pointer ja recht fehleranfällig sind.

    Ähm. Nein. Das ist kein Argument. Referenzen wenn es das Objekt geben muss, Pointer wenn es auch erlaubt sein soll, das "nichts" (nullptr) übergeben wird.

    @Lou-Cyphr3 sagte in Kommunikation zwischen Objekten/ Klassen:

    aber eine
    abstrakte Basisklasse schon, da wir auch noch verschiedene Währungen implementieren sollen, die jeweils auch untereinander Überweisungen tätigen können.

    Das ist ein komisches Argument. Dann hat eben jedes Konto einen Umrechnungsfaktor in die Währung in der das Programm rechnet. Das ist kein Argument für Vererbung und eine Basisklasse. In einer real-world-Anwendung hätte wohl jedes Konto eher eine Währung und eine Referenz auf aktuelle Kurse.

    @Lou-Cyphr3 sagte in Kommunikation zwischen Objekten/ Klassen:

    Also im Bezug auf die Kommunikation der Kindklassen macht das schon Sinn.

    Ne.

    @Lou-Cyphr3 sagte in Kommunikation zwischen Objekten/ Klassen:

    Ich weiß bloß nicht warum eine Klasse die ein Konto repräsentiert irgendwas ausgeben sollte.

    https://www.google.com/search?q=single+responsibility+principle



  • @Swordfish sagte in Kommunikation zwischen Objekten/ Klassen:

    @Lou-Cyphr3 sagte in Kommunikation zwischen Objekten/ Klassen:
    Ähm. Nein. Das ist kein Argument. Referenzen wenn es das Objekt geben muss, Pointer wenn es auch erlaubt sein soll, das "nichts" (nullptr) übergeben wird.

    Okay danke

    @Lou-Cyphr3 sagte in Kommunikation zwischen Objekten/ Klassen:

    aber eine
    abstrakte Basisklasse schon, da wir auch noch verschiedene Währungen implementieren sollen, die jeweils auch untereinander Überweisungen tätigen können.

    Das ist ein komisches Argument. Dann hat eben jedes Konto einen Umrechnungsfaktor in die Währung in der das Programm rechnet. Das ist kein Argument für Vererbung und eine Basisklasse. In einer real-world-Anwendung hätte wohl jedes Konto eher eine Währung und eine Referenz auf aktuelle Kurse.

    Mag sein. Wir sollen eine Klassenhierachie für Konten anlegen und eine abstrakte Memberfunktion für eine erstmal fiktive Währung, da kam mir das als erstes in den Sinn,

    @Lou-Cyphr3 sagte in Kommunikation zwischen Objekten/ Klassen:

    Also im Bezug auf die Kommunikation der Kindklassen macht das schon Sinn.

    Ne.

    So generell nicht oder nur auf das Beispiel? Also angenommen Es gibt Objekte von
    Klasse 1 und Klasse 2 die keine gemeinsamen Eltern haben, wie wäre dann eine Kommunikation zu realisieren?



  • Ja sorry, aber in wie weit hilft dir denn eine gemeinsame basis bei der Umrechnung von Währungen?



  • Hallo Lou,
    Ich komme mal auf dein Eingangspost zurück:
    Als Übung ist eine Kontoklasse zu erstellen, die auch Überweisungen zwischen ZWei Kontoobjekten möglich macht.
    Dieses sagt mir, dass die angedachte Kontoklasse eine Methode zur Überweisung eines Betrages auf ein anderes Konto haben soll. Also ähnlich wie die dargestellte Funktion mit dem Überweisungsbetrag, aber nur mit der Referenz (sollte ja wohl keinen nullptr zulassen?) auf das Ziellkonto. Der Gedanke an eine Basisklasse ist hier nicht notwendig.
    Ist Dir der Unterschied von Klasse und Objekt klar?
    Wenn du also zwei Objekte der Kontoklasse hast, rufst Du z.B. die Überweisungsmethode der einen mit dem zu überweisenden Betrag und der Referenz des Zielkkonto auf. In der Methode sollte dann der eigene (this) Saldo sowie der Saldo des übergebenen Kontos entsprechend gesetzt werde.
    Der Gedanke einer freien Funktion stellt sich dann, wenn wie von
    @Swordfish mit Verweis auf https://www.google.com/search?q=single+responsibility+principle angeregt, ein Konto nur für sich zuständig sein soll. Dann würde ich aber selbst so etwas wie eine Kontobucher-Klasse mit solch einer (ggf. statischen) Methode bauen.


Log in to reply