Lezione 16 – Complementi sul
linguaggio Z (2)
Ingegneria del software
Modulo 1 - Introduzione al processo software
Unità didattica 3 - Modelli di fase d’analisi
Ernesto Damiani
Università degli Studi di Milano
Operatori
•  (Congiunzione): le parti predicato comuni ai
due schemi sono considerate congiuntamente,
mettendo insieme le variabili comuni
• V (Disgiunzione): la creazione di uno schema la
cui parte predicato è il risultato dell’unione delle
parti predicato dei loro due argomenti con il
connettivo logico V).
Operatore logico di congiunzione
• L’operatore di congiunzione  del calcolo di
schema consente di unire una descrizione alla
descrizione precedente di AddBirthday
– AddBirthday

Success
• Ciò descrive un’operazione che, se riceve un input
corretto, agisce come descritto da AddBirthday e
produce il risultato ok.
Operatore logico di disgiunzione
• Questa dichiarazione specifica che se si verifica
un errore, lo stato del sistema non dovrebbe
cambiare
• La versione “robusta” di AddBirthday può quindi
essere
– RAddBirthday  (AddBirthday  Success) V
Alreadyknown
Uso di operatori
Dalla specificazione al design
• Raffinamento dei dati: descrive le strutture di
dati concrete che il programma userà per
rappresentare i dati astratti nella specificazione
• Raffinamento diretto: metodo per passare
direttamente dalla specificazione astratta al
programma in un solo passo
Raffinamento dei dati
Strutture dei dati
• Due array : names [1…] of NAME
dates [1…] of DATES
• names’ = names{i
v}
;
names[i] := v
• La parte destra di questa equazione è una
funzione che assume lo stesso valore dei nomi
ovunque tranne all’argomento i, dove prende il
valore ‘v’
Raffinamento diretto e dei dati
Esempio
Vantaggi
• È possibile ottenere una specificazione che può
portare direttamente al codice
• Facile da capire
• Una classe estesa di modelli strutturali può essere
descritta in Z e analizzata efficientemente
• Condizioni indipendenti possono essere aggiunte
in un secondo momento
FINE