Object Constraint LanguageL'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. I principali ideatori di OCL sono Jos Warmer e Anneke Kleppe. OCL deriva da un linguaggio precedente noto come 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 allo stato e alle 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). DescrizioneInvarianti sempliciIn genere, in UML, un'espressione OCL è associata a una classe, e descrive proprietà degli oggetti istanze di quella classe. Queste proprietà sono espresse in forma di condizioni che legano i valori degli attributi, dei parametri, dei valori restituiti dalle operazioni, e così via. Nel seguente esempio compare un'espressione che fa riferimento a un attributo:
La parola chiave 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:
Questa regola arricchisce la precedente con un ulteriore vincolo (legato da un "AND" booleano), che specifica, inoltre, che ogni persona è più giovane del proprio padre. Invarianti su collezioniGli attributi con molteplicità maggiore di 1 (ovvero che rappresentano insiemi), detti collezioni, possono essere manipolati in OCL con un insieme di operatori specifici. Anche un attributo con molteplicità 1 ma trattato come collezione può essere manipolato con i seguenti operatori. L'operatore
L'operatore
Il quantificatore esistenziale è rappresentato dall'operatore
L'operatore
L'operatore
Quest'ultimo vincolo mostra come OCL consenta un'applicazione insolita della dot notation della forma <collezione>.<attributo>; questa espressione ritorna l'insieme dei valori che l'attributo specificato assume nei vari elementi della collezione. Nel caso Precondizioni e postcondizioniOCL consente di descrivere (parzialmente o completamente) la semantica di un'operazione di una classe per mezzo di precondizioni e postcondizioni. Una precondizione è una condizione che deve essere vera immediatamente prima dell'esecuzione di un'operazione (e quindi corrisponde anche a una guardia in un diagramma degli stati). Una postcondizione è una condizione che deve essere vera al termine dell'esecuzione di un'operazione. Precondizioni e postcondizioni sono esprimibili formalmente anche in molti linguaggi di programmazione, e possono avere sia funzioni di debug che concorrere alla semantica del programma: vedi asserzioni in Java.
Nell'indicazione del contesto di questi due vincoli viene indicata una specifica operazione della classe Persona, per la quale si indica che una precondizione (introdotta dalla parola chiave Nelle espressioni per le postcondizioni si possono usare alcuni simboli speciali dedicati. La parola chiave Regole di derivazione e queryUn'espressione OCL può essere usata anche per descrivere il valore di un attributo derivato di una classe. Per esempio, le seguenti regole specificano chi sono rispettivamente i suoceri e i consuoceri di una persona:
Estremamente simile a un attributo derivato è una query, ovvero un'operazione senza effetti collaterali che fornisce un'informazione sull'oggetto a cui viene applicata. (Da un punto di vista implementativo potrebbe non esistere alcuna distinzione). La sintassi OCL per descrivere la semantica di un'operazione query è dunque molto simile a quella per le regole di derivazione. Se
Valori iniziali di attributiUn'espressione OCL può essere usata anche per descrivere il valore iniziale di un attributo:
Informazioni aggiuntiveI vincoli OCL possono essere corredati di altre caratteristiche che non concorrono alla loro semantica ma contribuiscono alla loro leggibilità. I commenti sono introdotti dai caratteri
Tipi e operatori predefinitiLe espressioni OCL possono contenere riferimenti a quattro tipi primitivi, definiti anche per UML: I seguenti operatori si applicano ai tipi numerici Integer e Real:
I seguenti operatori si applicano al tipo Boolean:
I seguenti operatori si applicano al tipo String:
ToolLa maggior parte dei tool e degli ambienti integrati per la modellazione in UML non gestiscono ancora OCL, o lo gestiscono in modo solo parziale. Molti dei tool elencati qui di seguito non sono integrati in ambienti di modellazione UML.
Curiosità
Bibliografia
Collegamenti esterni
|
Portal di Ensiklopedia Dunia