Visualizzazione dei risultati da 1 a 10 su 20

Discussione: utilizzo dei reference

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da newutente Visualizza il messaggio
    Per quanto riguarda i metodi set e get intendi ad esempio per settare (tramite il metodo set) il valore di una determinata variabile e per restituirlo (tramite il metodo get)?
    Sì, tipo:

    codice:
    private String cognome;
    
    public String getCognome() {
        return cognome;
    }
    
    public void setCognome(String cognome) {
        this.cognome = cognome;
    }

    Quote Originariamente inviata da newutente Visualizza il messaggio
    Io però continuo a non capire che senso ha utilizzare i reference. Per evitare di utilizzare nuovamente l'operatore dot se voglio che il mio oggetto punti ad un altro già creato e che quindi abbia lo stesso valore?
    In Java un reference è un valore. Solo che invece di essere un valore numerico che puoi manipolare, stampare ecc..., per il programmatore Java un reference è un qualcosa di molto "opaco". Non sai che valore ha, non sai nemmeno quanto un reference occupa in bit (dipende dalla piattaforma e dalla implementazione della JVM). Sai solo che o fa riferimento ad un oggetto, oppure è null ovvero non fa riferimento ad un oggetto.
    Più variabili di tipo reference possono avere lo stesso valore, appunto lo stesso reference, quindi faranno riferimento allo stesso oggetto. Tutto qui.

    Quote Originariamente inviata da newutente Visualizza il messaggio
    Solo una domanda. Se all'interno di un metodo vado a dichiarare una variabile locale questa sarà presa in considerazione all'interno della javadoc?
    No, javadoc non documenta il "comportamento" dei metodi, quindi non mostra nulla relativo al corpo del metodo.

    Per variabili di classe e di istanza sì, la documentazione javadoc è possibile.

    Quote Originariamente inviata da newutente Visualizza il messaggio
    ma quando mi dice "... che restituisca una stringa" si riferisce SOLO alla return? Io l'ho inteso come una stampa, oltre alla return, ma credo sia sbagliato a questo punto.
    Sì, o solo componi e restituisci una stringa, oppure fai un metodo con return void che stampa solo la stringa.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    grazie per i chiarimenti.

    Quote Originariamente inviata da andbin Visualizza il messaggio
    In Java un reference è un valore. Solo che invece di essere un valore numerico che puoi manipolare, stampare ecc..., per il programmatore Java un reference è un qualcosa di molto "opaco". Non sai che valore ha, non sai nemmeno quanto un reference occupa in bit (dipende dalla piattaforma e dalla implementazione della JVM). Sai solo che o fa riferimento ad un oggetto, oppure è null ovvero non fa riferimento ad un oggetto.
    Più variabili di tipo reference possono avere lo stesso valore, appunto lo stesso reference, quindi faranno riferimento allo stesso oggetto. Tutto qui.
    scusa se insisto ma continuo a non capire.
    Inserisco un esempio del capitolo del manuale relativo ai reference:
    codice:
    public class CiProvoConIReference
    {
            public void cambiaReference(Data data)
            {
                      data = new Data();
            }
    }
    codice:
    CiProvoConIReference ogg = new CiProvoConIReference();
    Data dataDiNascita = new Data();
    dataDiNascita.giorno = 14;
    dataDiNascita.mese = 4;
    dataDiNascita.anno = 2004;
    ogg.cambiaReference(dataDiNascita);
    System.out.println("Data di nascita = " + dataDiNascita.giorno + "-" + dataDiNascita.mese + "-" + dataDiNascita.anno);
    e l'output è questo:
    Data di nascita = 14-4-2004
    Quello che non capisco è:
    1) il metodo cambiaReference se non ho capito male si limita a dichiarare (prendendolo in input) un oggetto e ad istanziarlo. Ma allora come fa ad essere restituito quell'output se nel codice viene invocato il metodo dando in input sempre l'oggetto dataDiNascita? In teoria quell'oggetto a quel punto non dovrebbe essere sovrascritto e le variabili assumere valori nulli?

    2) in quale pezzo del codice si vede l'utilizzo dei reference? Faccio questa domanda perchè in un altro esempio si notava chiaramente l'utilizzo.
    L'esempio è questo:
    codice:
    Data unGiorno = new Data();
    Data unAltroGiorno = unGiorno;
    Quindi viene creato il primo oggetto (unGiorno) e poi viene dichiarato un altro oggetto (unAltroGiorno) che punterà all'oggetto creato prima.
    Nell'esempio di prima questo non lo vedo.

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da newutente Visualizza il messaggio
    scusa se insisto ma continuo a non capire.

    Quello che non capisco è:
    1) il metodo cambiaReference se non ho capito male si limita a dichiarare (prendendolo in input) un oggetto e ad istanziarlo. Ma allora come fa ad essere restituito quell'output se nel codice viene invocato il metodo dando in input sempre l'oggetto dataDiNascita? In teoria quell'oggetto a quel punto non dovrebbe essere sovrascritto e le variabili assumere valori nulli?
    Il "data" del metodo cambiaReference è un parametro ma sostanzialmente è una variabile "locale" al metodo. Ed è differente dalla variabile "dataDiNascita" che c'è nel chiamante.
    Ci sono quindi 2 variabili, una nel chiamante, l'altra nel metodo cambiaReference. All'inizio fanno riferimento allo stesso oggetto (perché il parametro ovviamente riceve una copia del valore). Se nel metodo assegni qualcosa al parametro, NON cambi il valore che ha la variabile "dataDiNascita" nel chiamante!

    Quote Originariamente inviata da newutente Visualizza il messaggio
    2) in quale pezzo del codice si vede l'utilizzo dei reference?
    Dovunque usi una variabile che ha tipo: array, classe, interfaccia, enum, annotazione ..... fai un uso dei reference.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    Vediamo se ho capito. Allora, relativamente a questo argomento ho fatto un esercizio. Questa è la traccia:
    Creare una classe Risultato che dichiari una sola variabile d'istanza di tipo float e di nome risultato. Aggiungere eventuali metodi e costruttori utili. Creare una classe CambiaRisultato con un metodo public di nome cambiaRisultato() che prende in input un oggetto di tipo risultato e ne modifica la variabile interna risultato sommandola con un altro valore. Creare una classe con un metodo main() di nome TestRisultato che stampi la variabile risultato di un oggetto di tipo Risultato, prima e dopo che questo oggetto sia passato in input al metodo cambiaRisultato() di un oggetto di tipo CambiaRisultato.
    la mia soluzione è questa:
    codice:
    public class TestRisultato
    {
        public static void main(String args[])
        {
            Risultato oggetto1 = new Risultato();
            oggetto1.stampa();
            CambiaRisultato oggetto2 = new CambiaRisultato();
            oggetto2.cambiaRisultato(oggetto1);
        }
    }
    codice:
    public class Risultato
    {
        float risultato;
        
        public float somma(float valore)
        {
            risultato = risultato + valore;
            return(risultato);
        }
        
        public void stampa()
        {
            System.out.println(risultato);
        }
    }
    codice:
    public class CambiaRisultato
    {
        public void cambiaRisultato(Risultato oggetto)
        {
            oggetto = new Risultato();
            oggetto.somma(10);
            oggetto.stampa();
        }    
    }
    E' corretto dire che le righe di codice che ho evidenziato sono esattamente quelle che permettono all'oggetto2 di puntare alla locazione di memoria di oggetto1? Inoltre direi che in particolar modo è proprio new Risultato() presente nel metodo cambiaRisultato ad "indicare" a oggetto2 dove deve puntare.
    Sono corrette queste considerazioni?

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da newutente Visualizza il messaggio
    E' corretto dire che le righe di codice che ho evidenziato sono esattamente quelle che permettono all'oggetto2 di puntare alla locazione di memoria di oggetto1? Inoltre direi che in particolar modo è proprio new Risultato() presente nel metodo cambiaRisultato ad "indicare" a oggetto2 dove deve puntare.
    Sono corrette queste considerazioni?
    Il metodo cambiaRisultato riceve il riferimento ad un oggetto Risultato. Questo oggetto NON lo stai utilizzando in alcun modo, perché al parametro assegni subito un altro (nuovo) oggetto Risultato.
    Quindi, onestamente, l'esempio che hai fatto ha poco/nessun senso.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    315
    Concettualmente mi è chiaro, il problema che ho in questo momento è la comprensione del codice.
    Mi sa che mi sto perdendo in un bicchier d'acqua.
    Vediamo se riesco a schemattizare le idee che ho in questo momento, seppur fatto in maniera "meccanica".
    Allora, se ho la necessità di far puntare due oggetti dello stesso tipo alla stessa locazione di memoria devo utilizzare istruzioni di questo tipo:
    codice:
    Data oggetto1 = new Data();
    Data oggetto2 = oggetto1;
    altrimenti, se ho la necessità di far puntare due oggetti di tipo diverso alla stessa locazione di memoria devo necessariamente utilizzare queste istruzioni:
    codice:
    ...
    Data2 oggetto2 = new Data2();
    Data oggetto1 = new Data();
    oggetto2.cambiaReference(oggetto1);
    ...
    codice:
    public class Data2
    {
            public void cambiaReference(Data data)
            {
                      data = new Data();
            }
    }
    E' corretto?
    Ultima modifica di newutente; 05-11-2014 a 19:01

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da newutente Visualizza il messaggio
    far puntare due oggetti di tipo diverso alla stessa locazione di memoria
    Questo che hai detto non ha praticamente senso.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da newutente Visualizza il messaggio
    Allora, se ho la necessità di far puntare due oggetti dello stesso tipo alla stessa locazione di memoria devo utilizzare istruzioni di questo tipo:
    codice:
    Data oggetto1 = new Data();
    Data oggetto2 = oggetto1;
    Sperando di chiarirti le idee: qui non hai due oggetti! Ne hai solo uno e dopo la seconda riga, hai due variabili reference con lo stesso valore, ovvero fanno riferimento entrambe allo stesso oggetto.

    Se successivamente assegni qualcos'altro (es. un altro nuovo oggetto Data) ad una delle due variabili, l'altra variabile non cambia e continua a fare riferimento all'oggetto Data creato alla prima riga.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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 © 2026 vBulletin Solutions, Inc. All rights reserved.