Object Constraint Language
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:
contextPersonainv:
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
- Il linguaggio Eiffel fu uno dei primi linguaggi object-oriented a include un sottolinguaggio dichiarativo per esprimere asserzioni
- Anche Java ha un proprio sottolinguaggio per le asserzioni
- Syntropy, Catalysis e BON sono altri linguaggi che consentono di esprimere vincoli su sistemi a oggetti
Collegamenti esterni
- The Specifica di UML (include la specifica di OCL)
- Tutorial su OCL per Java
- Varie risorse su OCL nel sito di Jos Warmer e Anneke Kleppe