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