Object Constraint Language
L'Object Constraint Language o OCL è un linguaggio di specifica formale inizialmente proposto come estensione per il linguaggio di modellazione object-oriented UML e successivamente (2003) entrato a far parte del nuovo standard del linguaggio (UML 2.0). OCL può essere impiegato insieme a qualunque metamodello basato su MOF. Inoltre, OCL è un elemento chiave del nuovo standard per la trasformazione di modelli di OMG, QVT, e fa parte della famiglia di standard che compongono la Model Driven Architecture.
OCL deriva da Syntropy. Il nucleo di OCL può essere descritto come un linguaggio mutuato dal calcolo dei predicati del primo ordine per l'espressione di condizioni logiche inerenti lo stato e le operazioni di oggetti in un contesto object-oriented. Con la potenza del calcolo dei predicati, OCL consente di descrivere invarianti che legano il valore degli attributi di una classe, precondizioni e postcondizioni delle operazioni, e via dicendo. A partire dalla versione 2.0 (che è quella inclusa nello standard UML), il linguaggio è stato arricchito di elementi che consentono di descrivere la semantica di operazioni di tipo interrogazione (query), ovvero prive di effetti collaterali.
Gran parte delle informazioni che si possono descrivere in OCL non sono esprimibili in nessun altro modo formale nel contesto di UML (ovvero non possono essere rappresentate dai diagrammi UML).
Descrizione
Invarianti semplici
In genere, in UML, un'espressione OCL è associata a una classe, e descrive proprietà degli oggetti istanza di quella classe. Tali proprietà sono descritte come condizioni che legano i valori degli attributi, dei parametri e dei valori tornati delle operazioni, e così via. Di conseguenza, un'espressione OCL contiene in generale riferimenti a tali caratteristiche Si consideri il seguente esempio:
context Persona inv:
età>=0
La parola chiave context</context> precede la dichiarazione della classe a cui questa regola OCL si applica.
inv:
specifica che questa particolare regola è una invariante, ovvero deve essere interpretata come una condizione che è sempre vera, per tutti gli oggetti di classe Persona
. L'espressione che segue dichiara che l'età di una persona è sempre non negativa.
Nel caso in cui un attributo di una classe sia a sua volta un oggetto, è possibile riferirsi ai suoi attributi o metodi utilizzando la dot notation:
context Persona inv:
età>=0 and età<padre.età
Questa regola arricchisce la precedente con un ulteriore vincolo (legato da un and booleano), che specifica che ogni persona è più giovane del proprio padre.
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
- Una revisione critica di OCL