OCL
Object Constraint Language
LINGUAGGIO DI SPECIFICAZIONE
DI OGGETTI




OCL si può utilizzare in qualche contesto dove si usa il diagrama di
classe che sta associato (per essempio, nel modello concettuale o
disegno).
È un linguaggio ibrido orientato a oggetti-funzionale, ed è tipificato,
perché usa il concetto di tipi di dati.
Gli utenti di UML e di altri linguaggi, possono usare l’OCL per
specificare restrizioni e altri espressioni inserite nei suoi modelli.
OCL ha caratteristiche di un linguaggio d’espressione, di linguaggio
di modellazione e di linguaggio formale.
LINGUAGGIO D’ ESPRESSIONE



È un linguaggio d’espressione puro. Garantisce che la valutazione di
una espressione OCL non avrà effetti collaterali; non può cambiare
niente del modello, ovvero, lo stato del sistema non cambierà mai
come conseguenza di una espressione OCL.
Tutti i valori degli oggetti, inclusi tutti i collegamenti, non possono
cambiare durante la valutazione di una espressione OCL.
Una espressione OCL ritorna semplicemente un valore.
LINGUAGGIO DI MODELLAZIONE



OCL non è un linguaggio di programazione: non è
possibile scrivere logica di programmazione o un flusso
di controllo. Non è possibile invocare processi o attivare
operazioni diverse da query in OCL.
OCL è un linguaggio di modellazione in primo luogo.
Dal momento che OCL è un linguaggio di modellazione,
tutte le considerazioni implementative sono fuori dal suo
dominio e non si possono esprimere con linguaggio OCL.
Concettualmente, ogni espressione OCL è atomica.
LINGUAGGIO FORMALE


OCL è un linguaggio formale dove tutti i construttori hanno un loro
significato formalmente definido, OCL è formalizzato all’interno di
UML.
OCL non pretende di sostituire linguaggi formali come VDM o Z
PERCHÈ OCL E NON ALTRI?

Lo svantaggio dei linguaggi formali tradizionali è che sono pensati
per persone con una forte formazione matematica, ma sono difficili
per il progettista di sistema.

OCL è stato sviluppato per risolvere questo problema.

È un linguaggio formale, facile da leggere e scrivere.
DOVE USARE OCL



OCL si può usare con diversi scopo:
- Specificare caratterische statiche delle classi e dei tipi di un
modello di classe
- Specificare caratterische statiche di tipo per gli Stereotipi
- Specificare pre e post-condizioni sulle Operazioni e i Metodi.
- Come linguaggi di navigazione di alberi (tipo X-Path).
- Specificare restrizioni sulle operazioni (pre e post condizioni).
Può formare parte di una caratteristica statica ovvero una restrizione
stereotipata tramite <<invariant>>.
Può formare parte di pre-condizioni e post-condizioni che sono
restrizioni stereotipate con <<pre-condition>> e <<postcondition>>.
OGGETTI E PROPRIETÀ


Le espressioni OCL si possono riferire a tipi, classi, interfacce,
associazioni (come tipi) e tipi di dati.
Anche a tutti gli attributi, gli end-point di una associazione, metodi e
operazioni che non hanno effetti collaterali.
TIPI PREDEFINITI

Si definiscono all’interno di OCL i tipi di dati base, cosí come le operazioni
che si possono realizare con la siguiente tabella:
TIPO
VALORE
OPERAZIONE
Boolean
True, False
And, Or, Not, Xor
Integer
1, 2, 34,5242…
+, /, abs
Real
1.5, 3.14, 6.78…
+, -, /, floor
String
To be, or, not
toUpper, concat
TIPI DI DEFINIZIONI

Invarianti

Invarianti di metodo/responsabilità

Definizione di attributi derivati

Definizione di metodi/responsabilità derivate
TIPI DI DATI
1. Predefiniti
a) Basici

Boolean

Integer

Real

String

OCLAny

OCLType
b) Strutturati

Collection(T)

Set(T)

Bag(T)

OrderedSet(T)

Sequence

Tuple
2. Non Predefiniti
Sono ogni classe e enumeratore del diagrama delle classi
ESEMPIO DI USO (1)


Faremo un caso pratico.
Nel nostro esempio, andiamo a eseguire espressioni OCL su un classico
diagramma che rappresenta una impresa.
Fase 1: Carga del Modello UML 2.0

Essempio d’empresa generado con eclipse per modelo UML2.0:
<?xml version="1.0" encoding="UTF-8"?>
<uml:Model xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"
xmlns:uml="http://www.eclipse.org/uml2/1.0.0/UML"
xmi:id="_JsDyAPMHEdmre8WY4HdRjQ" name="testCase1">
<ownedMember xmi:type="uml:Package"
xmi:id="_J6MUoPMHEdmre8WY4HdRjQ" name="Package"
packageableElement_visibility="public">
<ownedMember xmi:type="uml:Class" xmi:id="_J7J98PMHEdmre8WY4HdRjQ"
name="Empleado" isLeaf="false" isAbstract="false" isActive="false"/>
<ownedMember xmi:type="uml:Class" xmi:id="_J7QEkfMHEdmre8WY4HdRjQ"
name="Jefe" isLeaf="false" isAbstract="false" isActive="false"/>
<ownedMember xmi:type="uml:Class"
xmi:id="_J7WLMvMHEdmre8WY4HdRjQ"
name="Ayudante" isLeaf="false" isAbstract="false" isActive="false"/>
</ownedMember>
</uml:Model>
Fase 1: Caricamento del Modello UML 2.0



Nel modello UML 2.0 i collegamenti tra classi sono allo
stesso livello delle classi e dei tipi primitivi.
Riassumendo, le classi sono: dipartamento, compagnia,
persona, impiegato, gruppo.
I tipi base che useremo nel nostro package sono: intero,
lista, boolean e un tipo enumerato (tipo persona)
Fase 2: Esempi di espressioni
a)
Lavoramo in una impresa, la quale necessita di costraint per
essere correttamente rappresentata ad esempio un package non
deve contenere più di 3 elementi
Context Package inv:ownedMember->size()<=3
b)
Tutti I nomi di dipartamenti devono iniziare con una lettera
maiuscola tra la A e la D comprese
Context Department inv:
Set{‘A’,’B’,’C’,’D’}>=includes(name.substring(1,1))
COLLEGAMENTI D’INTERESSE


Inglese: http://www.omg.org/docs/ptc/03-10-14.pdf
Spagnolo: http://www-2.dc.uba.ar/materias/isoft1/is12005_2/apuntes/OCL.pdf

Italiano: http://www.tecnoteca.it/upgrade/aprile_2004

Francese: http://uml.free.fr/cours/p16.html
Scarica

Introduzione a OCL