Delucidazioni su Esercizio Java

di il
5 risposte

Delucidazioni su Esercizio Java

Buongiorno, mi sono appena inscritto al forum, alle superiori ho frequentato un indirizzo programmatori dove ho imparato a scrivere applicazioni con vb, ora a lavoro ho creato e continuo a sviluppare diverse macro in Calc e avendo dei giorni liberi causa #iorestoacasa ho del tempo libero per cui volevo approfondire meglio gli studi su java, ho gia iniziato da qualche settimana leggendo Java 5 di Claudio De Sio Cesari. Ho dei dubbi su un esercizio, probabilmente vb mi ha portato a ragionare in modo diverso. Posto il codice con dei commenti che ho messo io, volevo sapere se i commenti sono giusti e la risposta ad alcune domande poste nei commenti. Grazie per l'attenzione.

public class NumeroIntero //crea la classe NumeroIntero
{
    public int numeroIntero; //definisce la variabile intera
    public NumeroIntero(int n)
    {
        numeroIntero = n;
    }
    public void stampaNumero() //metodo che visualizzera il valore della variabile
        {
            System.out.println(numeroIntero);
        }
}   

//riga 6: numeroIntero = n? n a cosa è uguale? a me sarebbe sembrato più logico il contrario
// e ovviamente nella riga 10 al posto di numeroIntero nelle parentesi avrei messo n.

public class Principale //crea una classe che contiene il metodo main
{
    public static void main(String args[]) //metodo main
    {
        NumeroIntero uno = new NumeroIntero(1); //crea l'oggetto uno e gli da 1 come valore
        //uno.numeroIntero = 1
        NumeroIntero due = new NumeroIntero(2); //crea l'oggetto due e gli da 2 come valore
        //due.numeroIntero = 2
        uno.stampaNumero(); //richiama il metodo che visualizzerà il valore della variabile numeroIntero
        due.stampaNumero(); //richiama il metodo che visualizzerà il valore della variabile numeroIntero
    }
}
//se ho instanziato due oggetti uno e due, per quale motivo il valore glielo devo mettere nelle parentesi
//e non darglielo nelle righe 6 e 8? Fatto così è come se gli oggetti contenessero un valore e non una variabile.

5 Risposte

  • Re: Delucidazioni su Esercizio Java

    Maios ha scritto:


    riga 6: numeroIntero = n? n a cosa è uguale? a me sarebbe sembrato più logico il contrario
    e ovviamente nella riga 10 al posto di numeroIntero nelle parentesi avrei messo n.
    La classe è strutturalmente corretta.

    Quel public NumeroIntero(int n) è un costruttore. Ha un parametro che riceve il valore. E nel corpo semplicemente lo assegna alla variabile "di istanza" (che "dura" per tutta la vita dell'oggetto). Nel metodo stampaNumero è visibile solo la variabile numeroIntero, NON n (che esiste solo nel costruttore!).

    Maios ha scritto:


    se ho instanziato due oggetti uno e due, per quale motivo il valore glielo devo mettere nelle parentesi
    Perché lo passi al costruttore che lo assegna alla variabile di istanza. Quindi ogni oggetto mantiene al suo interno il SUO proprio valore. Questo è il concetto della programmazione ad oggetti.

    Maios ha scritto:


    e non darglielo nelle righe 6 e 8? Fatto così è come se gli oggetti contenessero un valore e non una variabile.
    Infatti gli oggetti (salvo casi particolari) HANNO uno "stato" che è composto dalle variabili di istanza.

    Se passassi direttamente il valore a stampaNumero() sarebbe un design differente e gli oggetti NumeroIntero avrebbero poco/meno senso.
  • Re: Delucidazioni su Esercizio Java

    Intanto ti ringrazio, ho dovuto leggere più volte per cercare di capire, diciamo che è più complicato che se avessi dovuto scrivere una cosa del genere con vb, ma sicuramente avrà più potenzialità di sviluppo.
    Quindi
    Ha un parametro che riceve il valore.
    il parametro è n se non ho capito male.
    Appena creo l'oggetto uno dandogli il valore, quando richiamo il metodo stampaNumero quel valore lo prende n?
  • Re: Delucidazioni su Esercizio Java

    Maios ha scritto:


    ma sicuramente avrà più potenzialità di sviluppo.
    Sì. E molto probabilmente devi ancora comprendere bene la "programmazione ad oggetti", se sei abituato finora alla programmazione "procedurale".

    Maios ha scritto:


    il parametro è n se non ho capito male.
    Appena creo l'oggetto uno dandogli il valore, quando richiamo il metodo stampaNumero quel valore lo prende n?
    Quando fai new NumeroIntero(2);

    a) viene invocato il costruttore di NumeroIntero
    b) il costruttore riceve nel parametro il valore passato in argomento (--> n=2)
    c) il codice del costruttore assegna n alla variabile di istanza (--> numeroIntero=2)

    Ma come ho detto prima, numeroIntero è "di istanza", APPARTIENE a quello specifico oggetto. Quindi esiste per tutta la vita dell'oggetto. Il parametro n è poi sostanzialmente solo una variabile LOCALE nel costruttore. Non esiste altrove.
    Anche se non hai ancora molta conoscenza della programmazione ad oggetti, dovresti comunque avere familiarità con lo scope (ambito di visibilità) di una variabile. Se una variabile è locale in una funzione, NON è visibile al di fuori.
  • Re: Delucidazioni su Esercizio Java

    Ottimo, grazie. Avresti qualche altro materiali da consigliarmi? Magari gratuito visto che approccio solo per hobby.
  • Re: Delucidazioni su Esercizio Java

    Maios ha scritto:


    Avresti qualche altro materiali da consigliarmi? Magari gratuito visto che approccio solo per hobby.
    Al momento non saprei indirizzarti ma se cerchi in rete ..... trovi ...
Devi accedere o registrarti per scrivere nel forum
5 risposte