Get/Set
-
Nur bedingt. Im Falle des Spielers wäre wohl move_to eine Verkettung mehrerer Schritte welche ausgeführt werden oder nicht? Also mehrerer set_x und set_y? (zum Beispiel)
Ich würde sagen genau ein Aufruf von set_x und einer von set_y.
Aber ein move_to wäre auch wenn du auf ein polar-Koordinatensystem umstellst kein Problem, wogegen ein set_x und set_y jedes mal Umrechnungen zur folge hätten, obwohl es so aussieht, als wäre es etwas ganz primitives.
-
junix schrieb:
Naja ich drücks mal etwas anders aus: ich konzentriere die Variablenzugriffe auf eine Funktion um die kontrolle über Zugriffe und damit auch über Seiteneffekte jederzeit haben zu können.
wenn man es in dieser art machen will, gibt es aber auch eine unsicherheit
(ich sage mal nichts dazu, ob ich diese art für sinnvoll halte, muss wohl jeder für sich selbst entscheiden)
als beispiel benutze ich den fall private daten und private zugriffsfunktionen
und ich gehe, von deinen bisherigen post's, davon aus, dass du etwas in der art des folgenden benutzt, also eine datenvariable und zugehörige get und set methoden:
class Something { ... private: int data; void setData(int in) { data = in; } int getData() { return data; } ... };
das problem ist, dass nur deine einstellung, zugriff auf daten nur mit den get/set funktionen, und deren befolgung bei der programmierung dich davon ab hält, die daten auch direkt, ohne die zugriffsmethoden, in einer anderen methode zu benutzen,
du hast keine unterstützung durch die sprachsyntax, die dies verhindertals vergleich dazu: im private daten und public zugriffsmethoden fall, verhindert die sprachsyntax die direkte benutzung der daten
müsstest du dann nicht eher eine andere sichere variante benutzen um wirklich die sicherheit und kontrolle zu haben?
z.b. als schnell entstandene idee zur anregung das folgende:
#include <iostream> #include <string> template<class T> class Data { private: T data; public: void set(const T& in) { data = in; } const T& get() const { return data; } }; class SampleClass { public: void DoSomething() { data2.set(4); data1.set(data2.get() * 2); std::cout << "data1 = " << data1.get() << std::endl; std::cout << "data2 = " << data2.get() << std::endl; text.set("Testtext."); std::cout << "text = " << text.get() << std::endl; } private: Data<int> data1; Data<int> data2; Data<std::string> text; }; int main(void) { SampleClass sample; sample.DoSomething(); return 0; }
-
Wo liegt da der Sinn? Ich denke es geht auch um Dinge, wie Design By Contract.
'Data' ist hingegen nur eine unnötige Verkomplizierung (toller Neologisnmus
).
Wenn du es nischt schaffst irgendwie noch die "Verträge" an dein 'Data' zu übergeben, ist es sinnlos.
-
Wo liegt da der Sinn?
das frage ich mich auch, aber schon bei der art von j....
(sorry, konnte nicht widerstehen, es noch mehr in die sinnlosigkeit zu treiben)
-
@Helium: stimmt... was bonzo da vorschlägt ist absolut sinnlos. Es braucht keine Data klasse. DAS ist wirklich am Ziel vorbei. Wozu für ein Attribut und 2 Methoden eine ganze Klasse bilden?
-junix
-
LOL
@Helium: stimmt... was junix da vorschlägt ist absolut sinnlos. Es braucht keine Zugriffsmethoden. DAS ist wirklich am Ziel vorbei. Wozu für ALLE! Attribute SINNLOSE und UNNÖTIGE Zugriffsmethoden bilden?