Non capisco il sottostante metodo

di il
3 risposte

Non capisco il sottostante metodo

Buona serata a tutti Voi. Come al solito ho bisogno di un aiuto. Un esempio di codice di una classe, nel libro di Claudio De Sio Java 8, riporta appunto nella nella classe un metodo. Non riesco a capirlo e quindi ad usarlo. Se c'è un' anima buona che me lo può spiegare lo ringrazio. Il codice è:

public class Dipendente {
    private String nome;
    private int anni;     //intendiamo età in anni
    public void setNome(String nome) {
        this.nome = nome;
    }
    public String getNome() {
        return nome;
    }
    public void setAnni(int anni) {
        this.anni = anni;
    }
    public int getAnni() {
        return anni;
    }
    // Metodo intero "getDifferenzaAnni()"

    public int getDifferenzaAnni (Dipendente altro){
        return (getAnni() - altro.getAnni()) ;
    }
}
Il metodo del quale non capisco il funzionamento è appunto " public int getDifferenzaAnni ( Dipendente altro){
return (getAnni() - altro.getAnni() );
} "
Grazie ancora per una eventuale delucidazione.

PS.: Vorrei ringraziare " migliorabile " e " andbin " per la spiegazione di un mio quesito del mese scorso " Incapsulamento : chiarimenti "
Con le Vostre pregiate spiegazioni avete tolto tanta nebbia dal mio cervello. Grazie
Saluti Marco

3 Risposte

  • Re: Non capisco il sottostante metodo

    Marco Mascardi ha scritto:


    Il metodo del quale non capisco il funzionamento è appunto " public int getDifferenzaAnni ( Dipendente altro)"
    Il metodo fa semplicemente la differenza tra gli anni di 2 dipendenti. Ci sono infatti 2 oggetti in gioco:
    - il "this" che è l'oggetto SU CUI è invocato il getDifferenzaAnni
    - l'oggetto referenziato dal parametro altro

    Quindi

    int diff = dip1.getDifferenzaAnni(dip2);

    Vuol dire che: invoca getDifferenzaAnni sul Dipendente dip1, prende gli anni di this (dip1), poi gli anni di altro (dip2), fa la differenza e la restituisce.
  • Re: Non capisco il sottostante metodo

    Buona nottata a tutti.
    Ringrazio " andbin " per la spiegazione riguardante il metodo da me specificato.
    Purtroppo, grazie alla mia inesperienza, ancora non ero arrivato a capire che come parametri di un metodo si possono utilizzare anche oggetti che poi verranno creati, ero convinto che per parametri di un metodo fossero utilizzabili solo tipi semplici e non oggetti.
    Ancora una volta mi hai tolto dei punti neri dalla mia testa. Grazie veramente. Mi sei stato di grande aiuto e son sicuro che ancora altre volte avrò bisogno del tuo aiuto. Ti prego non ti scocciare.
    Marco
  • Re: Non capisco il sottostante metodo

    Marco Mascardi ha scritto:


    ancora non ero arrivato a capire che come parametri di un metodo si possono utilizzare anche oggetti
    Quando "passi" un oggetto ad un metodo/costruttore, non passi l'oggetto in sé con tutti i suoi dati; passi solo il "reference" all'oggetto che alla fin fine è un valore finito, di un tot di bit.

    Dato:
    Dipendente dip1 = new Dipendente();
    Dipendente dip2 = new Dipendente();
    // .. setXXX su dip1/dip2
    
    int diff = dip1.getDifferenzaAnni(dip2);
    Quando getDifferenzaAnni viene eseguito, il parametro "altro" del metodo ha lo STESSO valore che è contenuto anche nella variabile dip2 del chiamante. Questo vuol dire che in quel momento hai 2 variabili reference che fanno riferimento allo stesso medesimo oggetto.

    Il reference, come ho detto, alla fin fine è un valore come un altro solo che .... per il programmatore Java è un valore molto "opaco", perché:
    1) Non sai a priori quanti bit occupa in memoria. Questo dipende dalla implementazione della JVM dipendentemente anche dal Sistema Operativo e dalla architettura hardware sottostante.
    2) Non lo puoi "stampare", non è come un int o long che ha un range di valori ben preciso e lo puoi visualizzare, utilizzare ecc..
    3) Non puoi usare la "aritmetica dei puntatori" (cosa che invece è possibile in C/C++).
    4) Non puoi creare reference che puntano chissà dove come ti pare.

    Per il programmatore Java, l'unica cosa che conta è che una variabile reference: o vale null (=nessun oggetto referenziato) oppure se non null vuol dire che fa riferimento ad un oggetto ben preciso.
    Stop, tutto qui.
Devi accedere o registrarti per scrivere nel forum
3 risposte