[cooperativefsm] Re: r12 committed - Vi carico quello che ho fatto fino a adesso, ovvero buona parte delle ...

  • From: Alessandro Ferrari <alessandroferrari87@xxxxxxxxx>
  • To: cooperativefsm@xxxxxxxxxxxxx
  • Date: Tue, 13 Oct 2009 17:27:44 +0200

Il 13 ottobre 2009 16.53,  <codesite-noreply@xxxxxxxxxx> ha scritto:
> Revision: 12
> Author: svanerac@xxxxxxxxx
> Date: Tue Oct 13 07:53:08 2009
> Log: Vi carico quello che ho fatto fino a adesso, ovvero buona parte delle
> classe Input e InputTast.
> Piccolo particolare: non funziona la lettura da tastiera, intesa proprio
> come getChar..e non capisco il motivo, anche perchè sto usando la classe
> servizio scaricata dal sito di baroni che mi sembra giusta!?!probabilmente è
> una cazzata ma non la trovo, quindi provate a vedere se riuscite a
> risolverla voi!
>
> Il resto "dovrebbe" funzionare, mancano ancora i controlli per la
> correttezza dei dati inseriti (ad es: una relazione riguarda due transizioni
> che effettivamente esistono..). Questi probabilmente vanno fatti in jml
> sotto forma di pre e post condizioni. Prima di aggiungerli volevo comunque
> vedere se il resto funzionava ( cioè immettendo dei dati corretti).
> Fate sapere...
> http://code.google.com/p/cooperativefsm/source/detail?r=12
>
> Modified:
>  /trunk/cooperativefsm/src/cooperativefsm/Fsm.java
>  /trunk/cooperativefsm/src/cooperativefsm/Input.java
>  /trunk/cooperativefsm/src/cooperativefsm/InputTast.java
>  /trunk/cooperativefsm/src/cooperativefsm/InputXML.java
>  /trunk/cooperativefsm/src/cooperativefsm/Main.java
>  /trunk/cooperativefsm/src/cooperativefsm/MyMenu.java
>  /trunk/cooperativefsm/src/cooperativefsm/Servizio.java
>  /trunk/cooperativefsm/src/cooperativefsm/Simulazione.java
>  /trunk/cooperativefsm/src/cooperativefsm/Stato.java
>  /trunk/cooperativefsm/src/cooperativefsm/StatoCorrente.java
>  /trunk/cooperativefsm/src/cooperativefsm/Transizione.java
>
> =======================================
> --- /trunk/cooperativefsm/src/cooperativefsm/Fsm.java   Mon Oct  5 14:37:12
> 2009
> +++ /trunk/cooperativefsm/src/cooperativefsm/Fsm.java   Tue Oct 13 07:53:08
> 2009
> @@ -11,19 +11,40 @@
>
>     private String id;
>     private int numStati;
> -    private Vector<Stato> stati;
> +    private Vector<Stato>       stati;
>     private Vector<Transizione> transizioni;
>     private int numRelazioniSincroneTransizioniUscenti;
>
>
> -
> -    public Fsm (String _id, Vector<Stato> _stati,Vector<Transizione>
> _transizioni) {    // costruttore di una macchina a stati finiti
> -
> -        id=_id;
> -        stati = _stati;
> +    /**
> +     * Costruttore di una fsm
> +     */
> +
> +    public Fsm (String _id)
> +    {
> +        id          = _id;
> +        stati       = new Vector<Stato> ();
> +        transizioni = new Vector<Transizione> ();
> +    }
> +
> +    /** Costruttore (con argomenti in più...) di una macchina a stati
> finiti ... non so se servirà!?!
> +     *
> +     * @param _id
> +     * @param _stati
> +     * @param _transizioni
> +     */
> +
> +    public Fsm (String _id, Vector<Stato> _stati,Vector<Transizione>
> _transizioni) {
> +
> +        id          = _id;
> +        stati       = _stati;
>         transizioni = _transizioni;
>
>      }
> +
> +     public String getId(){
> +     return id;
> +     }
>
>     public void addStato(Stato s) {         //aggiunge uno stato al vector
> listaStati
>         stati.add(s);
> @@ -33,18 +54,32 @@
>         return stati;
>     }
>
> -    public Stato getStato (int indice)  {
> +    public Stato getStatoAt (int indice)  {
>
>         Stato s = (Stato) stati.get(indice);
>         return s;
>     }
>
> -    public Vector<Transizione> getTransizioni()
> -    {
> +
> +
> +
> +    public void addTrans (Transizione t)    {
> +        transizioni.add(t);
> +    }
> +
> +    public Vector<Transizione> getTransizioni()    {
>         return transizioni;
>     }
>
> -
> +    public Transizione getTransizioneAt (int indice)    {
> +        Transizione t = transizioni.get(indice);
> +        return t;
> +    }
> +
> +
> +
> +
> +
>      public void setTransizioniUscentiStati(){
>          //TODO
>      }
> =======================================
> --- /trunk/cooperativefsm/src/cooperativefsm/Input.java Mon Oct  5 14:37:12
> 2009
> +++ /trunk/cooperativefsm/src/cooperativefsm/Input.java Tue Oct 13 07:53:08
> 2009
> @@ -8,117 +8,161 @@
>  import java.lang.*;
>
>
> -public class Input {
> -
> -    //Attributi private, metodi public, information hiding ;), per
> accederci
> -    //utilizza i get e i set
> -
> -    //Ricordati il specificatore del tipo di collection per i vector,
> -    //tipo Vector<nome_classe>
> +public abstract class  Input {
> +
> +
>
>     //Per i nomi degli attributi fai riferimento ai diagrammi uml che ho
> fatto
>
> -    //Questi attributi sono in realtà variabili di appoggio che servono ai
> metodi (astatti)
> -    private Vector<Stato> listaS;
> -    private Vector<Transizione> listaT;
> +    //Questi attributi sono in realtà variabili di appoggio che servono ai
> metodi (astatti) ... SERVONO????
> +    //private Vector<Stato>       listaS;
> +    //private Vector<Transizione> listaT;
> +
>     //La documentazione su come deve essere  relazioniTransizioni è presente
> nelle mail
>     //Se non è ancora chiara contattami
> +
>     private Simulazione.Relazione relazioniTransizioni[][]; //Relazione è un
> tipo enum che definisce i tipi di relazione
> -    private Vector<Fsm> listaFSM;
> +    private Vector<Fsm> listaFsm;
>
>
> -    /*
> -     Metodo che inizializza una vera e propria sessione di simulazione
> -
> +
> +    /**
> +     * Metodo che inizializza una vera e propria sessione di simulazione
> +     * La chiamata è comune sia per istanze di IputTast sia di InputXML,
> +     * mentre i metodi che devono specializzarsi sono sovrascritti nelle
> sottoclassi
>      */
> +
>     public Simulazione leggiSimulazione()
> -            {
> -             int numFsm=2;
> -             int i = 0;
> -             for(i=0; i<numFsm; i++)
> -             {
> -             Fsm fsm = creaFsm (Integer.toString(i));
> -             listaFSM.add(fsm);
> -             }
> -
> -             //Lettura stato iniziale
> -             StatoCorrente statoIniziale = leggiStatoIniziale();
> -
> -             //Lettura relazioni
> -             relazioniTransizioni = leggiRelazioni();
> -
> -             //Controllo dei vincoli di correttezza della simulazione
> -             if(!simulazioneCorretta() )
> -             {
> -                   //codice per comunicare l'errore all'utente
> -             }
> -
> -                 //L'interfaccia tra io e core è data da questa riga, è
> l'unico punto di incontro
> -                 return (new Simulazione(listaFSM, relazioniTransizioni,
> statoIniziale));
> -            }
> +    {
> +         this.inizializzaListaFsm();
> +
> +
> +         for (int i = 0; i < listaFsm.size(); i++)      //si inizializza
> ogni istanza di fsm nella listaFsm
> +         {                                              //con i suoi stati
> e le sue transizioni
> +            Fsm appoggio = listaFsm.elementAt(i);
> +
> +            int numStati = this.leggiNumStati();        //inserimento degli
> stati
> +            this.inizializzaStati(appoggio, numStati);
> +
> +            this.inizializzaTrans(appoggio);            //inserimento delle
> transizioni
> +         }
> +
> +         StatoCorrente statoIniziale = leggiStatoIniziale(listaFsm);
>  //Lettura stato iniziale
> +         relazioniTransizioni = leggiNumRelazioni();
>  //Lettura relazioni
> +
> +         while (ciSonoRelaz())
> +             imposta(relazioniTransizioni);
> +
> +                     if(!simulazioneCorretta() )        //Controllo dei
> vincoli di correttezza della simulazione
> +                     {
> +                           System.out.println("I dati inseriti non sono
> validi!");;
> +                     }
> +
> +
> +         return (new Simulazione(listaFsm, relazioniTransizioni,
> statoIniziale));       //L'interfaccia tra io e core è data da questa riga,
> è l'unico punto di incontro
> +   }
>
>
>
> -
> -    /*
> -     *Metodo che controlla la correttezza delle informazione relative alla
> simulazione
> -     * che sono state introdotte/lette
> -     *
> -     */
> -    public boolean simulazioneCorretta ()
> -        {
> -            boolean correct = true;
> -
> -            //////
> -
> -            return correct;
> -        }
> -
> -
> -
> -
> -
> +    //questi metodi in teoria saranno mai invocati perchè non sono mai
> create istanze della clase Input;
> +    //saranno le loro versioni sovrascritte nelle varie sottoclassi a
> funzionare
> +
> +    public abstract int leggiNumStati();
> +
> +    public abstract boolean ciSonoTrans();
> +
> +    public abstract Stato leggiStato(String a);
> +
> +       /**
> +      * Metodo che imposta lo stato iniziale e imposta lo stato corrente
> +      *  lo stato deve € al vettore macch1.listaStati --->controllo!
> +      * @return
> +      */
> +
> +     public abstract StatoCorrente leggiStatoIniziale(Vector<Fsm> list);
> +
> +     public abstract void imposta(Simulazione.Relazione[][] relaz);
> +
> +     public abstract boolean ciSonoRelaz();
> +
> +
> +    //fine metodi abstract
> +
> +
> +
> +    public Vector<Fsm> getListaFsm ()
> +    {
> +        return listaFsm;
> +    }
> +
> +
> +
> +
> +    /**
> +     * Metodo indipendente dal tipo di input, verrà chiamato da entrambe le
> sottoclassi.
> +     * Definisce e istanzia un certo numero (2 in questo caso) di Fsm per
> la simulazione
> +     */
> +
> +    public void inizializzaListaFsm()
> +    {
> +        int numFsm = 2;
> +
> +        for(int i = 0; i < numFsm; i++)
> +             {
> +             Fsm fsm = creaFsm (Integer.toString(i));
> +             listaFsm.add(fsm);
> +             }
> +    }
> +
> +
> +
>     /**
> -    * Metodo che crea la lista degli stati di una fsm (che però non esiste
> ancora)
> -    * La lettura del numero di stati può essere effettuata da tastiera o da
> file xml
> -    *
> +    * Metodo che crea la lista degli stati di una fsm
> +    *
>     * @param Serve per identificare la fsm nel file xml, oppure è il nome
> assegnatole da tastiera
> +    * @param Numero di stati
>     */
> -     public void leggiStati (String nomeFsm)
> -        {
> -            listaS = new Vector();
> -            /*for (int i=0; i<numStati; i++)
> +
> +     public void inizializzaStati (Fsm x, int numStat)
> +     {
> +            for (int i = 0; i < numStat; i++)
>             {
>             Stato s = new Stato (i);
> -            macch1.addStato(s);
> -            }
> -            */
> -
> -        }
> +            x.addStato(s);
> +            }
> +     }
>
>
>
>
>
>      /**
> -    * Metodo che crea la lista delle transizioni di una fsm (che però non
> esiste ancora)
> -    * La lettura delle transizioni può essere effettuata da tastiera o da
> file xml
> -    *
> -    * @param Serve per identificare la fsm nel file xml, oppure è il nome
> assegnatole da tastiera
> +      * Metodo che crea la lista delle transizioni di una fsm
> +      *
> +      * @param La Fsm a cui va aggiunta una transizione
> +      * @param Stato sorgente della transizione
> +      * @param Stato destinazione della transizione
>     */
> -     public void leggiTransizioni (String nomeFsm)
> -        {
> -            listaT = new Vector();
> -            boolean ciSonoTrans= true;
> -
> -            while (ciSonoTrans)
> -            {
> -                //Stato sorg,dest;
> -                //Transizione t = new Transizione(sorg,dest);
> -                //macch1.listaTrans.add(t);
> -            }
> -
> -        }
> +     public void inizializzaTrans (Fsm x)
> +     {
> +
> +
> +         boolean continua = this.ciSonoTrans();   //metodo che verrà
> sovrascritto dalle sottoclassi
> +
> +            while (continua)
> +            {
> +                Stato sorgente = this.leggiStato("sorgente");
> +                Stato destinazione = this.leggiStato("destinazione");
> +                //Controllo per verificare che gli stati € alla fsm [...]
>     <--------------TODO------------------!!!!!
> +
> +                Transizione t = new Transizione (sorgente,destinazione);
> +                x.addTrans(t);
> +
> +                continua = this.ciSonoTrans();
> +            }//while
> +
> +
> +     }
>
>
>
> @@ -129,46 +173,54 @@
>       * @return la nuova istanza di Fsm
>       */
>
> -     public Fsm creaFsm (String nome){
> -        Fsm macchina= new Fsm ( nome , listaS, listaT);
> -
> +     public Fsm creaFsm (String nome)
> +     {
> +        Fsm macchina= new Fsm ( nome );
>         return macchina;
>      }
>
>
>
>
> -
> -        //ottiene dal parser lo stato iniziale e imposta lo stato corrente
> -        //lo stato deve € al vettore macch1.listaStati --->controllo!
> -        public StatoCorrente leggiStatoIniziale()
> -            {
> -            StatoCorrente s = new StatoCorrente ();
> -
> -            //s.sCorrenteFsm1 = ;
> -            //s.sCorrenteFsm2 = ;
> -
> -            return s;
> -            }
> +
> +
> +
> +    /**
> +     * Metodo che ricava le relazioni tra le transizioni delle 2 FSM
> +     * @return il vettore contenente le relazioni tra TUTTE le transizioni
> [...]
> +     */
> +     public  Simulazione.Relazione[][] leggiNumRelazioni ()
> +     {
> +            int n = listaFsm.elementAt(0).getTransizioni().size();//N°
> transizioni prima fsm
> +            int m =
> listaFsm.elementAt(1).getTransizioni().size();//..seconda
> +            Simulazione.Relazione relazioniTransizioni[][] = (new
> Simulazione.Relazione [n+1][m+1]);
> +
> +            for (int i=0; i<n+1; i++)
> +            {
> +                for(int j=0; j<m+1; j++)
> +                    relazioniTransizioni[i][j] =
> relazioniTransizioni[i][j].ASINCRONA; //di default le transizioni sono
> asincrone tra loro,
> +
>             //solo quelle sincrone e m-ex saranno specificate
> +            }
> +
> +            return relazioniTransizioni;
> +     }
> +
>
>
>
> -        /**
> -         * Metodo che ricava le relazioni tra le transizioni delle 2 FSM
> -         * @return il vettore contenente le relazioni tra TUTTE le
> transizioni [...]
> -         */
> -        public  Simulazione.Relazione[][] leggiRelazioni (){
> -            int n = listaFSM.elementAt(0).getTransizioni().size();//N°
> transizioni prima fsm
> -            int m =
> listaFSM.elementAt(1).getTransizioni().size();//..seconda
> -            Simulazione.Relazione _relazioniTransizioni[][] = new
> Simulazione.Relazione[n+1][m+1];
> -
> -            Transizione t1,t2;
> -            //RelazioneTransizioni r = new RelazioneTransizioni (t1,t2);
> -            //listaRelazioni.add(r);
> -
> -            return relazioniTransizioni;
> -        }
> -
> -
> +    /**
> +     * Metodo che controlla la correttezza delle informazione relative alla
> simulazione
> +     * che sono state introdotte/lette
> +     *
> +     */
> +    public boolean simulazioneCorretta ()
> +        {
> +            boolean correct = true;
> +
> +            //TODO
> +
> +            return correct;
> +        }
> +
>
>  }
> =======================================
> --- /trunk/cooperativefsm/src/cooperativefsm/InputTast.java     Sat Oct  3
> 08:01:59 2009
> +++ /trunk/cooperativefsm/src/cooperativefsm/InputTast.java     Tue Oct 13
> 07:53:08 2009
> @@ -1,10 +1,105 @@
>  package cooperativefsm;
>
>  /**
> + * Classe che eredita  dalla classe padre Input, e ne sovrascrive alcuni
> metodi in modo  da
> + * specializzarli per la lettura da tastiera
>  *
>  * @author Renato
>  */
> +
> +import java.util.Vector;
> +
>  public class InputTast extends Input
>  {
> -    //super.
> -}
> +
> +     private final String RICH_STATI = "Inserisci il numero di stati: ";
> +     private final String RICH_TRANS = "Vuoi inserire una nuova
> transizione? ";
> +     private final String INS_STATO   = "Inserire il numero dello stato ";
> +     private final String INS_RELAZ = "Vuoi inserire una nuova relazione
> tra transizioni? ";
> +     private final String TIPO_RELAZ = "TIPO DI RELAZIONE TRA LE
> TRANSIZIONI";
> +     private final String [] SCELTA_RELAZ  = {"Relazione
> sincrona","Relazione mutuamente esclusiva"};
> +
> +     private final int min_stati = 2;
> +
> +
> +     /**
> +      * Costruttore specializzato per l'input da tastiera.
> +      */
> +     public InputTast ()
> +     {
> +
> +     }
> +
> +
> +     public @Override Stato leggiStato (String a)
> +     {
> +         Stato s = new Stato (Servizio.leggiInteroConMinimo(INS_STATO + a +
> ": ", 0));
> +         return s;
> +     }
> +
> +
> +     public @Override int leggiNumStati ()
> +     {
> +        int numStati = Servizio.leggiInteroConMinimo(RICH_STATI,
> min_stati);
> +        return numStati;
> +     }
> +
> +
> +     /**
> +      *
> +      * @return
> +      */
> +     public @Override boolean ciSonoTrans ()
> +     {
> +        boolean ciSono = Servizio.yesOrNo(RICH_TRANS);
> +        return ciSono;
> +     }
> +
> +
> +     /**
> +      *
> +      * @param lista: la lista contenente le fsm
> +      * @return lo stato corrente
> +      *
> +      */
> +     public @Override StatoCorrente leggiStatoIniziale (Vector<Fsm> lista)
> +     {
> +        StatoCorrente s = new StatoCorrente ();
> +
> +        Stato c1 = leggiStato("corrente della fsm " +
> lista.get(0).getId());
> +        Stato c2 = leggiStato("corrente della fsm " +
> lista.get(1).getId());
> +
> +        //TODO controllo di appartenenza
> +
> +        s.setStati( c1, c2 );
> +        return s;
> +     }
> +
> +     public @Override boolean ciSonoRelaz()
> +     {
> +        return Servizio.yesOrNo(INS_RELAZ);
> +     }
> +
> +     /**
> +      * imposta una relazione tra due transizioni € a due fsm diverse
> +      * @param relaz
> +      */
> +
> +     public @Override void imposta(Simulazione.Relazione[][] relaz)
> +     {
> +        int t1 = Servizio.leggiInteroConMinimo("Transizione di riferimento
> della fsm 1", 0);
> +            //controllo di appartenenza
> +        int t2 = Servizio.leggiInteroConMinimo("Transizione di riferimento
> della fsm 2", 0);
> +            //controllo di appartenenza
> +
> +        MyMenu sceltaTipo = new MyMenu ( TIPO_RELAZ, SCELTA_RELAZ);
> +        int sel = sceltaTipo.scegli();
> +
> +        switch (sel)
> +            {
> +                case 1: (relaz[t1][t2]) = (relaz[t1][t2]).SINCRONA;
> +                case 2: (relaz[t1][t2]) = (relaz[t1][t2]).M_EX;
> +                break;
> +            }
> +     }
> +}
> =======================================
> --- /trunk/cooperativefsm/src/cooperativefsm/InputXML.java      Sat Oct  3
> 08:01:59 2009
> +++ /trunk/cooperativefsm/src/cooperativefsm/InputXML.java      Tue Oct 13
> 07:53:08 2009
> @@ -9,11 +9,25 @@
>  *
>  * @author Renato
>  */
> +
> +import java.util.Vector;
> +
>  public class InputXML extends Input {
>
>     public InputXML()
>     {
>     }
>
> +    public @Override int leggiNumStati(){return 0;}
> +
> +    public @Override boolean ciSonoTrans(){ return true;}
> +
> +    public @Override boolean ciSonoRelaz() {return true;}
> +
> +    public @Override void imposta (Simulazione.Relazione [][] relaz) {}
> +
> +    public @Override Stato leggiStato(String a){ return new Stato(0);}
> +
> +    public @Override StatoCorrente leggiStatoIniziale(Vector<Fsm> list)
> {return new StatoCorrente();}
>
>  }
> =======================================
> --- /trunk/cooperativefsm/src/cooperativefsm/Main.java  Sat Oct  3 08:01:59
> 2009
> +++ /trunk/cooperativefsm/src/cooperativefsm/Main.java  Tue Oct 13 07:53:08
> 2009
> @@ -20,38 +20,39 @@
>      * @param args the command line arguments
>      */
>
> -    public static void main(String[] args) {
> -
> -    final String TIPOINPUT = "TIPO DI INPUT";
> -    final String [] SCELTAINPUT  = {"da tastiera","da file xml"};
> -    final String MESS_FINALE = "CIAO!";
> -
> -    MyMenu menuInput = new MyMenu( TIPOINPUT , SCELTAINPUT );
> -    boolean fineProgramma=false;
> -
> -    int selezione = menuInput.scegli();
> -
> -    Input in;
> -    switch (selezione)
> -    {
> -        case 1: in = new InputTast();
> -        case 2: in = new InputXML();
> -        default: in = new Input();
> -        break;
> -    }
> -
> -
> -    Simulazione s = in.leggiSimulazione();   //leggiSimulazione è un metodo
> della interfaccia Input,
> -                                            //da cui ereditano le classi
> InputTast e InputXML
> -
> -    while (!fineProgramma)
> -        {
> -        fineProgramma = s.eseguiIterazione();
> -        }
> -
> -
> -    System.out.println(MESS_FINALE);
> -
> +    public static void main(String[] args)
> +    {
> +        final String TIPOINPUT = "TIPO DI INPUT";
> +        final String [] SCELTAINPUT  = {"da tastiera","da file xml"};
> +        final String MESS_FINALE = "CIAO!";
> +
> +        MyMenu menuInput = new MyMenu( TIPOINPUT , SCELTAINPUT );
> +        boolean fineProgramma=false;
> +
> +        int selezione = menuInput.scegli();
> +
> +        Input in = null;
> +
> +            switch (selezione)
> +            {
> +                case 1: {in = new InputTast(); System.out.println("ok");}
> +                case 2: in = new InputXML();
> +                default : System.out.println("boh");
> +            }
> +
> +
> +        Simulazione s = in.leggiSimulazione();   //leggiSimulazione è un
> metodo della classe Input,
> +                                                //da cui ereditano le
> classi InputTast e InputXML
> +
> +        while (!fineProgramma)
> +            {
> +            fineProgramma = s.eseguiIterazione();
> +            }
> +
> +
> +        System.out.println(MESS_FINALE);
> +
> +
>     }
>
>
> =======================================
> --- /trunk/cooperativefsm/src/cooperativefsm/MyMenu.java        Sat Oct  3
> 08:01:59 2009
> +++ /trunk/cooperativefsm/src/cooperativefsm/MyMenu.java        Tue Oct 13
> 07:53:08 2009
> @@ -1,8 +1,3 @@
> -/*
> - * To change this template, choose Tools | Templates
> - * and open the template in the editor.
> - */
> -
>  package cooperativefsm;
>
>  /**
> @@ -31,10 +26,14 @@
>        this.voci = voci;
>   }
>
> -  public int scegli ()
> +  /**
> +   *
> +   * @return
> +   */
> +  public int scegli ()          //NB: non è stato fatto nessun controllo
> che il carattere inserito sia un intero
>   {
>        stampaMenu();
> -       return Servizio.leggiIntero(RICHIESTA_INSERIMENTO, 0, voci.length);
> +       return Servizio.leggiIntero(RICHIESTA_INSERIMENTO, 0 ,voci.length);
>   }
>
>   public void stampaMenu ()
> =======================================
> --- /trunk/cooperativefsm/src/cooperativefsm/Servizio.java      Sat Oct  3
> 08:01:59 2009
> +++ /trunk/cooperativefsm/src/cooperativefsm/Servizio.java      Tue Oct 13
> 07:53:08 2009
> @@ -5,6 +5,8 @@
>  * @author Renato
>  */
>  import java.util.Scanner;
> +import java.io.*;
> +import java.lang.*;
>
>
>  public class Servizio {
> @@ -19,7 +21,7 @@
>          private final static char RISPOSTA_SI='S';
>          private final static char RISPOSTA_NO='N';
>
> -
> +
>
>          private static Scanner creaScanner ()
>          {
> @@ -70,6 +72,7 @@
>               System.out.println(ERRORE_STRINGA_VUOTA);
>              }
>            } while (!finito);
> +
>           return valoreLetto;
>          }
>
> =======================================
> --- /trunk/cooperativefsm/src/cooperativefsm/Simulazione.java   Mon Oct  5
> 14:37:12 2009
> +++ /trunk/cooperativefsm/src/cooperativefsm/Simulazione.java   Tue Oct 13
> 07:53:08 2009
> @@ -14,6 +14,7 @@
>         ASINCRONA,
>         M_EX
>     }
> +
>
>     private Vector<Fsm> listaFsm;
>     private Vector<TransizioniAbilitate> transizioniAbilitate;  //lista
> dinamica che varia a seconda dello stato corrente
> =======================================
> --- /trunk/cooperativefsm/src/cooperativefsm/Stato.java Mon Oct  5 14:37:12
> 2009
> +++ /trunk/cooperativefsm/src/cooperativefsm/Stato.java Tue Oct 13 07:53:08
> 2009
> @@ -9,7 +9,8 @@
>
>  public class Stato {
>
> -    private int idStato;
> +    private int idStato;    //è il numero progressivo assegnato allo stato,
> riferito alla fsm cui appartiene
> +    private String nome;    //identifica un certo stato (attributo
> opzionale)
>     private Vector<Transizione> transizioniUscenti;
>
>
> =======================================
> --- /trunk/cooperativefsm/src/cooperativefsm/StatoCorrente.java Sat Oct  3
> 08:01:59 2009
> +++ /trunk/cooperativefsm/src/cooperativefsm/StatoCorrente.java Tue Oct 13
> 07:53:08 2009
> @@ -6,9 +6,23 @@
>  * La classe stato corrente definisce la situazione della simulazione in un
> certo istante
>  *
>  */
> -public class StatoCorrente {
> -
> +public class StatoCorrente
> +
> +{
>     public Stato sCorrenteFsm1;
>     public Stato sCorrenteFsm2;
>
> -}
> +    /**
> +     * Imposta gli stati correnti delle varie fsm
> +     * Per comodità si dà per scontato che le macchine di una simulazione
> siano 2
> +     *
> +     * @param corrente1
> +     * @param corrente2
> +     */
> +    public void setStati ( Stato corrente1, Stato corrente2 )
> +    {
> +        sCorrenteFsm1 = corrente1;
> +        sCorrenteFsm2 = corrente2;
> +    }
> +}
> +
> =======================================
> --- /trunk/cooperativefsm/src/cooperativefsm/Transizione.java   Mon Oct  5
> 14:37:12 2009
> +++ /trunk/cooperativefsm/src/cooperativefsm/Transizione.java   Tue Oct 13
> 07:53:08 2009
> @@ -11,21 +11,33 @@
>  */
>  public class Transizione {
>
> -    private int id;
> +    private int id;         //è il numero progressivo assegnato alla
> transizione, riferito alla fsm cui appartiene
> +    private String nome;    //identifica una certa transizione (attributo
> opzionale)
>     private Stato stato1;
>     private Stato stato2;
>     private int numRelazioniSincroneStatoCorrente; //Indica quanti relazioni
> sincrone ha con altre transizioni nello stato corrente
>
> -    public Transizione(Stato _stato1, Stato _stato2) {
> -        stato1=_stato1;
> -        stato2=_stato2;
> +    /**
> +     * Costruttore di una transizione a partire da due stati di una stessa
> fsm
> +     *
> +     * @param _stato1
> +     * @param _stato2
> +     */
> +
> +    public Transizione(Stato _stato1, Stato _stato2)
> +    {
> +        stato1 = _stato1;
> +        stato2 = _stato2;
>     }
>
> -    public void setNumRelazioniSincroneStatoCorrente( Simulazione.Relazione
> relazioni[][]){
> +
> +    public void setNumRelazioniSincroneStatoCorrente( Simulazione.Relazione
> relazioni[][])
> +    {
>         //TODO
>     }
>
> -    public int getNumRelazioniSincroneStatoCorrente(){
> +    public int getNumRelazioniSincroneStatoCorrente()
> +    {
>
>         //TODO
>
>


Bravo! Sono tuttavia un confuso so ciò che intendi per resto....la
classe di input da tastiera non dovrebbe semplicemente leggere da
tastiera e controllare la correttezza dei parametri? (spererei che il
resto funziona :) ). Verifica se si tratta di un problema dato dalla
versione differente dei jdk, visto che forse baroni usa una versione
vecchia o un altra versione della classe scanner, esisteranno comunque
in rete degli esempi su come risolvere il problema. Eventualmente se
proprio non ce ne vieni fuori, spiega precisamente la natura del
problema sul forum di dotproject. I controlli di correttezza non
possono essere fatti con jml, l'utilizzo degli invarianti servono
principalmente in fase di test per creare delle eccezioni in caso di
situazioni che non dovrebbere mai verificarsi, verificano che
l'applicazione sia in stato coerente, se non ci si trova in uno stato
coerente, ecco che il programma si interrompe e specifica la natura
dell'accezione (stile assert del c). L'input errato dell'utente è un
situazione che si può verificare ed è da gestire con codice che lo
corregga.

News: il bonfa è in gruppo con noi, ci darà una mano nello sviluppo.
Acquisto ufficializzato.

Other related posts: