méthodes get/set et d'encapsulation en AS3

Je l'ai souvent vu de la description suivante de la "bonne" façon de la mise en œuvre de méthodes get/set:

public class Foo {
    private var _someVar:SomeClass;

    public function get someVar():SomeClass {
       return _someVar;
    }

    public function set someVar(newValue:SomeClass):void {
      _someVar = newValue;
    }
}

Maintenant, parce que l'AS3 est de retour toujours des références à des classes d'Objet, lorsque nous utilisons la méthode "get" nous obtenir une référence à notre privé var => encapsulation est cassé.

Même si nous n'avons pas une méthode de jeu, nous pouvons modifier la privar var !
Quel est le but de définir comme privé alors?

La seule solution que j'ai trouvé, c'est revenir un clone de "_someVar" dans notre méthode get, mais je n'ai jamais vu cela dans un exemple.
Donc, je pense que je vais perdre quelque chose ici.

Êtes-vous de retour d'un clone de l'objet à partir de votre getters ou que vous venez d'accepter une rupture de l'encapsulation?

MODIFIER
Je comprends comment définir et obtenir des méthodes ne fonctionne, et je comprends les avantages d'entre eux.
Je pose la question pour la pause de "privé" de l'accès à notre private var quand nous le retourner avec un getter par référence (si var est de type Number, String, int, etc AS3 est de retour toujours par valeur, pas de référence, de sorte que nous n'avons pas de problème ici).
Peut-être n'est pas l'encapsulation qui est cassé, parce que nous ne pouvons pas définir la propriété sans une méthode de définition. Mais nous pouvons la modifier !

Voir cet exemple:

public class Foo {
    private var _someVar:Array; //note that this is a Object (not Number, String, etc)

    public function Foo(){
        _someVar = ['don't touch this!'];
    }

    public function get someVar():SomeClass {
       return _someVar;
    }

    //note that we don't have a setter

}


var f:Foo = new Foo(); 
var a:Array = f.someVar;
trace(a[0]); // 'don't touch this!'
a[0] = 'why not?'; 
trace(f.someVar[0]); //'why not' 

Donc, nous changeons notre private var à partir de l'extérieur, et sans contrôle, même lorsque nous n'avons pas une méthode de définition.

OriginalL'auteur Enrique | 2011-06-17