liquidlurker ha scritto:
Mettiamo il caso che all'interno dell'oggetto (studenti) creo un metodo public che mi fa vedere (ad esempio) tutti gli elementi di un ipotetico array studenti(definito in precedenza come variabile istanza ) (privato) , e quindi ritorno come valore l' indirizzo di quell'array (ad esempio: this.studenti).
La mia professoressa ha detto che cosi' facendo tutti possono modificare l'elenco di quell'array. Quel che non capisco e' come fanno .
La questione è un po' ampia, nel senso che bisogna vedere ovviamente come è stata fatta la classe, quali campi possiede e di che tipo.
Se tutti i campi di istanza sono "privati", è già un buon punto di partenza. Se i campi sono solo di tipo primitivo, String, le classi "wrapper" dei primitivi (Integer, Short, Long ecc..) NON ci sono problemi a restituire direttamente questi valori. String e le classi "wrapper" dei primitivi sono IMMUTABILI. Se anche un "client" estrae dalla classe questi oggetti, non può modificarne lo stato.
Se invece la classe contiene array o altre strutture dati complesse .... dipende, bisogna vedere cosa fare o comunque cosa è richiesto/accettabile. Se esponi all'esterno direttamente un array, chiunque può modificare gli elementi (gli elementi dell'array ... NON necessariamente lo stato degli oggetti contenuti). È un bene o un male?? Dipende dallo scenario d'uso.
Se vuoi esporre all'esterno un array ma vuoi che NON venga toccato quello nella classe, la soluzione semplice/veloce è: restituire un array "clonato".