Object Constraint Language: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica |
|||
Riga 9:
OCL deriva storicamente da [[Syntropy]], un metodo di [[analisi (ingegneria del software)|analisi]] e [[progetto (ingegneria del software)|progetto]] object-oriented di seconda generazione. La prima versione ampiamente diffusa, OCL 1.4, consentiva di esprimere solo vincoli; in OCL 2.0 sono stati aggiunti nuovi elementi [[sintassi|sintattici]] e [[semantica|semantici]] per definire interrogazioni.
===Applicazioni===
Nel contesto di un modello UML (o comunque basato su MOF), OCL può essere utilizzato per specificare:
* il valore iniziale di un [[attributo]] di un'estremità di [[associazione]];
Riga 16 ⟶ 17:
* una condizione in un diagramma dinamico
* il valore attuale dei parametri di un'operazione (o di un messaggio, ecc.) in un diagramma dinamico
===Contesti di un'espressione===
Ogni espressione OCL è riferita a un determinato ''contesto'', ovvero esprime una proprietà di un particolare elemento di modello. In generale, questo elemento è un [[classificatore]] (per esempio una classe) o appartiene a un classificatore (per esempio un'operazione di una classe). Il classificatore in questione viene detto ''tipo contestuale'' dell'espressione.
Un classificatore UML è un ''tipo'', che descrive un insieme di potenziali ''istanze''. Le espressioni OCL si intendono come applicabili a ''ogni singola'' istanza del classificatore. Per valutare un'espressione OCL, dunque, occorre concettualmente fare riferimento a un'istanza, che viene detta ''istanza contestuale'' della valutazione. Si consideri il seguente esempio di espressione OCL:
<code>
<b>context</b>Persona<b>inv:</b>
età < padre.età and nonni->includes(padre.padre)
</code>
La parola chiave iniziale <code>context</code> indica che il contesto dell'espressione è <code>Persona</code>, che intendiamo essere una ''classe'', e che quindi rappresenta anche il tipo contestuale dell'espressione. La parola chiave <code>inv</code> dichiara che quanto segue è una proprietà invariante della classe, ovvero che vale sempre, per tutte le istanze (tutte le persone). La parte rimanente dell'espressione descrive due semplici verità [[genealogia|genealogiche]], che possono essere tradotte come segue:
:''(data una qualunque persona), l'età (di quella persona) è strettemante minore dell'età del padre (di quella persona). Inoltre, l'insieme dei nonni (di quella persona) comprende (''includes'') il padre del padre''
Scegliendo una qualsiasi persona (un'istanza contestuale), e fissando di conseguenza gli elementi variabili dell'espressione, si dovrebbe sempre ottenere un'affermazione vera.
==OCL e UML==
|