package esprbooleane;

public class EspressioneVariabile extends EspressioneBooleana {

  private String variabile;

// il testo non specifica la presenza di un costruttore, ma
// e' chiaro che deve essere possibile creare un oggetto;
// dal momento che non ha senso una varibile senza nome, si
// lancia una eccezione se si passa null

  public EspressioneVariabile(String v) {
    if(v==null)
      throw new RuntimeException("Tentativo creazione variabile con nome null");

    this.variabile=v;
  }

  public String getNome() {
    return this.variabile;
  }

// non si definisce il metodo set, rendendo cosi' gli
// oggetti non modificabili

// non e' richiesto un metodo toString, ma si mette comunque
// perche' e' comodo

  public String toString() {
    return this.variabile;
  }

// equals; si usa il metodo stessaClasse ereditato

  public boolean equals(Object o) {
    if(!this.stessaClasse(o))
      return false;

    EspressioneVariabile e=(EspressioneVariabile) o;

// il campo variabile non puo' valere null, quindi non c'e'
// bisogno di fare il controllo prima di invocare equals

    return this.variabile.equals(e.variabile);
  }

// quando si modifica equals va modificato anche hashCode

  public int hashCode() {
    return this.variabile.hashCode();
  }

// il clone non serve: dato che String non e' clonabile,
// l'unica cosa che si puo' fare e' clonare l'oggetto
// EspressioneVariabile; questo viene gia' fatto dal metodo
// clone ereditato dalla sovraclasse

}
