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