Logo dell'Università di Catania: Siciliae Studium Generale 1434 Logo del Centro IPPARI, Ingegneria del software
matite e gomma
Loghi istituzionali: Siciliae Studium Generale 1434, Centro ricerche IPPARI, Università di Catania, Facoltà di Scienze Matematiche, Fisiche, Naturali, Insegnamento di Ingegneria del software

Costruzione di modelli con OCL

Lezione 11 di Ingegneria del software 2

Docente: Giuseppe Scollo

Università di Catania, sede di Comiso (RG)
Facoltà di Scienze Matematiche, Fisiche e Naturali
Corso di Studi in Informatica applicata, AA 2006-7

Logo di Conformità WCAG-1 di Livello Tripla A, W3C-WAI Web Content Accessibility Guidelines 1.0 Validazione XHTML 1.0 Validazione CSS 2

Indice

  1. Costruzione di modelli con OCL
  2. aggiungere informazione con OCL
  3. aggiungere invarianti
  4. operare su collezioni di oggetti
  5. Set, Bag, OrderedSet, Sequence
  6. aggiungere pre- e post-condizioni
  7. ereditarietà, commenti, variabili locali
  8. estensioni di diagrammi di classi
  9. pre- e post-condizioni su operazioni
  10. altre estensioni dei diagrammi di classi
  11. estensioni di diagrammi di componenti
  12. estensioni di diagrammi di interazioni
  13. OCL su diagrammi di macchine a stati
  14. OCL su diagrammi di attività e di casi d'uso
  15. stile di modellazione, alcuni suggerimenti

aggiungere informazione con OCL

con riferimento al modello di rete di servizi presentato nella lezione 5:

inizializzazione di attributi (o estremi di associazioni)

specifica di derivazione del valore di elementi del modello

specifica di operazioni query

specifica di nuovi attributi e operazioni (v. il diagramma precedente per la classe ModuloIns)

aggiungere invarianti

è buona regola di stile dare un nome a ciascun invariante

con riferimento al modello di rete di servizi presentato nella lezione 5:

invarianti su attributi

quando il tipo di un attributo è una classe

invarianti su oggetti associati

invarianti e classi di associazione

operare su collezioni di oggetti

con riferimento al modello di rete di servizi presentato nella lezione 5:

alcune operazioni sulle collezioni: size, select

altre operazioni sulle collezioni: reject, forAll, isEmpty

l'operazione collect, di frequente uso implicito nella dot notation su collezioni:

Set, Bag, OrderedSet, Sequence

altre operazioni sulle collezioni:

Bag = Set + molteplicità

OrderedSet = Set + ordine lineare

Sequence = Bag + ordine lineare

collect su Set Bag

collect su OrderedSet Sequence

N.B. collect implicita nella navigazione

tenendo conto dell'ordinamento dei sottotipi di LivelloServizio (v. appresso per oclIsTypeOf):

aggiungere pre- e post-condizioni

pre- e post-condizioni: utili per specificare il Design by Contract (Meyer)

contesto: un'operazione

suffisso @pre :

ad es., con riferimento al modello di rete di servizi presentato nella lezione 5:

assenza di pre- o post-condizione: meglio se esplicita con un commento, sintassi: -- commento

specifica di invio di messaggi nelle postcondizioni: operatore ^ (leggi: hasSent )

ereditarietà, commenti, variabili locali

la meta-operazione oclIsTypeOf :

ad es., con riferimento al modello di rete di servizi presentato nella lezione 5:

per i commenti su più righe, sintassi:

variabili locali, sintassi: let <var>[:<type>] = <expr> in <expr>

vediamo ora, in modo più sistematico, esempi di estensioni OCL a vari tipi di diagrammi UML ...

estensioni di diagrammi di classi

con riferimento al modello di rete di servizi presentato nella lezione 5:

specifica di regole di derivazione, anche per nuovi attributi o operazioni

inizializzazione di attributi (o estremi di associazioni)

specifica di operazioni query

specifica di invarianti, meglio se con nome

pre- e post-condizioni su operazioni

principio del Design by Contract (Meyer):

contesto: un'operazione

suffisso @pre : ammesso solo nelle post-condizioni, v. sopra

ad es., possiamo estendere il modello di rete di servizi presentato nella lezione 5 con le operazioni:

altre estensioni dei diagrammi di classi

risoluzione di ambiguità causate da cicli invariante su una classe nel ciclo

definizione di classi derivate:

precisazione di molteplicità dinamica o opzionale invarianti su classi associate

risoluzione di ambiguità del vincolo or su una coppia di associazioni bidirezionali opzionali su una stessa coppia di classi invariante su una delle due classi

estensioni di diagrammi di componenti

espressioni OCL utili quando il diagramma di componenti contiene interfacce o classi

in tal caso, si applica quanto già visto:

estensioni di diagrammi di interazioni

usi principali di OCL per diagrammi di interazioni:

attenzione : elementi dei diagrammi di interazioni sono istanze (non classi), ciò implica:

OCL in diagrammi di macchine a stati

usi principali di OCL per diagrammi di macchine a stati:

quando il diagramma rappresenta la dinamica di un oggetto, questo è l'istanza contestuale delle espressioni OCL e il suo tipo ne è il tipo contestuale

nel caso di espressioni OCL di valori di parametri in azioni, il contesto dell'espressione è lo stato o la transizione in cui l'azione viene eseguita

l'operazione booleana oclInState(stato) può applicarsi all'istanza contestuale self per specificare vincoli dipendenti dal suo stato, ad esempio:

OCL in diagrammi di attività e casi d'uso

usi principali di OCL per diagrammi di attività:

quest'ultimo problema si presenta sistematicamente nel (molto discutibile) tentativo di estendere i diagrammi di casi d'uso con espressioni OCL

(opinione personale: meglio non provarci ;)

stile di modellazione, alcuni suggerimenti

definizioni di attributi o operazioni query

espressione di vincoli di inclusione fra associazioni

invarianti in luogo di ereditarietà

adoperare navigazioni brevi

fare attenzione alla scelta del contesto

evitare allInstances quando è possibile

separare i vincoli in congiunzioni di vincoli

usare l'abbreviazione . per collect

dare nome agli estremi di associazioni