cerca
Modellazione ed Analisi di Sistemi - AsmetaL
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Modellazione ed Analisi di Sistemi - AsmetaL

Torna alla pagina di Modellazione ed Analisi di Sistemi

 :: Modellazione ed Analisi di Sistemi - AsmetaL ::

Ove non meglio specificato, tutti i testi tra virgolette vanno intesi come citazioni letterali dalle slide della prof Riccobene Elvinia Maria, 2010.

AsmetaL

AsmetaL è un linguaggio formale che permette di descrivere un sistema che si vuole modellare, a tal fine AsmetaL include:

  • un Linguaggio Strutturale, che consente di descrivere la struttura di una macchina ASM;
  • un Linguaggio delle Definizioni, il quale permette di definire domini (che rappresentano i tipi dei dati introdotti), funzioni (che posseggono domini e codomini, f: Integer → Integer);
  • un Linguaggio dei Termini, che consente di specificare dei termini detti di base (variabili, costanti, termini di funzione) e termini speciali i quali possono essere associati a tuple o collezioni di dati (insiemi, sequenze, ecc.);
  • un Linguaggio delle regole, il quale permette di specificare le regole che permettono alla macchina ASM di cambiare stato. Anche in questo caso si distinguono Regole di Base (skip, update, par, ecc.) e Turbo Regole (seq, iterate, ecc.).

Abbiamo già visto di quali parti si compone una ASM, rivediamo tali componenti con alcune specifiche relative ad una macchina ASM. Una ASM è una tupla che si compone di: (name, header, body, main rule, initialization).

  • name: è il nome della ASM, prima di iniziare a descrivere ogni funzione, regola della macchina ci dovrà essere questa dichiarazione asm Nome_macchina_ASM, che dovrà coincidere con il nome del file.
  • header: si effettua la dichiarazione di domini e funzioni (e non la definizione);
  • body: si effettuano le definizioni di domini (in particolare domini concreti statitici) e funzioni statiche;
  • main rule: è il punto di partenza della macchina, essa può essere considerata come una macro regola chiusa, ovvero una regola senza parametri;
  • initialization: si esprimono una serie si stati iniziali, dove i domini definiti del body vengono inizializzati.

Esempio: “Si prenda come esempio il sistema orologio, il quale dovrà essere modellato con una ASM”.
Specifiche: quello che devo modellare in questo sistema è il funzionamento di un orologio, dunque ci deve essere un dominio dei secondi, minuti ed ore (che saranno sotto-domini del dominio Integer). Quello che dovrà accadere è che ogni volta che il dominio dei secondi avrà un valore pari a 59 si dovranno incrementare i minuti. Lo stesso per i minuti.

  • Scegliamo il nome da assegnare alla nostra ASM, nome che dovrà essere uguale anche per il file con estensione .asm . Scegliamo Clock, quello che comparirà per la sezione name sarà:
                                      asm Clock
  • Il secondo passo consiste nel dichiarare i domini e le funzioni necessarie (header). Partendo dalle specifiche descritte precedentemente dichiariamo i seguenti domini:domain Secondo subsetof Integer:
                                domain Minuto subsetof Integer
                                domain Ors subsetof Integer
                                import ./StandardLibrary

terminata la fase di specifica dei domini ci servirà anche dichiarare delle funzioni. Nel caso la StandardLibrary fosse nella cartella in cui vengono salvati i file .asm la notazione sopra adottata va bene. In caso contrario andrà definito il percorso assoluto dove la StandardLibrary verrà memorizzata. Osservando l'albero delle funzioni ASM possiamo osservare che si sono diversi tipi di funzioni, quelle dichiarate in seguito saranno di tipo controlled, in quanto non dovranno essere passate dall'ambiente esterno, ma saranno gestite totalmente dalla macchina ASM:

                                  controlled secondi: Secondo
                                  controlled minuti: Minuto
                                  controlled ore: Ora
  • il terzo passo prevede la definizione dei domini e delle funzioni necessarie (body). Partiamo con il definire i domini dichiarati precedentemente:
                                    domain Secondo = {0..59}
                                    domain Minuto = {0..59}
                                    domain Ora = {0..23}

Quanto definito non ha bisogno di troppe spiegazioni in quanto si è specificato la struttura delle ore, minuti e secondi.
Passiamo a definire le funzioni necessarie, in questo scenario ne definiremo una, la quale avrà il compito di incrementare le ore qualora la condizione imposta fosse soddisfatta:

                            macro rule r_IncMinOre =
	                          par
		                        if minuti = 59 then
			                      ore := (ore + 1) mod 24
		                        end if
		                       minuti := (minuti + 1) mod 60
	                          endpar

Brevemente, nel caso i minuti avessero un valore pari a 59 allora incremento le ore, in caso contrario incremento i minuti.

  • Ora possiamo specificare il main rule, dove la nostra macchina inizierà la sua esecuzione:
                            main rule r_Main=
                            par
		                  if secondi = 59 then
			                  r_IncMinOre[]
		                  endif
		                  minuti = (minuti + 1) mod 60
	                    endpar
  • Come ultimo passo inizializziamo il valore delle funzioni da noi adoperate:
                            default init s0:
		                 function secondi = 0
		                 function minuti = 0
		                 function ore = 0

Torna su


Torna alla pagina di Modellazione ed Analisi di Sistemi