Uso dei costruttori in Java

0

Mi piacerebbe sapere perché abbiamo bisogno di usare costruttori in esempi come questo: link . Penso che anche se non ci sono costruttori i programmi menzionati nel link potrebbero essere eseguiti. Il codice è:

    public class PairOfDice
    {
    public int die1;   // Number showing on the first die.
    public int die2;   // Number showing on the second die.
    public PairOfDice() {
            // Constructor.  Rolls the dice, so that they initially
            // show some random values.
        roll();  // Call the roll() method to roll the dice.
    }

    public PairOfDice(int val1, int val2) {
            // Constructor.  Creates a pair of dice that
            // are initially showing the values val1 and val2.
        die1 = val1;  // Assign specified values 
        die2 = val2;  //            to the instance variables.
    }

    public void roll() {
            // Roll the dice by setting each of the dice to be
            // a random number between 1 and 6.
        die1 = (int)(Math.random()*6) + 1;
        die2 = (int)(Math.random()*6) + 1;
    }

} // end class PairOfDice

I costruttori sono abituati a migliorare la leggibilità del programma? Qualcuno potrebbe aiutarmi.

    
posta justin 01.12.2014 - 13:28
fonte

2 risposte

4

I costruttori non vengono utilizzati per la leggibilità . In effetti, non posso pensare ad un esempio in cui un costruttore possa essere un utente per la leggibilità.

Il costruttore nell'esempio fornisce solo un valore iniziale ai membri della classe.

La classe ha due costruttori:

  • Un costruttore non riceve alcun parametro. Questi costruttori generano casualmente un valore per ogni membro chiamando il metodo roll() .
  • L'altro costruttore ti consente di impostare il valore iniziale dei membri della classe.

Hai ragione quando dici che la classe può funzionare senza costruttori , chiarendo che è implicito un costruttore vuoto (ereditato da Object ), quindi in realtà la classe avrà almeno un costruttore vuoto.

Ma ... come mostrano le seguenti alternative di no-constructor, si potrebbe presto arrivare alla conclusione che fornire costruttori rende la classe più utilizzabile :

Esempio senza costruttore 1.

Qui, per garantire che i membri abbiano uno stato valido (*), vengono inizializzati sulla dichiarazione con un valore di uno:

public class PairOfDice {
       public int die1 = 1;
       public int die2 = 1;    
       public void roll() {
          die1 = (int)(Math.random()*6) + 1;
          die2 = (int)(Math.random()*6) + 1;
       }    
} 

Esempio di Costruttore-meno 2.

Qui, oltre a ciò che è stato fatto in precedenza, sono stati forniti setter per modificare arbitrariamente il valore dei membri, ma sarebbe stato possibile modificare i valori dopo il roll, cosa non desiderabile.

public class PairOfDice {
    public int die1=1;
    public int die2=1;    
    public void setDieOneValue(int i){die1=i;};
    public void setDieTwoValue(int i){die2=i;};
    public void roll() {
        die1 = (int)(Math.random()*6) + 1;
        die2 = (int)(Math.random()*6) + 1;
    }    
} 

Esempio costruttivo 3

Qui i valori dei membri vengono generati casualmente durante l'inizializzazione. Nota il codice ripetuto.

public class PairOfDice {
    public int die1=(int)(Math.random()*6) + 1;
    public int die2=(int)(Math.random()*6) + 1;    
    public void roll() {
        die1 = (int)(Math.random()*6) + 1;
        die2 = (int)(Math.random()*6) + 1;
    }    
} 

(*) per stato valido intendo che i membri hanno valori che applicano le regole aziendali o errori di runtime. Ad esempio, i valori dei dadi dovrebbero essere compresi nell'intervallo 1..6, pertanto si dovrebbe garantire che non abbiano valore zero all'inizializzazione. Una regola aziendale è una regola imposta dal "business" . Il "bunisess" o il lancio di dadi dice che muore con facce da uno a sei (so che ci sono tipi di dadi ma per motivi di semplicità li lasceremo fuori). Avere un dado per lanciare un valore di 0 probabilmente farebbe fallire il programma. Questo è ciò che si intende per stato valido.

    
risposta data 01.12.2014 - 15:04
fonte
0

Lo scopo di un costruttore è di inizializzare i membri della classe in uno stato buono noto. Questa classe ha due membri: die1 e die2.

Alla classe gas sono stati dati due costruttori, uno dei quali inizializza i membri a numeri casuali, l'altro li inizializza ai valori forniti.

Non si tratta davvero di leggibilità. È per garantire che ogni istanza di quella classe sia sempre in uno stato valido dal momento in cui è stata costruita.

    
risposta data 01.12.2014 - 14:11
fonte

Leggi altre domande sui tag