Visualizzazione dei risultati da 1 a 4 su 4

Discussione: metodoGet metodoSet

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    132

    metodoGet metodoSet

    qualcuno puo' spiegarmi con un esempio pratico quando devo usare i metodi get set o no?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: metodoGet metodoSet

    Originariamente inviato da ifts2004
    qualcuno puo' spiegarmi con un esempio pratico quando devo usare i metodi get set o no?
    Nessuno ti vieta di fare ad esempio:

    codice:
    public class Persona {
        public String nome;
        public int annoNascita;
    }
    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?
    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.

    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;
        }
    }
    I JavaBeans descrivono principalmente delle convenzioni a livello di nomi e dichiarazioni.
    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.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    132
    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

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    18
    1)ma quindi ogni volta che dichiaro un campo devo mettere un metodo get e set dell campo?
    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.
    Per farti capire, ti faccio un esempio: supponiamo di avere la classe Time.
    codice:
    public class Time {     public int hour;     public int minut;     public int second;      public Time() {         this.hour = 0;         this.minut = 0;         this.second = 0;     } }
    Così facendo, chi usa la classe potrebbe commettere degli errori logici!
    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.
    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?
    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...
    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.
    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?
    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.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.