Domanda Java aiuto variabili private e variabili pubbliche !!!

Stato
Discussione chiusa ad ulteriori risposte.

utensilenato1

Utente Bronze
14 Maggio 2014
13
9
1
45
Salve raga !!! Ho un grandissimo problema ..... non riesco a capire la necessità che abbiamo nell'utilizzare una variabile privata al posto di una variabile pubblica , mi sto arrovellando il cervello da 2 giorni , e adesso sto andando in tilt !!!! :( :( ( mi sapreste fare un esempio pratico dove si nota la differenza ) , Grazie a tutti coloro i quali mi aiuteranno , e grazie al team di INFORGE !!!!
 
È buna pratica limitare il più possibile la visibilità dei dati.
Nel momento in cui crei una classe devi cercare di fare il possibile per mascherare tutti i dettagli implementativi: quando vai ad utilizzare una classe la vedi come una black box (sai cosa fa, ma non sai come lo faccia) e nel momento in cui qualcuno va a cambiare la sua implementazione (eg. per migliorare le performance), questo cambiamento ti rimane completamente trasparente.
Si riducono anche gli errori, perché hai la sicurezza che alcuni dati possono essere modificati solo all'interno della classe, quindi in caso di problemi ti semplifichi la fase di debug.

Generalmente vale la regola: parti con tutto private e metti public solo quello che è strettamente necessario. Anche i dati che vuoi rendere effettivamente visibili all'esterno generalmente vorrai metterli private, creando due metodi public (eg. getVar e setVar) per renderli accessibili all'esterno.
 
È buna pratica limitare il più possibile la visibilità dei dati.
Nel momento in cui crei una classe devi cercare di fare il possibile per mascherare tutti i dettagli implementativi: quando vai ad utilizzare una classe la vedi come una black box (sai cosa fa, ma non sai come lo faccia) e nel momento in cui qualcuno va a cambiare la sua implementazione (eg. per migliorare le performance), questo cambiamento ti rimane completamente trasparente.
Si riducono anche gli errori, perché hai la sicurezza che alcuni dati possono essere modificati solo all'interno della classe, quindi in caso di problemi ti semplifichi la fase di debug.

Generalmente vale la regola: parti con tutto private e metti public solo quello che è strettamente necessario. Anche i dati che vuoi rendere effettivamente visibili all'esterno generalmente vorrai metterli private, creando due metodi public (eg. getVar e setVar) per renderli accessibili all'esterno.
Grazie St3ve , gentilissimo , un'ultima domanda.... il mio prof ha detto che utilizziamo le variabili private in modo tale che quando le utilizzeremo in un'altra classe differente da quella di appartenenza non modificheremo la variabile della classe di appartenenza , quindi utilizzeremo get() e set() , ma non è la stessa cosa se ci dichiariamo la variabile nella classe di partenza pubblica e nella classe in cui la utilizzeremo creeremo una nuova variabile , che sarà uguale alla variabile della classe di partenza ed in seguito la modifichermo xD???? (Perdonami se la domanda è troppo confusionaria e dispersiva , ma ancora sono poco pratico di "JAVA" XD .... comunque domani se non dovessi riuscire a capire , posterò il codice in modo tale da esplicare meglio il problema .... Grazie di nuovo per la disponibilità e BUONA PASQUA!!!!!!!!!!!!!!!!!!!!!!!!!!! ) :)
 
I metodi get e set ti servono per aggiungere un ulteriore livello di astrazione.
Supponiamo stai creando una classe Date con i campi day, month e year. Ovviamente l'user deve avere la possibilità di modificare quei valori, ma se fossero public allora potresti anche ritrovarti ad avere un 30 febbraio. Se non senti il bisogno di avere un controllo di validità, rendendo i campi public ti precludi la possibilità di aggiungerlo in futuro perché a quel punto romperesti la compatibilità con la versione precedente (eg. prima avevo un codice che usava myobj.year = 7; ora non funziona più). E, come già detto nel post precedente, è più difficile trovare bug: con get e set se c'è qualcosa di strano posso mettere una println dentro quei metodi per loggare in output tutte le modifiche a quel campo, se il campo è public non ho idea di dove avvengano le modifiche.

Per quanto riguarda l'esempio che vi ha fatto il prof, se l'ho capito bene, tu stai assumendo che l'user (l'altro programmatore che usa la tua classe) sia bravo e sappia cosa fare. Ma realisticamente sei tu che devi fare il possibile per rendere la tua classe unbreakable: se qualcosa è public, vuol dire che chi lo usa può farci quel che vuole senza rompere niente, altrimenti lo rendi private e sei tu che forzi (eg. ritornando delle copie, invece che i tuoi dati veri) l'user a fare la cosa che ti aspetti che faccia per non rompere niente. (con rompere intendo fare cose del tipo inserire il 30 febbraio)

Buona pasqua anche a te.
 
Stato
Discussione chiusa ad ulteriori risposte.