qualcuno puo' spiegarmi con un esempio pratico quando devo usare i metodi get set o no?
qualcuno puo' spiegarmi con un esempio pratico quando devo usare i metodi get set o no?
Nessuno ti vieta di fare ad esempio:Originariamente inviato da ifts2004
qualcuno puo' spiegarmi con un esempio pratico quando devo usare i metodi get set o no?
Ma così i campi sono pubblici e da qualunque altra classe si possono accedere direttamente. Ma se volessi ad esempio controllare ciò che viene assegnato? Ad esempio assicurarti che non venga assegnato un null a nome o un anno di nascita negativo?codice:public class Persona { public String nome; public int annoNascita; }
Non potresti, perché l'accesso ai campi è publico e potrebbe essere sparpagliato altrove.
La classe sopra pecca dal punto di vista della mancata "incapsulazione" dello stato.
Si usa quindi di norma mettere i campi come "private" e dei metodi setter e/o getter pubblici per accedere ai campi. Questo tra l'altro ha anche a che fare con le specifiche "JavaBean", di cui puoi leggere sul tutorial ufficiale: Trail: JavaBeans.
I JavaBeans descrivono principalmente delle convenzioni a livello di nomi e dichiarazioni.codice:public class Persona { private String nome; private int annoNascita; public void setNome(String nome) { if (nome == null) { throw new NullPointerException("nome non deve essere null"); } this.nome = nome; } public String getNome() { return nome; } public void setAnnoNascita(int annoNascita) { if (annoNascita < 0) { throw new IllegalArgumentException("annoNascita non deve essere negativo"); } this.annoNascita = annoNascita; } public int getAnnoNascita() { return annoNascita; } }
Se un oggetto ha una proprietà "pippo" (p minuscolo) allora ci dovrebbero essere dei metodi setPippo e getPippo (P maiuscolo) o isPippo se la proprietà è un boolean.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
1)ma quindi ogni volta che dichiaro un campo devo mettere un metodo get e set dell campo?
2)in alcuni programmi io ho visto che vengono messi solo i get e non i set..come mai?
3)se dovessi mettere get e set a tutti i campi anche se non richiesto, commetto qualche errore?
4)in OOP se devo richiamare una serie di campi in una classe B che estende una classe A cosa dovrei richiamarli con
super(nomeCampo) //se campo è unico
ma se i campi sono per esempio 5 o 6 come sarebbe?
super(campo1,campo2,...,campo6);
oppure semplicemente
super();
Che differenze ci sono?
Grazie ancora
Un buon principio di ingegneria del software consiste proprio nel dichiarare privati gli attributi di una classe e di prevedere, dove necessario, i metodi set e get per impostarli e per accedervi in lettura.1)ma quindi ogni volta che dichiaro un campo devo mettere un metodo get e set dell campo?
Per farti capire, ti faccio un esempio: supponiamo di avere la classe Time.
Così facendo, chi usa la classe potrebbe commettere degli errori logici!codice:public class Time { public int hour; public int minut; public int second; public Time() { this.hour = 0; this.minut = 0; this.second = 0; } }
Infatti, essendo gli attributi publici, potrei impostare valori che non rientrano nei range corretti, per esempio hour = 756, minut = -4364, second = 84...![]()
Invece se li rendo privati, posso prevedere dei metodi set e get che controllano il valore da impostare prima di procedere, ed eventualmente segnalano l'errore.
Questo dipende dalla classe che si scrive: una classe è come un dispositivo che offre certe funzionalità. Quando usi il videoregistratore, puoi mettere in play una videocassetta, riavvolgerla, sapere quando tempo rimanente è disponibile per registrare, ecc., ma sicuramente non conoscerai (per esempio) il numero di centimetri di nastro che sono passati dalla testina, perché questo è come se fosse un valore interno (una sorta di attributo privato), che poi viene convertito in tempo trascorso sul display del videoregistrare... E' come se ci fosse l'attributo privato centimetri_trascorsi e poi un metodo pubblico getTempoTrascorso() che al suo interno usa una formula per convertire centimetri in tempo e te li restituisce...2)in alcuni programmi io ho visto che vengono messi solo i get e non i set..come mai?
3)se dovessi mettere get e set a tutti i campi anche se non richiesto, commetto qualche errore?
Detto in altre parole: devono essere pubblici tutti i metodi che consentono di controllare correttamente il comportamento di una classe e che non permettano modifiche non previste dal progettista.![]()
Con super(nomeCampo), usato come prima istruzione del costruttore della classe B, non fai altro che chiamare il costruttore di A passandogli nomeCampo... quindi se i parametri da passare al costruttore di A sono di più, diciamo 5 o 6 per esempio, glieli devi passare tutti... La chiamata super(), senza parametri cioè, è possibile soltanto se la classe A ha un costruttore senza parametri.4)in OOP se devo richiamare una serie di campi in una classe B che estende una classe A cosa dovrei richiamarli con super(nomeCampo) //se campo è unico ma se i campi sono per esempio 5 o 6 come sarebbe? super(campo1,campo2,...,campo6); oppure semplicemente super(); Che differenze ci sono?