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

Espressioni OCL riferite a classi

Ogni espressione OCL è riferita a un determinato contesto, ovvero esprime una proprietà di un particolare elemento di modello; a seconda della natura del contesto, l'espressione può essere utilizzata in diversi modi. Nel caso in cui il contesto sia una classe, le espressioni OCL servono a specificare proprietà invarianti della classe, ovvero proprietà che valgono sempre, per tutte le istanze della classe.

Si consideri il seguente esempio di espressione OCL:

context Persona inv:
età < padre.età

La parola chiave iniziale context indica che il contesto dell'espressione è Persona (che intendiamo essere una classe descritta nel modello UML; vedi diagramma delle classi). La parola chiave inv indica che quanto segue è una proprietà invariante della classe. La parte rimanente dell'espressione descrive la semplice verità genealogica che (data una qualunque persona, in qualunque momento), l'età (di quella persona) è strettamente minore dell'età del padre (di quella persona).

Si può osservare che OCL utilizza la tradizionale dot notation per riferirsi agli attributi degli oggetti: "l'età del padre" diventa padre.età.

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