//Autore: Giuliano Pellegrini Parisi
//
//Data: 4 dicembre 2008
//
//Classe: 4^Inf. Sirio
//
//Oggetto: Implementazione classe Veicolo
//
//Release: 0.1

package CircolazioneStradale;


class Veicolo
{

    private String NominativoGuidatore;
    private String ModelloVeicolo;
    private byte Velocita;
    private String Direzione;
    private final static String DIRITTO="diritto";
    private final static String SINISTRA="sinistra";
    private final static String DESTRA="destra";
    private final static String INIDIETRO="indietro";

    // Elenco dei costruttori

    public Veicolo()
    {
    }


    public Veicolo(String ModelloVeicolo)
    {
        this.ModelloVeicolo=ModelloVeicolo;
    }

    public Veicolo(String ModelloVeicolo,String NominativoGuidatore)
    {
        this(ModelloVeicolo);
        this.NominativoGuidatore=NominativoGuidatore;
    }

    // Elenco delle funzioni membro Getter/Setter

    public void set_NominativoGuidatore(String NominativoGuidatore)
    {
        this.NominativoGuidatore=NominativoGuidatore;
    }

    public String get_NominativoGuidatore()
    {
        return this.NominativoGuidatore;
    }

    public void set_ModelloVeicolo(String ModelloVeicolo)
    {
        this.ModelloVeicolo=ModelloVeicolo;
    }

    public String get_ModelloVeicolo()
    {
        return this.ModelloVeicolo;
    }
    
    public void set_Velocita(byte Velocita)
    {
        this.Velocita=Velocita;
    }

    public byte get_Velocita()
    {
        return this.Velocita;
    }


    public void set_Direzione(String Direzione)
    {
        this.Direzione=Direzione;
    }

    public String get_Direzione()
    {
        return this.Direzione;
    }


    // Le due funzioni sono chiamate POLIMORFICHE o OVERLOAD perchè hanno lo
    // stesso Nome ma il numero di parametri è diverso.
    // In base a questi verrà richiamata la funzioni membro corretta.

   public void muovi()
   {
       // (tipo) varibile => è l'operazione di CASTING

       this.set_Velocita((byte)1);

       System.out.println("Il veicolo " + this.get_ModelloVeicolo() + " guidato da " + this.get_NominativoGuidatore() + " si muove alla velocita di " + this.get_Velocita() + "Km/h");

   }


   public void muovi(byte Velocita)
   {
       this.set_Velocita(Velocita);

       System.out.println("Il veicolo " + this.get_ModelloVeicolo() + " guidato da " + this.get_NominativoGuidatore() + " si muove alla velocita di " + this.get_Velocita() + "Km/h");

   }


   public void ferma()
   {
       this.set_Velocita((byte)0);

       System.out.println("Il veicolo " + this.get_ModelloVeicolo() + " guidato da " + this.get_NominativoGuidatore() + " è fermo");

   }

   public void sinistra()
   {
     this.set_Direzione(this.SINISTRA);  

     System.out.println("Il veicolo " + this.get_ModelloVeicolo() + " guidato da " + this.get_NominativoGuidatore() + " sta svoltando a " + this.get_Direzione());
   }

   public void destra()
   {
     this.set_Direzione(this.DESTRA);

     System.out.println("Il veicolo " + this.get_ModelloVeicolo() + " guidato da " + this.get_NominativoGuidatore() + " sta svoltando a " + this.get_Direzione());
   }

   public void diritto()
   {
     this.set_Direzione(this.DIRITTO);

     System.out.println("Il veicolo " + this.get_ModelloVeicolo() + " guidato da " + this.get_NominativoGuidatore() + " procede " + this.get_Direzione());
   }

   public void retromarcia()
   {
     this.set_Direzione(this.INIDIETRO);

     System.out.println("Il veicolo " + this.get_ModelloVeicolo() + " guidato da " + this.get_NominativoGuidatore() + " sta facendo " + this.get_Direzione());
   }

}
