Wie schütze ich ein Objekt vor ungewollter Veränderung oder Auslesen einer Eigenschaft!
Es sollen nur bewusste, gewollte und vorausgeplante Änderungen im Objekt von anderen Teilen eines Programmes vorgenommen werden. Das Verhalten eines Objektes soll das Verhalten eines anderen Objektes nur gewollt beeinflussen können!
So kann dafür gesorgt werden, dass alle Variablen nur über öffentliche Methoden ausgelesen oder verändert werden können.
Das hat auch den Vorteil, dass alle privaten Teile innerhalb der Klasse verändert werden können ohne, dass der Programmablauf gestört wird! Unbefugtes Auslesen von Daten wird zumindest erschwert.
Beispiel:
function Rechteck() { // nur innerhalb der Funktion // sichtbaren und daher privaten Variablen var my_breite = 0; var my_hoehe = 0; // die öffentlichen Funktionen this.set_breite = function(breite) { my_breite = breite; } this.set_hoehe = function(hoehe) { my_hoehe = hoehe; } this.get_hoehe = function() { return my_hoehe; } this.get_breite = function() { return my_breite; } this.get_flaeche = function() { return (my_breite * my_hoehe); } this.get_umfang = function() { return (2 * (my_breite + my_hoehe)); } } // das Testobjekt raum = new Rechteck(); raum.set_breite(3); raum.set_hoehe(5); alert(raum.get_flaeche()); // BLÖDSINN my_breite = 6; my_hoehe = 7; alert(raum.get_flaeche()); // so gehts raum.set_breite(6); raum.set_hoehe(7); alert(raum.get_flaeche());
Nach neuen Regeln für JavaSript kann dies strenger festgelegt werden:
function Rechteck() { "use strict"; let my_breite = 0; let my_hoehe = 0; ...
Die privaten Variablen können nicht mehr durch direkten Zugriff verändert werden! Auch, wenn das auf den ersten Blick so nicht auffällt. Da JavaScript darin keinen Fehler sieht. Es soll ja dynamisch zur Laufzeit änderbar sein.
Nur das Verwenden der zuvor definierten Methoden bringt sinnvolle Ergebnisse!
Interne Vorgänge sollen niemals andere Objekte beeinflussen.
Die Kommunikation mit der Umwelt findet ausschließlich über das Interface statt. Also alles, was mit this deklariert wird.
Folgendes wird untersucht:
function Person() { var my_name = "NoName"; this.setName = function(vorname) { my_name = vorname; }; this.getName = function() { return my_name; } }
Ein konstanter Wert sollte per Definition immer überall gültig sein und darf jedoch weder verändert, überschrieben oder noch gelöscht werden können.
Sonderfall: KundenID während einer Sitzung im OnLineShop