[cooperativefsm] r9 committed - Struttura delle classi quasi definitiva, anche se di fatto...

  • From: codesite-noreply@xxxxxxxxxx
  • To: cooperativefsm@xxxxxxxxxxxxx
  • Date: Sat, 03 Oct 2009 15:02:53 +0000

Revision: 9
Author: svanerac@xxxxxxxxx
Date: Sat Oct  3 08:01:59 2009
Log: Struttura delle classi quasi definitiva, anche se di fatto
non è ancora stato implementato niente
http://code.google.com/p/cooperativefsm/source/detail?r=9

Added:
 /trunk/cooperativefsm/src/cooperativefsm/Input.java
 /trunk/cooperativefsm/src/cooperativefsm/InputTast.java
 /trunk/cooperativefsm/src/cooperativefsm/InputXML.java
 /trunk/cooperativefsm/src/cooperativefsm/MyMenu.java
 /trunk/cooperativefsm/src/cooperativefsm/RelazioneTransizioni.java
 /trunk/cooperativefsm/src/cooperativefsm/Servizio.java
 /trunk/cooperativefsm/src/cooperativefsm/Simulazione.java
 /trunk/cooperativefsm/src/cooperativefsm/StatoCorrente.java
Deleted:
 /trunk/cooperativefsm/src/cooperativefsm/Init.java
Modified:
 /trunk/cooperativefsm/src/cooperativefsm/Fsm.java
 /trunk/cooperativefsm/src/cooperativefsm/Main.java
 /trunk/cooperativefsm/src/cooperativefsm/Stato.java

=======================================
--- /dev/null
+++ /trunk/cooperativefsm/src/cooperativefsm/Input.java Sat Oct 3 08:01:59 2009
@@ -0,0 +1,168 @@
+package cooperativefsm;
+
+/**
+ *
+ * @author Renato
+ */
+import java.util.Vector;
+import java.lang.*;
+
+
+public class Input {
+
+ //Questi attributi sono in realtà variabili di appoggio che servono ai metodi (astatti)
+    public Vector listaS;
+    public Vector listaT;
+    public Vector listaR;
+    public Vector listaMacchine;
+
+
+    /*
+     Metodo che inizializza una vera e propria sessione di simulazione
+
+     */
+    public Simulazione leggiSimulazione()
+            {
+             int numFsm=2;
+             int i = 0;
+             for(i=0; i<numFsm; i++)
+             {
+             Fsm fsm = creaFsm (Integer.toString(i));
+             listaMacchine.add(fsm);
+             }
+
+             //Lettura stato iniziale
+             StatoCorrente statoIniziale = leggiStatoIniziale();
+
+             //Lettura relazioni
+             listaR = 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(listaMacchine, listaR, statoIniziale));
+            }
+
+
+
+
+    /*
+ *Metodo che controlla la correttezza delle informazione relative alla simulazione
+     * che sono state introdotte/lette
+     *
+     */
+    public boolean simulazioneCorretta ()
+        {
+            boolean correct = true;
+
+            //////
+
+            return correct;
+        }
+
+
+
+
+
+    /**
+ * 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
+    *
+ * @param Serve per identificare la fsm nel file xml, oppure è il nome assegnatole da tastiera
+    */
+     public void leggiStati (String nomeFsm)
+        {
+            listaS = new Vector();
+            /*for (int i=0; i<numStati; i++)
+            {
+            Stato s = new Stato (i);
+            macch1.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
+    */
+     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);
+            }
+
+        }
+
+
+
+
+     /*
+ * Metodo che crea un'istanza di Fsm a partire dalla variabili globali che sono
+      * già state inizializzate
+      * @return la nuova istanza di Fsm
+      */
+
+     public Fsm creaFsm (String nome)
+        {
+        Fsm macchina= new Fsm ();
+
+        macchina.id = nome;
+        macchina.listaStati = listaS;
+        macchina.listaTrans = listaT;
+
+        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 Vector leggiRelazioni ()
+            {
+            Vector listaRelazioni = new Vector();
+
+            Transizione t1,t2;
+            //RelazioneTransizioni r = new RelazioneTransizioni (t1,t2);
+            //listaRelazioni.add(r);
+
+            return listaRelazioni;
+            }
+
+
+
+}
=======================================
--- /dev/null
+++ /trunk/cooperativefsm/src/cooperativefsm/InputTast.java Sat Oct 3 08:01:59 2009
@@ -0,0 +1,10 @@
+package cooperativefsm;
+
+/**
+ *
+ * @author Renato
+ */
+public class InputTast extends Input
+{
+    //super.
+}
=======================================
--- /dev/null
+++ /trunk/cooperativefsm/src/cooperativefsm/InputXML.java Sat Oct 3 08:01:59 2009
@@ -0,0 +1,19 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package cooperativefsm;
+
+/**
+ *
+ * @author Renato
+ */
+public class InputXML extends Input {
+
+    public InputXML()
+    {
+    }
+
+
+}
=======================================
--- /dev/null
+++ /trunk/cooperativefsm/src/cooperativefsm/MyMenu.java Sat Oct 3 08:01:59 2009
@@ -0,0 +1,55 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package cooperativefsm;
+
+/**
+ *
+ * @author Renato
+ */
+/*
+Questa classe rappresenta un menu testuale generico a piu' voci
+Si suppone che la voce per uscire sia sempre associata alla scelta 0
+e sia presentata in fondo al menu
+
+*/
+public class MyMenu
+{
+  final private static String CORNICE = "--------------------------------";
+  final private static String VOCE_USCITA = "0\tEsci";
+ final private static String RICHIESTA_INSERIMENTO = "Digita il numero dell'opzione desiderata > ";
+
+  private String titolo;
+  private String [] voci;
+
+
+  public MyMenu (String titolo, String [] voci)
+  {
+       this.titolo = titolo;
+       this.voci = voci;
+  }
+
+  public int scegli ()
+  {
+       stampaMenu();
+       return Servizio.leggiIntero(RICHIESTA_INSERIMENTO, 0, voci.length);
+  }
+
+  public void stampaMenu ()
+  {
+       System.out.println(CORNICE);
+       System.out.println(titolo);
+       System.out.println(CORNICE);
+    for (int i=0; i<voci.length; i++)
+        {
+         System.out.println( (i+1) + "\t" + voci[i]);
+        }
+    System.out.println();
+       System.out.println(VOCE_USCITA);
+    System.out.println();
+  }
+
+}
+
=======================================
--- /dev/null
+++ /trunk/cooperativefsm/src/cooperativefsm/RelazioneTransizioni.java Sat Oct 3 08:01:59 2009
@@ -0,0 +1,22 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package cooperativefsm;
+
+/**
+ *
+ * @author Renato
+ */
+public class RelazioneTransizioni {
+
+    public Transizione t1;
+    public Transizione t2;
+
+    public RelazioneTransizioni (Transizione tran1, Transizione tran2)
+    {
+        t1=tran1;
+        t2=tran2;
+    }
+}
=======================================
--- /dev/null
+++ /trunk/cooperativefsm/src/cooperativefsm/Servizio.java Sat Oct 3 08:01:59 2009
@@ -0,0 +1,199 @@
+package cooperativefsm;
+
+/**
+ * Classe di supporto per le Operazioni di Input/Output da tastiera
+ * @author Renato
+ */
+import java.util.Scanner;
+
+
+public class Servizio {
+         private static Scanner lettore = creaScanner();
+
+ private final static String ERRORE_FORMATO = "Attenzione: il dato inserito non e' nel formato corretto"; + private final static String ERRORE_MINIMO= "Attenzione: e' richiesto un valore maggiore o uguale a "; + private final static String ERRORE_STRINGA_VUOTA= "Attenzione: non hai inserito alcun carattere"; + private final static String ERRORE_MASSIMO= "Attenzione: e' richiesto un valore minore o uguale a "; + private final static String MESSAGGIO_AMMISSIBILI= "Attenzione: i caratteri ammissibili sono: ";
+
+         private final static char RISPOSTA_SI='S';
+         private final static char RISPOSTA_NO='N';
+
+
+
+         private static Scanner creaScanner ()
+         {
+          Scanner creato = new Scanner(System.in);
+          creato.useDelimiter(System.getProperty("line.separator"));
+          return creato;
+         }
+
+         public static String leggiStringa (String messaggio)
+         {
+                 System.out.print(messaggio);
+                 return lettore.next();
+         }
+
+         public static String leggiStringaNonVuota(String messaggio)
+         {
+          boolean finito=false;
+          String lettura = null;
+          do
+          {
+                lettura = leggiStringa(messaggio);
+                lettura = lettura.trim();
+                if (lettura.length() > 0)
+                 finito=true;
+                else
+                 System.out.println(ERRORE_STRINGA_VUOTA);
+          } while (!finito);
+
+          return lettura;
+         }
+
+
+         public static char leggiChar (String messaggio)
+         {
+          boolean finito = false;
+          char valoreLetto = '\0';
+          do
+           {
+            System.out.print(messaggio);
+            String lettura = lettore.next();
+            if (lettura.length() > 0)
+             {
+              valoreLetto = lettura.charAt(0);
+              finito = true;
+             }
+            else
+             {
+              System.out.println(ERRORE_STRINGA_VUOTA);
+             }
+           } while (!finito);
+          return valoreLetto;
+         }
+
+         public static boolean yesOrNo(String messaggio)
+         {
+                 String mioMessaggio = messaggio + 
"("+RISPOSTA_SI+"/"+RISPOSTA_NO+")";
+ char valoreLetto = leggiUpperChar(mioMessaggio,String.valueOf(RISPOSTA_SI)+String.valueOf(RISPOSTA_NO));
+
+                 if (valoreLetto == RISPOSTA_SI)
+                       return true;
+                 else
+                       return false;
+         }
+
+         public static char leggiUpperChar (String messaggio, String 
ammissibili)
+         {
+          boolean finito = false;
+          char valoreLetto = '\0';
+          do
+          {
+           valoreLetto = leggiChar(messaggio);
+           valoreLetto = Character.toUpperCase(valoreLetto);
+           if (ammissibili.indexOf(valoreLetto) != -1)
+                finito  = true;
+           else
+            System.out.println(MESSAGGIO_AMMISSIBILI + ammissibili);
+          } while (!finito);
+          return valoreLetto;
+         }
+
+
+         public static int leggiIntero (String messaggio)
+         {
+          boolean finito = false;
+          int valoreLetto = 0;
+          do
+           {
+            System.out.print(messaggio);
+            if (lettore.hasNextInt())
+             {
+              valoreLetto = lettore.nextInt();
+              finito = true;
+             }
+            else
+             {
+              System.out.println(ERRORE_FORMATO);
+              String daButtare = lettore.next();
+             }
+           } while (!finito);
+          return valoreLetto;
+         }
+
+         public static int leggiInteroConMinimo(String messaggio, int minimo)
+         {
+          boolean finito = false;
+          int valoreLetto = 0;
+          do
+           {
+            valoreLetto = leggiIntero(messaggio);
+            if (valoreLetto >= minimo)
+             finito = true;
+            else
+             System.out.println(ERRORE_MINIMO + minimo);
+           } while (!finito);
+
+          return valoreLetto;
+         }
+
+         public static int leggiIntero(String messaggio, int minimo, int 
massimo)
+         {
+          boolean finito = false;
+          int valoreLetto = 0;
+          do
+           {
+            valoreLetto = leggiIntero(messaggio);
+            if (valoreLetto >= minimo && valoreLetto<= massimo)
+             finito = true;
+            else
+             if (valoreLetto < minimo)
+                System.out.println(ERRORE_MINIMO + minimo);
+             else
+                System.out.println(ERRORE_MASSIMO + massimo);
+           } while (!finito);
+
+          return valoreLetto;
+         }
+
+
+         public static double leggiDouble (String messaggio)
+         {
+          boolean finito = false;
+          double valoreLetto = 0;
+          do
+           {
+            System.out.print(messaggio);
+            if (lettore.hasNextDouble())
+             {
+              valoreLetto = lettore.nextDouble();
+              finito = true;
+             }
+            else
+             {
+              System.out.println(ERRORE_FORMATO);
+              String daButtare = lettore.next();
+             }
+           } while (!finito);
+          return valoreLetto;
+         }
+
+ public static double leggiDoubleConMinimo (String messaggio, double minimo)
+         {
+          boolean finito = false;
+          double valoreLetto = 0;
+          do
+           {
+            valoreLetto = leggiDouble(messaggio);
+            if (valoreLetto >= minimo)
+             finito = true;
+            else
+             System.out.println(ERRORE_MINIMO + minimo);
+           } while (!finito);
+
+          return valoreLetto;
+         }
+
+
+}
=======================================
--- /dev/null
+++ /trunk/cooperativefsm/src/cooperativefsm/Simulazione.java Sat Oct 3 08:01:59 2009
@@ -0,0 +1,43 @@
+package cooperativefsm;
+
+/**
+ *
+ * @author Renato
+ */
+import java.util.Vector;
+
+
+public class Simulazione {
+
+    //public Fsm fsm1;
+    //public Fsm fsm2;
+    public Vector listaFsm;
+
+ public Vector listaRelazioni; //lista statica che comprende TUTTE le possibili coppie di transizioni + public Vector listaRelazioniAbilitate; //lista dinamica che varia a seconda dello stato corrente
+    public StatoCorrente sCorrente;
+
+
+
+    public Simulazione (Vector listaM, Vector listaRel, StatoCorrente sc)
+        {
+        listaFsm = listaM;
+        listaRelazioni = listaRel;
+        sCorrente = sc;
+        }
+
+
+    /**
+     *
+     * @return
+     */
+    public boolean eseguiIterazione ()
+        {
+        boolean fineProg = false;
+
+        ///////
+
+        return fineProg;
+        }
+
+}
=======================================
--- /dev/null
+++ /trunk/cooperativefsm/src/cooperativefsm/StatoCorrente.java Sat Oct 3 08:01:59 2009
@@ -0,0 +1,14 @@
+package cooperativefsm;
+
+/**
+ *
+ * @author Renato
+ * La classe stato corrente definisce la situazione della simulazione in un certo istante
+ *
+ */
+public class StatoCorrente {
+
+    public Stato sCorrenteFsm1;
+    public Stato sCorrenteFsm2;
+
+}
=======================================
--- /trunk/cooperativefsm/src/cooperativefsm/Init.java Wed Sep 23 03:18:54 2009
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-
-package cooperativefsm;
-
-/**
- *
- * @author Renato
- */
-
-/*E' una classe che ha il compito di inizializzare una fsm a seconda del tipo di input (lettura di un file xml, - input dell'utente ecc.). Contiene un metodo init (che è invocato nel main) che legge i valori passati dal parser
- e li passa a sua volta al costruttore della classe fsm*/
-
-
-public class Init {
-
-    public static Fsm init () {
-
-        //legge da parser o da input utente
-
-        Fsm macch1= new Fsm ();
-
-        int numStati;
-        //ottiene dal parser il numero di stati della fsm
-        /*ciclo for che per tot volte:
-                crea un nuovo stato
-                aggiunge lo stato alla fsm   */
-
-        for (int i=0; i<numStati; i++)  {
-            Stato s = new Stato (i);
-            macch1.addStato(s);
-        }
-
- //ottiene dal parser lo stato iniziale che deve € al vettore macch1.listaStati --->controllare! - //imposta lo stato corrente: macch1.setStatoCorrente(statoIniziale);
-
-
-        //ottiene dal parser le transizioni ....
-
-
-        return macch1;
-
-    }
-
-}
=======================================
--- /trunk/cooperativefsm/src/cooperativefsm/Fsm.java Wed Sep 23 03:18:54 2009 +++ /trunk/cooperativefsm/src/cooperativefsm/Fsm.java Sat Oct 3 08:01:59 2009
@@ -1,8 +1,3 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-
 package cooperativefsm;

 /**
@@ -14,11 +9,13 @@

 public class Fsm {

+    String id;
+    int numStati;
+    Stato sCorrente;    //serve davvero???
     Vector listaStati;
     Vector listaTrans;

-    int numStati;
-    Stato sCorrente;
+

     public Fsm () {    // costruttore di una macchina a stati finiti

@@ -27,12 +24,13 @@

      }

-    public void addStato(Stato s) {
-        //aggiunge uno stato al vector listaStati
+
+
+ public void addStato(Stato s) { //aggiunge uno stato al vector listaStati
+        listaStati.add(s);
     }

-    public void setStatoCorrente(Stato s) {
-        //imposta il valore dello stato corrente
+ public void setStatoCorrente(Stato s) { //imposta il valore dello stato corrente
         sCorrente = s;
     }

@@ -41,6 +39,12 @@
     }


+    public Stato getStato (int indice)  {
+
+        Stato s = (Stato) listaStati.get(indice);
+        return s;
+    }
+
      //settaTransizioniUscentiStati();


=======================================
--- /trunk/cooperativefsm/src/cooperativefsm/Main.java Wed Sep 23 03:14:02 2009 +++ /trunk/cooperativefsm/src/cooperativefsm/Main.java Sat Oct 3 08:01:59 2009
@@ -12,23 +12,47 @@
  *
  * @author Cominardi Luca, Ferrari Alessandro, Svanera Carlo
  */
-public class Main {     //è la classe che gestisce la simulazione
+
+
+public class Main {

     /**
      * @param args the command line arguments
      */
+
     public static void main(String[] args) {
-
-        //System.out.println("Hello World!");
-
-        // TODO code application logic here
+
+    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;
+    }


-    Fsm fsm1,fsm2;
-
-
-    fsm1= Init.init();
+ 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);

     }
+

 }
=======================================
--- /trunk/cooperativefsm/src/cooperativefsm/Stato.java Wed Sep 23 03:18:54 2009 +++ /trunk/cooperativefsm/src/cooperativefsm/Stato.java Sat Oct 3 08:01:59 2009
@@ -1,8 +1,3 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-
 package cooperativefsm;

 /**

Other related posts:

  • » [cooperativefsm] r9 committed - Struttura delle classi quasi definitiva, anche se di fatto... - codesite-noreply