Wie auf eingebettestes Objekt zugreifen?



  • sorry, dass ich dieses Thema noch mal anspreche, aber irgendwie bin ich noch nicht sicherer geworden.

    An der Frage hat sich so gesehen nichts verändert. Ich verwende bei mir in einigen Klassen eingebettete Objekte. Diese Objekte sind meist einfache Datencontainer.

    Nochmal ein Beispiel:

    class Client
    {
    public:
    	Client();
    	~Client();
    
    	Package getReceivedPackage() const;
    	void setReceivedPackage(Package const &package);
    
    	Package m_transmittedData;
    
    private:
    	Package m_receivedData;	
    };
    
    void main()
    {
        Client clientSession;
    
    	// Variante 1: Zugriff auf m_receivedData (Wert lesen und schreiben):
    	Package rData = clientSession.getReceivedPackage()
    	int rWert = rData.getIrgeneinWert();
    	rData.setIrgeneinWert(123);
    	clientSession.setReceivedPackage(rData);
    
    	// Variante 2: Zugriff auf m_transmittedData (Wert lesen und schreiben):
    	int tWert = clientSession.m_transmittedData.getIrgeneinWert();
    	clientSession.m_transmittedData.setIrgeneinWert(123);
    }
    

    Hier habe ich 2 Varianten um auf die eingebetteten Objekte zuzugreifen: Einmal das Objekt extrahieren und einmal der Direktzugriff.

    Variante 1 kommt mir zu umständlich vor. Außerdem würde ich bei den gettern und settern jedes mal unnötig viele Daten kopieren. Es sei denn, man macht es irgenswie mit Referenzen. Ich Weiß aber nicht ob das so gut ist. Variante 2 geht leichter von der Hand und da das eingebettete Objekt öffentliche Schnittstellen liefert, werden auch ungültige Werte abgefangen. Aber eventuell ist es ein schlechter Programmiestil es so zu lösen.

    Welche Variante bevorzugt ihr? Oder macht ihr es ganz anders? Ist es schlecht Objekte in Klassen einzubetten? 😕

    viele Grüße,
    SBond



  • getter/setter für alles sind schlechter Programmierstil (der sich so mit JavaBeans etabliert hat)



  • also ist in diesem Falle der Direktzugriff durchaus sinnvoll? 🙂



  • an und für sich solltest du in client getter und setter haben, die dir die entsprechenden daten liefern und dazu auf die getter und setter der packages zugreifen, sprich von außen solltest du gar keinen zugriff auf innere objekte haben.

    also z.b.

    class Intern
    {
    int data;
    
    public:
    int GetData()
    {
    return data;
    }
    }
    
    class Extern
    {
    Intern intern;
    
    public:
    
    int GetInternData()
    {
    return intern.GetData();
    }
    }
    

    ansonsten ist diese ganze kapselung ziemlich nutzlos.



  • manni66 schrieb:

    getter/setter für alles sind schlechter Programmierstil (der sich so mit JavaBeans etabliert hat)

    Hmm, aber man hat doch öfter, gerade im Webbereich, Daten die logisch zusammen gehören aber auch nicht mehr sind als eben Daten.
    So typische DTOs halt, oder sowas wie ein UserModel etc.

    Kann ja nicht alles immer eine Logik haben, vor allem im Webberreich ist halt vieles eher Datenaustausch.



  • HansKlaus schrieb:

    an und für sich solltest du in client getter und setter haben, die dir die entsprechenden daten liefern und dazu auf die getter und setter der packages zugreifen, sprich von außen solltest du gar keinen zugriff auf innere objekte haben.

    also z.b.

    class Intern
    {
    int data;
    
    public:
    int GetData()
    {
    return data;
    }
    }
    
    class Extern
    {
    Intern intern;
    
    public:
    
    int GetInternData()
    {
    return intern.GetData();
    }
    }
    

    ansonsten ist diese ganze kapselung ziemlich nutzlos.

    Das ist genau so ein Punkt, der mir auch Kopfzerbrechen bereitet. Das 'durchreichen' von Variablen/Methoden. Ich weiß nicht ob das so praktikabel ist, da ich sowas schon hinter mir habe. Wenn ich eine Änderung der Schnittstellen in der Klasse 'Intern' durchführe, dann müsste ich sehr viele Anpassungen vornehmen. Zudem könnte die Klasse 'Extern' zu unübersichtlich werden, wenn es zu viele setter/getter sind. Insbesondere, wenn mehrere Objekte eingebettet sind oder -noch extremer- Objekt in Objekt in Klasse (also 3 Ebenen).

    So sehr komplexe Objekte hatte ich noch nicht unbedingt gehabt, aber wenn es mal dazu kommt, ist es schon gut zu wissen wie man die Daten verwaltet. Einige von euch haben bestimmt auch schon einige Erfahrungen mit sowas, oder? Wie geht ihr denn sowas grundsätzlich an?



  • also wenn du es objektorientiert machen willst, wirst du um das durchreichen nicht herumkommen. ist ja nicht so, dass es nicht anders gehen würde, hat dann aber, zumindest laut irgendwelcher befürworter der oop, eine höhere fehleranfälligkeit zur folge.



  • Hmmmm schrieb:

    manni66 schrieb:

    getter/setter für alles sind schlechter Programmierstil (der sich so mit JavaBeans etabliert hat)

    Hmm, aber man hat doch öfter, gerade im Webbereich, Daten die logisch zusammen gehören aber auch nicht mehr sind als eben Daten.
    So typische DTOs halt, oder sowas wie ein UserModel etc.

    Kann ja nicht alles immer eine Logik haben, vor allem im Webberreich ist halt vieles eher Datenaustausch.

    Ja, und?



  • manni66 schrieb:

    Hmmmm schrieb:

    manni66 schrieb:

    getter/setter für alles sind schlechter Programmierstil (der sich so mit JavaBeans etabliert hat)

    Hmm, aber man hat doch öfter, gerade im Webbereich, Daten die logisch zusammen gehören aber auch nicht mehr sind als eben Daten.
    So typische DTOs halt, oder sowas wie ein UserModel etc.

    Kann ja nicht alles immer eine Logik haben, vor allem im Webberreich ist halt vieles eher Datenaustausch.

    Ja, und?

    Und da sind nun mal Beans übrig und es ist sinnvoll, wenn alles getter und setter hat, oder nicht?



  • Oder war der Punkt, dass dann gleich alles Public sein soll?



  • Hmmmm schrieb:

    Oder war der Punkt, dass dann gleich alles Public sein soll?

    Ja



  • Gibt es eigentlich Bücher zu guten Programmdesign oder ist das alles jahrelange Praxiserfahrrung?

    Bzw. wie lernt man am besten gutes Programmdesign ohne zwei Jahrzehnte zu programmieren? Man könnte dazu vielleicht man einen Thread in Die Artikel erstellen.



  • ja das würde mich auch sehr interessieren 😃

    (seit wann gibt es das denn: :schland: lol 😃 )



  • win8789 schrieb:

    Gibt es eigentlich Bücher zu guten Programmdesign oder ist das alles jahrelange Praxiserfahrrung?

    Bzw. wie lernt man am besten gutes Programmdesign ohne zwei Jahrzehnte zu programmieren?

    Wie lernt man perfekt Gitarre spielen, ohne zwei Jahrzehnte Gitarre zu spielen?



  • manni66 schrieb:

    Wie lernt man perfekt Gitarre spielen, ohne zwei Jahrzehnte Gitarre zu spielen?

    Auch wer lange Gitarre spielt, muss es nicht unbedingt gut können 😉
    Natürlich braucht es Übung und Erfahrung bei der Programmierung, aber gerade wenn man noch grün hinter den Ohren ist, kann man viel falsch machen.

    Gitarre spiele ich auch schon recht lange (ca. 15 Jahre) und auch hier war es unglaublich schwer falsche Angewohnheiten in richtige umzulernen. Besonders wenn man sich das Spielen selber beibringt.

    Ich denke beim Programmieren ist es ähnlich. Als Elektrotechnik-Student wurden mir nur die absoluten (minimalen) Grundlagen in C beigebracht. Das Interesse ist gewachsen und nun programmiere ich seit über einem Jahr an meiner Masterarbeit mit C++. Dank euch konnte ich gute fortschritte machen. Dennoch stoße ich immer wieder auf ein Problem, bei dem es mehrere Wege gibt und ich mangels Erfahrung nicht weiß, welcher der beste ist (so wie in diesem Thread, bei dem es viele Möglichkeiten gibt auf eingebettete Objekte zuzugreifen). Bis jetzt bin ich allerdings noch auf keiner Lektüre gestoßen, das iregendwie perfekt für mich ist.

    Wie ist es eigentlich bei euch gewesen? Habt ihr euch das programmieren strukturiert beigebracht oder kam es im Laufe der Zeit durch Erfahrungen?

    viele Grüße,
    Sbond



  • manni66 schrieb:

    Wie lernt man perfekt Gitarre spielen, ohne zwei Jahrzehnte Gitarre zu spielen?

    kommt aber auch sehr darauf an wie viel man in den zwei Jahrzehnten spielt.
    1 Stunde die Woche?
    1.5 Stunden täglich (ungefähr meine zeit am Klavier täglich)?
    6 Stunden täglich?

    und ob man einen Lehrer hat oder nicht, oder?

    Natürlich braucht man viel Zeit, um etwas zu meistern. Es ist aber auch wichtig was man in der Zeit macht.
    Zwei Jahrzehnte die Gitarre falsch zu halten ist keine gute Idee 😉


Anmelden zum Antworten