Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    residenza
    Firenze
    Messaggi
    260

    Chiarimento su tipi di riferimento

    Sto facendo alcuni esercizi su Java dato che la mia università usa questo come linguaggio principale.
    Sto seguendo un testo (non so se si possono citare i nomi dei testi) e studiando gli esempi che sono riportati sui capitoli mi sono imbattuto in questo esercizio dove c'è un tipo di riferimento.
    Ora non capisco bene una cosa, vi posto la parte di codice in questione
    codice:
    public class NomeClasse{
    
         private Carta mazzo[]: //array di oggetti Carta (nome di un altra classe)
              .
              .
              .
              .
         public NomeClasse(){  //costruttore
              mazzo = new Carta[lunghezza array];
                   .
                   .
              for(int cont=0; cont<mazzo.length; cont++)
                   mazzo[cont]=new Carta (valori[operazione], seme[operazione]);
              .
              .
         }
    }
    La mia domanda è.
    Ad ogni iterazione del ciclo for viene creato un nuovo riferimento alla classe Carta?
    Quindi se la lunghezza dell'Array è di 52 indici allora verranno creati 52 riferimenti, al'interno della memoria, che si riferiscono (scusate il gioco di parole) alla classe Carta?

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Certo, i testi possono essere citati.

    Bhe non proprio. Una cosa molto importante da capire subito è che un riferimento non è un oggetto. Un riferimento non occupa spazio in memoria.

    codice:
    mazzo = new Carta[lunghezza array];
    quando questa riga viene eseguita, stai allocando "lunghezza array" di memoria. Supponiamo che al posto di "lunghezza array" ci sia 52, stai allocando memoria per 52 elementi. Questo però non significa che mazzo contenga qualcosa... infatti è vuoto!

    Ad ogni iterazione non crei un riferimento quindi, ma crei un oggetto! Quindi crei un "qualcosa" che occupa memoria.

    codice:
    Carta carta; // Questo è un riferimento a Carta; non punta a nulla
    
    // Qui stai creando un oggetto di tipo Carta
    carta = new Carta([seme]);
    se utilizzi carta prima di creare l'oggetto (quindi prima di usare l'operatore "new") otterrai un errore.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    residenza
    Firenze
    Messaggi
    260
    Certo, i testi possono essere citati
    Grazie per l'informazione.

    Ah ecco, infatti quando ho visto il tipo di dato che non aveva il classico nominativo tipo int, double, long ecc. ho spalancato gli occhi perchè non capivo come il compilatore potesse capire una parola del genere. Poi però da quanto ho capito i tipi di riferimento sono dei tipi di dato "personalizzati". Mi sbaglio?

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Si, è il tipo di dato definito dal programmatore. String ad esempio è un oggetto, non un tipo semplice (chiamati anche "tipi primitivi") come int, double etc.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2011
    residenza
    Firenze
    Messaggi
    260
    Quindi nel mio caso il tipo di dato con cui ho dichiarato l'array mazzo era un riferimento ad una classe (Carta nel mio caso) e in ogni indice dell'array dovevo inserire dei dati che corrispondevano esattamente al tipo di dato e alla quantità dei parametri della classe Carta. Ho capito la lezione?

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Originariamente inviato da Fix87
    Quindi nel mio caso il tipo di dato con cui ho dichiarato l'array mazzo era un riferimento ad una classe (Carta nel mio caso) e in ogni indice dell'array dovevo inserire dei dati che corrispondevano esattamente al tipo di dato e alla quantità dei parametri della classe Carta. Ho capito la lezione?
    Precisamente il tipo di dato (ovvero cosa contiene il riferimento o la variabile, nel caso dei tipi int, double...) è Carta. Ciò che crei è il riferimento; questo se ancora non è istanziato (ovvero se non hai creato un oggetto tramite l'operatore new). Se intendevi questo, è corretto.
    Si, ogni indice di mazzo deve contenere un oggetto di tipo Carta, non può essere altrimenti. Carta può avere uno o più costruttori, ma l'importante è che sia di tipo Carta.

    codice:
    mazzo[0] = new Carta("A");
    mazzo[1] = new Carta(""B", "rosso");
    sarebbero entrambi validi, poichè il tipo di dato è comunque Carta.

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2011
    residenza
    Firenze
    Messaggi
    260
    Cioè io quello che non capivo era praticamente questo:
    codice:
    for(int a=0;a<lunghezza_array.length;a++)
         mazzo[cont]=new Carta(valori[operazione], semi[operazioni]);
    Quindi im fin dei conti creo un array generale di tipo carta, e in più in ogni indice dell'array creo un nuovo oggetto Carta!

    Alla fine quello che mi sfuggiva era la creazione di un dato o di un array con un tipo riferimento.

    Ovviamente se creo un tipo riferimento mi devo attenere ai parametri che richiede in ingresso il costruttore/i costruttori su cui mi riferisco. Esatto?

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Originariamente inviato da Fix87
    Cioè io quello che non capivo era praticamente questo:
    codice:
    for(int a=0;a<lunghezza_array.length;a++)
         mazzo[cont]=new Carta(valori[operazione], semi[operazioni]);
    Quindi im fin dei conti creo un array generale di tipo carta, e in più in ogni indice dell'array creo un nuovo oggetto Carta!

    Alla fine quello che mi sfuggiva era la creazione di un dato o di un array con un tipo riferimento.

    Ovviamente se creo un tipo riferimento mi devo attenere ai parametri che richiede in ingresso il costruttore/i costruttori su cui mi riferisco. Esatto?
    Si, dici in pratica di allocare N elementi di tipo Carta. E' un normale array insomma.

    Si esatto, dipende dai parametri che richiede il Costruttore.

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2011
    residenza
    Firenze
    Messaggi
    260
    Ok ti ringrazio molto sei stato gentilissimo, soprattutto per l'orario
    Buona domenica

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Prego!

    Buona domenica anche a te!

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.