160 likes | 317 Views
O C L 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).
E N D
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 <<post-condition>>.
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:
TIPI DI DEFINIZIONI • Invarianti • Invarianti di metodo/responsabilità • Definizione di attributi derivati • Definizione di metodi/responsabilità derivate
TIPI DI DATI b) Strutturati • Collection(T) • Set(T) • Bag(T) • OrderedSet(T) • Sequence • Tuple 1. Predefiniti a) Basici • Boolean • Integer • Real • String • OCLAny • OCLType 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 • Lavoramo in una impresa, la quale necessita di costraint per essere correttamente rappresentata ad esempio un package non deve contenere più di 3 elementiContext Package inv:ownedMember->size()<=3 • Tutti I nomi di dipartamenti devono iniziare con una lettera maiuscola tra la A e la D compreseContext 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/is1-2005_2/apuntes/OCL.pdf • Italiano: http://www.tecnoteca.it/upgrade/aprile_2004 • Francese: http://uml.free.fr/cours/p16.html