Warum sind public-Variablen böse?
-
Was mir gerade so einfällt...
- Öffentliche Elementvariablen können nicht gegen Veränderungen geschützt werden, die den Klassenzustand verletzen würden (datum.monat = 13;)
- Man kann zwischen öffentliche Variablen und den Benutzer der Klasse keine Indirektion mehr zwischenschalten, in Zugriffsfunktionen kann man je nach Bedarf jeglichen Code hinzufügen (siehe Impuls-Beispiel weiter oben)
- Klassen sollen allgemein keine Variablensammlungen sein, sondern ein zusammenhängendes Verhalten modellieren (das steckt auch ein Bisschen im Impuls-Beispiel)
-
Es wird aber immer wieder Klassen geben, die kein Verhalten haben und blosse "dumme" Datenansammlungen sind. Dafür nimmt man dann am besten struct.
-
oder einen Namespace:
namespace MyDummyVariables
{
double X;
double Y;
//...
}int main()
{
double light_velocity = MyDummyVariables::X ;
}
-
Namespaces sind aber, wenn man es so sieht, Singletons. Klassen kann man beliebig oft instanziieren.
-
außerdem kann das nuetzlich sein, wenn du den Code auf eine andere Platform portierst und sich dort das Verhalten der Klasse aendern muss und du die Variable zB. nur simulierst.
-
Man muss es imho von Situation zu Situation entscheiden. Wenn man echt keine Zeit hat um getter/setter zu schreiben und der Code nicht wiederverwendet wird dann geht es auch mal so. Aber OOP ist das nicht wirklich.
-
Wenn man echt keine Zeit hat um getter/setter zu schreiben
lol
-
Wieso lol? Nervig ist das mit den gettern/settern schon, obwohl einige IDEs dir viel Arbeit abnehmen! Klar, man verbringt nur einen Bruchteil der Zeit damit den Code zu schreiben, deswegen zieht das Argument mit der Zeitersparnis nicht wirklich.
-
Namespaces sind aber, wenn man es so sieht, Singletons.
Dann könnte man Klassen leicht vereinzeln:
class X{...}; namespace Singleton { X alone_in_the_dark; } int main() { Singleton::alone_in_the_dark; }
-
Ist zwar etwas C++Builder-Spezifisch, lässtm ana ber den Teil über __property weg,so ist das halb so wild:
http://www.c-plusplus.net/forum/viewtopic.php?t=39302-junix