OOP Set/Get



  • Hallo,

    ich hab mich lange vor OOP gedrückt. Nun hab ich mich mal daran versucht, steh natürlich ganz am Anfang:

    class Patienten
    {
    	public:
    	String sNachname;
    	int iAlter;
    
    	String SetName(String s, int i);
    };
    String Patienten::SetName(String s, int i)
    {
    	return sNachname + ", " + IntToStr(iAlter) + " Jahre";
    }
    
    Patienten Pat[3];
    	Pat[0].sNachname = "Meyer";
    	Pat[0].iAlter = 45;
    	Pat[1].sNachname = "Müller";
    	Pat[1].iAlter = 12;
    	Pat[2].sNachname = "Schulze";
    	Pat[2].iAlter = 52;
    
    	for (int i = 0; i < 3; i++)
    	{
    		Memo1->Lines->Add(Pat[i].sNachname + ", " + IntToStr(Pat[i].iAlter) + " Jahre");
    	}
    
    	Memo1->Lines->Add("____________________________");
    	Memo1->Lines->Add(Pat[0].SetName(Pat[0].sNachname, Pat[0].iAlter));
    

    Ich hab ne allgemeine Frage - auf SetNachname, SetAlter, GetNachname, GetAlter habe ich verzichtet. Der Sinn dahinter bleibt mir bisher im Verborgenen. Für meinen Bedarf könnte das so schon reichen, so habe ich es sprechender als nur über Arrays zu arbeiten.



  • aha...



  • Wenn es sich rein um eine Container für Daten handelt, ist sowas bzw. eine struct natürlich genau richtig. Wenn es aber wirklich ein Patient-Objekt sein sollte, sollte man den Namen eher dem Konstruktor übergeben und den Member privat machen.



  • Ich würde Dein Code wie folgt umbauen, um die Klasse besser einzubinden.

    class Patient { 
    public: 
      String Set(String s, int i) {
        SNachname = s;
        iAlter = i;
      }
    
      String GetDisplayName() const {
        return sNachname + ", " + IntToStr(iAlter) + " Jahre"; 
      }
    
    private:
      String sNachname; 
      int iAlter; 
    };
    
    Patient Pat[3];
    Pat[0].Set("Meyer", 45);
    Pat[1].Set("Müller", 12);
    Pat[2].Set("Schulze", 52);
    
    for (int i = 0; i < 3; ++i) {
      Memo1->Lines->Add( Pat[i].GetDisplayName() );
    }
    

    Mir ist aber Deine Frage entgangen. Was ist den Deine Frage?



  • jb2603 schrieb:

    ...
      String Set(String s, int i) {
        SNachname = s;
        iAlter = i;
      }
    ...
    

    Wenn du mich fragst, sollte ein Setter sich immer auf genau ein Attribut beziehen und nicht auf mehrere. Daher wäre richtiger:

    void SetName(string s);
    void SetAlter(int i);
    

    Außerdem dürfte dein Code wenn ich das richtig sehe nicht einmal kompilieren, da du einen Setter hast der einen String zurück liefert.



  • Sind die Zeiten von mutable-Objekten nicht schon wieder vorüber?

    MfG SideWinder



  • SideWinder schrieb:

    Sind die Zeiten von mutable-Objekten nicht schon wieder vorüber?

    MfG SideWinder

    Ja, besser sind Taker.



  • awwe schrieb:

    SideWinder schrieb:

    Sind die Zeiten von mutable-Objekten nicht schon wieder vorüber?

    MfG SideWinder

    Ja, besser sind Taker.

    Was wird unter "taker" verstanden? Ein kleines Beispiel bitte 🙂
    Mit "taker design pattern" werde ich nicht fündig.

    Danke.


Anmelden zum Antworten