L'Object Constraint Language o OCL è un linguaggio dichiarativo formale inizialmente proposto come estensione del linguaggio di modellazione object-oriented UML e in seguito (2003) integrato come parte del nuovo standard UML 2.0. Secondo le indicazioni di OMG, OCL può essere in effetti impiegato nel contesto di qualsiasi metamodello basato su MOF, incluso UML.

L'OCL è un linguaggio testuale attraverso il quale si possono esprimere vincoli (in inglese constraint) e interrogazioni (query) che arricchiscono un modello a oggetti con informazione non esprimibile con la notazione diagrammatica prevista dal metamodello in uso. Le espressioni OCL possono essere utilizzate per esprimere, per esempio, invarianti, precondizioni e postcondizioni, guardie e regole di derivazione. La valutazione delle espressioni OCL è sempre intesa come priva di effetti collaterali.

OCL è oggi inteso da OMG come un elemento chiave del nuovo standard per la trasformazione di modelli noto come QVT.

Descrizione

OCL deriva storicamente da Syntropy, un metodo di analisi e 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 sintattici e 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;
  • una regola di derivazione per un attributo o un'estremità di associazione derivati;
  • la semantica di una operazione
  • una istanza in un diagramma dinamico
  • 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:

context Persona inv:
età < padre.età and nonni->includes(padre.padre)

La parola chiave iniziale context indica che il contesto dell'espressione è Persona, che intendiamo essere una classe, e che quindi rappresenta anche il tipo contestuale dell'espressione. La parola chiave inv 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à 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

OCL estende la sintassi e la semantica base di UML consentendo di esprimere vincoli che descrivono relazioni fra diversi elementi di modello non esprimibili per via diagrammatica. Come alternativa formale alla tradizionale descrizione di tali relazioni in testo libero, garantisce una minore ambiguità e consente alcuni tipi di verifiche automatiche da parte dei tool di modellazione.

Voci correlate

Collegamenti esterni