Indietro

ⓘ Object Constraint Language




Object Constraint Language
                                     

ⓘ 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 entrato a far parte del nuovo standard del linguaggio. 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 lespressione 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.

                                     

1.1. Descrizione Precondizioni e postcondizioni

OCL consente di descrivere parzialmente o completamente la semantica di unoperazione di una classe per mezzo di precondizioni e postcondizioni. Una precondizione è una condizione che deve essere vera immediatamente prima dellesecuzione di una operazione e quindi corrisponde anche a una guardia in un diagramma degli stati. Una postcondizione è una condizione che deve essere vera al termine dellesecuzione di unoperazione. 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.

context Persona sposap:Persona pre: coniuge-> size=0 context Persona sposap:Persona post: coniuge=p and p.coniuge=self

Nellindicazione 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 pre per loperazione di sposare una persona p è non essere sposati la "numerosità" dellattributo coniuge devessere 0; in molti linguaggi questo si esprimerebbe dicendo che coniuge è null. La postcondizione post è che p diventerà il mio coniuge e io identificato dalla parola chiave self, che corrisponde al this di molti linguaggi sono il coniuge della persona che ho sposato.

Nelle espressioni per le postcondizioni si possono usare alcuni simboli speciali dedicati. La parola chiave result indica il valore tornato dalloperazione. Il simbolo pre, applicato al nome di un attributo, si riferisce al valore che lattributo aveva prima che fosse eseguita loperazione.

                                     

1.2. Descrizione Regole di derivazione e query

Unespressione 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:

context Persona suoceri:SetPersona derive: coniuge.genitori context Persona consuoceri:SetPersona derive: figli.coniuge-> asSet.genitori-> asSet

Estremamente simile a un attributo derivato è una query, ovvero una operazione senza effetti collaterali che fornisce uninformazione sulloggetto a cui viene applicata. Da un punto di vista implementativo potrebbe non esistere alcuna distinzione. La sintassi OCL per descrivere la semantica di unoperazione query è dunque molto simile a quella per le regole di derivazione. Se suoceri fosse stata espressa come query, la si sarebbe specificata in OCL come segue:

context Persona suoceri:SetPersona body: coniuge.genitori
                                     

1.3. Descrizione Valori iniziali di attributi

Unespressione OCL può essere usata anche per descrivere il valore iniziale di un attributo:

context Persona età:Integer init: 0
                                     

1.4. Descrizione Informazioni aggiuntive

I 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 --, e si intendono proseguire fino alla fine della linea. I vincoli possono essere dotati di un nome, composto da una singola parola senza spazi posta dopo la parola chiave inv, pre ecc:

context Persona sposap:Persona pre monogamia: coniuge-> size=0
                                     

1.5. Descrizione Tipi e operatori predefiniti

Le espressioni OCL possono contenere riferimenti a quattro tipi primitivi, definiti anche per UML: Integer numeri interi, Real numeri reali, String stringhe, Boolean valori booleani. Su tali tipi primitivi sono definiti un vasto assortimento di operatori.

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:

                                     

2. Tool

La maggior parte dei tool e degli ambienti integrati per la modellazione in UML non gestiscono ancora OCL, lo gestiscono in modo solo parziale. Molti dei tool elencati qui di seguito non sono integrati in ambienti di modellazione UML.

  • Model Run Borland, Archiviato l8 febbraio 2005 in Internet Archive. Supporta completamente lultima versione di OCL, 2.0. Creato dagli autori di OCL.
                                     

3. Curiosità

  • 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
  • Luso di precondizioni, postcondizioni e invarianti come strumenti di specifica di dati e operazioni ha origine negli studi sulla semantica assiomatica di C.A.R. Hoare e Edsger Dijkstra.
  • Il linguaggio Eiffel fu uno dei primi linguaggi object-oriented a includere un sottolinguaggio dichiarativo per esprimere asserzioni
                                     
  • interazione con gli altoparlanti. Component diagram Class diagram Object Constraint Language Altri progetti Wikimedia Commons Wikimedia Commons contiene immagini
  • ai principi di modellazione di UML Unified Modeling Language così come definiti da OMG Object Management Group La struttura è specificata per mezzo

Anche gli utenti hanno cercato:

...
...
...