L'Object Constraint Language o OCL è un linguaggio formale che estende il linguaggio di modellazione object-oriented UML consentendo la specifica di elementi di modello attraverso un sistema di asserzioni. Nato e sviluppatosi indipendentemente da UML (come evoluzione del precedente Syntropy), OCL è stato incluso, nel 2003, nel nuovo standard UML 2.0. Secondo le indicazioni di OMG, OCL può essere in effetti impiegato nel contesto di qualsiasi metamodello basato su MOF. Inoltre, OMG ha adottato OCL come un elemento chiave del nuovo standard per la trasformazione di modelli, QVT.

In UML, in genere, OCL viene utilizzato per descrivere proprietà di istanze di classificatori; l'esempio più comune di istanza di classificatore è un oggetto istanza di una classe. Le asserzioni OCL possono descrivere una invarianti che legano i valori degli attributi di un oggetto, precondizioni e postcondizioni delle operazioni, valori iniziali di attributi, o regole di derivazione per gli attributi derivati. La versione 2.0 del linguaggio (che sono stati aggiunti nuovi elementi sintattici e semantici per definire interrogazioni.


Descrizione generale

I vincoli OCL sono in genere asserzioni che specificano, in modo formale, proprietà di determinati elementi di un modello. Il linguaggio include elementi del calcolo dei predicati del primo ordine, attraverso i quali si possono esprimere informazioni non descrivibili in altro modo nei diagrammi UML.


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.


Descrizione

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

Invarianti

Le espressioni OCL possono essere usate in UML per specificare proprietà invarianti di una classe, ovvero asserzioni che sono sempre vere, 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 è laPersona (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