back to top

I costruttori in Java

I costruttori in Java

A questo punto della guida abbiamo dato gli strumenti essenziali al lettore per poter scrivere delle applicazioni di elementare complessità. Torniamo adesso ad occuparci della programmazione ad oggetti definendo il concetto di metodo costruttore.

Un costruttore di una classe, prima di tutto, viene definito con lo stesso nome della classe e una caratteristica che lo differenzia da un normale metodo è il fatto di non avere un tipo di ritorno. Il metodo costruttore viene chiamato, solo ed esclusivamente, quando viene istanziata la classe, quindi si accede al costruttore una sola volta per ogni istanza della classe. Vediamo adesso un esempio chiarificatore per quanto riguarda la costruzione di un costruttore rifacendosi alla classe di esempio "OperazioniSuNumeri":

Pubblicità
public class OperazioniSuNumeri {
  
  // costruttore
  public OperazioniSuNumeri() {
    System.out.println("Ho istanziato una classe OperazioniSuNumeri");
  }
  
  public int sottrazione(int x, int y) { 
    // sottrazione
  }
    
  public String comparazione(int x, int y) {   
    // comparazione     
  }
}

Come si vede nel codice di esempio, il costruttore scritto rispetta le caratteristiche sopra elencate, ovvero non ha nessun tipo di ritorno e ha lo stesso nome della classe.

Quando istanzieremo la classe "OperazioniSuNumeri" con il seguente codice:

OperazioniSuNumeri numero;
numero = new OperazioniSuNumeri();

di fatto chiameremo in maniera automatica il costruttore della classe e quindi avremo, come output, la seguente stampa a video:

Ho istanziato una classe OperazioniSuNumeri

Nel nostro esempio abbiamo inserito il costruttore della classe come primo metodo, ma ciò non è rilevante in quanto al momento della creazione dell’istanza dell’oggetto, automaticamente verrà richiamato il costruttore, anche se è l’ultimo metodo inserito nella classe. Da ciò si deduce che Java non analizza le classi in maniera sequenziale. È buona norma comunque strutturare la classe seguendo la lista sottostante:

  1. Le variabili di istanza ed eventuali costanti
  2. Il costruttore
  3. Tutti gli altri metodi della classe

Precisiamo che nelle lezioni precedenti istanziavamo oggetti senza che nella classe fosse presente un costruttore. Commettevamo un errore? Assolutamente no, Java ha la particolarità che all’atto di compilazione, se non è presente un costruttore all’interno della classe, viene aggiunto automaticamente un costruttore di default che consentirà di istanziare l’oggetto in maniera corretta, ma non compirà nessuna operazione dato che il corpo del metodo di costruttore di default è vuoto.

A questo punto potrebbe sorgere spontanea la domanda: a cosa serve il metodo costruttore? Ipotizziamo di avere la nostra classe "OperazioniSuNumeri" che, oltre ai metodi scritti negli esempi precedenti, implementi la somma, la moltiplicazione, la divisione e molte altre funzionalità. Fino a questo momento, senza il costruttore, passavamo, sia per il metodo "sottrazione" che per il metodo "comparazione", i valori al momento della chiamata del metodo. Nel caso volessimo effettuare un’analisi completa su due numeri (richiamando per esempio un metodo per la somma, il prodotto, la sottrazione, la divisione e la comparazione) senza il costruttore, creeremmo per ogni chiamata a funzione due variabili per immagazzinare i valori dei numeri "x" e "y". In totale, verrebbero allocate dieci variabili con contenuto identico per poter chiamare le cinque funzioni.

Utilizzando il metodo costruttore, sarà possibile allocare le due variabili una sola volta, e i vari metodi chiamati leggeranno semplicemente il contenuto delle variabili d’istanza senza costruirne una copia. Vediamo dunque il codice di esempio:

public class OperazioniSuNumeri {
  
  public int numeroX;
  public int numeroY;
    
  public OperazioniSuNumeri(int x, int y) {   
    numeroX = x;
    numeroY = y;
  }
    
  public int sottrazione() {
    return numeroX - numeroY;
  }
    
  public int somma() {
    return numeroX + numeroY;
  }
    
  // gli altri metodi con la stessa struttura
}

Il codice per istanziare l’oggetto e la chiamata dei metodi cambierà nel modo seguente:

public class Implementazione {
  public static void main(String[] args) {
    
    // Istanza della classe OperazioniSuNumeri        
    OperazioniSuNumeri operazioni = new OperazioniSuNumeri(10, 2);
    
    int sottrazione = operazioni.sottrazione(); // richiamo il metodo sottrazione
    int somma = operazioni.somma(); // richiamo il metodo somma
        
    // stampo a video i risultati ottenuti
    System.out.println("Somma: " + somma); 
    System.out.println("Sottrazione: " + sottrazione);       
  }  
}
Pubblicità
Articolo precedente
Articolo successivo