UML: Constraints-OCL Corso IS I /03

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Linguaggio C++ Selezione.
Structured Query Language (SQL) Presentazione 13.1 Informatica Generale (Prof. Luca A. Ludovico)
Algebra relazionale Presentazione 12.1
PHP.
Specifiche Algebriche
UML: Class Diagram 1 Corso IS I /03
Algoritmi e Programmazione
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
Query OQL e XQUERY a confronto
DOCUMENTAZIONE DI SCHEMI E/R
Biglietti: schema E/R.
1 Biglietti: schema E/R. 2 Biglietti: albero degli attributi.
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Sistemi basati su conoscenza Conoscenza e ragionamento Prof. M.T. PAZIENZA a.a
1 Corso di Laurea in Biotecnologie Informatica (Basi di Dati) SQL: Data Manipulation Language (DML) Anno Accademico 2009/2010 Da: Atzeni, Ceri, Paraboschi,
Uso dei cicli y t =c+ty t-1 +e Un uso dei cicli può essere quello di creare una serie storica per cui y t =c+ty t-1 +e dove poniamo c e t scalari ed e~N(0,1).
Basi di dati. Vantaggi degli archivi digitali Risparmio di spazio: sono facilmente trasferibili e duplicabili Risparmio di tempo: si può accedere ai dati.
UML: Class Diagram Corso IS I /03
UML: Esempio “Briscola” Corso IS I /03
UML: Extension Mechanism Corso IS I /03 Gianna Reggio Versione 0.0.
Semantica di Tarski.
Esercitazione.
Equivalenza di espressioni
Vincoli di integrità generici Con i costrutti visti sinora, non è sempre possibile definire tutti i possibili vincoli di integrità. Per questo esiste listruzione.
Manipolazione dei dati I comandi SQL che permettono di modificare il contenuto di una base di dati sono insertdeleteupdate insert ha la seguente sintassi:
Viste. Cosè una vista? è possibile creare un subset logico di dati o una combinazione di dati una vista è una tabella logica basata su una tabella o su.
AN FI Un denominatoe comune Lo stile funzionale Concetti fondamentali.
Introduzione alla modellazione di sistemi interattivi
Basi di dati Claudia Raibulet
SQL: Structured Query Language
UML: Collaboration diagram Corso IS I /03 Gianna Reggio Versione 1.0.
EXCEL E FTP.
Realizzato da Roberto Savino
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
Sintassi base e struttura di un programma
SQL.
BIOINFO3 - Lezione 51 INSERIMENTO DEI DATI Visto come si creano le tabelle (sinora tristemente vuote), cominciamo ad occuparci di come riempirle con dei.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
File e Funzioni Si possono distinguere tre tipi di file che vengono utilizzati in MATLAB: M-file: hanno estensione .m e in essi vengono memorizzati i.
Esercitazioni di Ingegneria del Software con UML
JavaScript Generalità Cos'è JavaScript?
O C L Object Constraint Language
ODMG. L’ODMG L’Object Data Management Group è un consorzio di produttori di ODBMS che ha proposto uno standard per: il modello a oggetti il linguaggio.
Programmazione ad oggetti
Algebra di Boole.
Introduzione a Javascript
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting.
Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le.
Tag FRAMESET. I frame sono un particolare tipo di struttura HTML, che consente di suddividere la finestra del browser in diversi riquadri distinti. Un'insieme.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Carluccio Antonio Carluccio Alessandra Caricola Giovanni Vizzino Anna Università degli Studi di Bari.
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
Basi di dati e Relazioni Uno schema di relazione R(X) è costituito da un simbolo (nome della relazione) R e da una serie di attributi X={A 1, A 2, …, A.
Query languages per Basi di Dati Relazionali  Algebra Relazionale:  basato sulla teoria degli insiemi  procedurale  usato per l’implementazione di.
UML: Sequence diagram Corso IS I /03 Gianna Reggio Versione 0.0.
UML: Introduzione Corso IS I /03 Gianna Reggio Versione 0.0.
Vincoli Interrelazionali Per i vincoli visti l’inserimento di un valore che li viola viene semplicemente impedito. In caso di vincoli di integrità referenziale,
Vincoli interrelazionali
Raggruppamenti e target list scorretta select padre, avg(f.reddito), p.reddito from persone f join paternita on figlio = nome join persone p on padre =
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Linguaggio SQL prima parte Linguaggio SQL prima parte A. Lorenzi, E. Cavalli INFORMATICA PER SISTEMI INFORMATIVI AZIENDALI Copyright © Istituto Italiano.
Access Breve introduzione. Componenti E’ possibile utilizzare Access per gestire tutte le informazioni in un unico file. In un file di database di Access.
SQLite. Introduzione a SQLite Oltre alla possibilità di memorizzare informazioni persistenti attraverso Preferences e files, Android mette a disposizione.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

UML: Constraints-OCL Corso IS I - 2002/03 Gianna Reggio Versione 0.0

Constraints Permettono di specificare delle limitazioni sui componenti di un modello (classi, associazioni,operazioni) Il numero degli iscritti ad un torneo è una potenza di due Il punteggio di una partita consiste di 120 punti divisi tra le due coppie partecipanti Le coppie partecipanti ad un torneo sono tutte fatte di giocatori distinti …. Solo prescrittive Se una constraint è violata, allora il modello è errato/inconsistente Starting point Integrity constraint su database, SQL Specifiche logiche (es. logica di Hoare) Constraint predefinite is query per le operazioni, frozen

Forma delle constraint Testuale (date a parte) context Class inv: Condition Ogni istanza di Class in ogni momento deve soddisfare Condition context Class::Operation(x1:T1,…,X2:Tn): T pre: Condition1 post: Condition2 Condition1 deve essere vera prima di ogni chiamata di Operation e Condition2 deve essere vera dopo ogni chiamata di Operation Grafica messe in una nota collegata all’elemento constrained (il context, che quindi non viene riportato) Linguaggio per esprimere Condition, non fissato da UML Si può usare Linguaggio naturale Linguaggio di programmazione (Java, C++,…) Linguaggio formale di specifica (Z) OCL, allegato alla definizione di UML

OCL (Object Constraint Language) Privo di side effects (linguaggio puramente funzionale) Tipi ed espressioni Soliti tipi base collection (supertito dei tipi strutturati) perché in OCL non c’è nulla corrispondente al prodotto cartesiano/record? Costrutti per riferirsi al contesto Self, nomi dei parametri Costrutti per riferirsi agli elementi del modello UML constrained Classi nel modello come nuovi tipi con possibilità di chiamare le loro operazioni, accedere ai loro attributi e navigare le loro associazioni

Tipi base costanti

Collection valori strutturati (composti da altri valori) perchè fondamentali per UML ????? tipi parametrici Collection(Type), Set(Type), Bag(Type), Sequence(Type), tipo astratto Collection Bag Set Sequence tipi concreti multinsiemi (insiemi con elementi ripetuti) liste ordinate

Collection: valori (costanti) Set{ 1 , 2 , 5 , 88 } = Set{88 , 2 , 1 , 5 , 2, 5 } Set{ 'apple' , 'orange', 'strawberry' } Sequence{ 1, 3, 2, 3 } ≠ Sequence{ 3, 1, 2, 3 } Bag{ 'ape', 'nut' } = Bag{'nut', 'ape’ } Bag{1 , 3 , 4, 3, 5 } ≠ Bag{1 , 3 , 4, 5 } Sequence{ 1..8 } = Sequence{ 1, 2, 3, 4, 5, 6, 7, 8 }

Collection: operazioni (1) select (ritorna la sottocollezione degli elementi che verificano una condizione) collection->select(v:Type |bool-expr-with-v )[:Collection(Type)] tipo degli elementi di collection varianti equivalenti collection->select(v | bool-expr-with-v ) collection->select( bool-expr-with-v ) reject (ritorna la sottocollezione degli elementi che non verificano una condizione) collection->reject(v:Type | bool-expr-with-v )[:Collection(Type)] collect (ritorna la collezione data dalle valutazioni di un’espressione sugli elementi di un’altra collezione) collection->collect(v: Type | expr-with-v )[:Collection(Type’)] tipo di expr-with-v

Collection: operazioni (2) forall (controlla se tutti gli elementi di una collezione verificano una condizione) collection->forall(v:Type | bool-expr-with-v )[:Boolean] exists (controlla se almeno un elemento di una collezione verifica una condizione) collection->exists(v:Type | bool-expr-with-v )[:Boolean] includes (controlla se una collezione contiene un elemento) collection->includes(expr)[:Boolean] isEmpty (controlla se una collezione è vuota) collection->isEmpty(expr)[:Boolean] …. quelle ovvie di set, bag, e sequence (vedere reference) hanno tutte la sintassi collection->op(….)

Classi come tipi OCL ogni classe C definita nel modello corrente è un tipo per OCL sia o: C accedere ad un attributo attr: T di o o.attr applicare un’operazione op ad o o.op(e1,…,en) navigare lungo un’associazione ass da C in C1 o.ass = la collection di tutti le istanze di C1 in relazione con o rispetto ad ass [:Collection(C1)]

Riferisi al contesto context C inv: bool-expr self: generico elemento di C (si può omettere) context c: C inv: bool-expr c: generico elemento di C context op(x1:T1,…xn:Tn):T pre: bool-expr self: oggetto che esegue op (si può omettere) x1,…,xn: i valori dei parametri post: bool-expr self: oggetto che esegue op (si può omettere) x1,…,xn result: il risultato ritornato dall’esecuzione di op

post-condition cosa significano self.attr, self.op(…), self.ass in una post-condition ? ambiguità alla fine della chiamata dell’operazione ? basta scrivere self.attr, self.op(…), self.as prima della chiamata dell’operazione ? basta scrivere self.attr@pre, self.op@pre(…), self.as@pre

Esempi (relativi a BRISCOLA.gif) il valore di una carta è compreso tra 1 e 10 context Carta inv: self.valore>0 and self.valore<=11 Il vincitore di uno scontro è lo sfidante o lo sfidato context Scontro inv: vincitore = sfidato or vincitore = sfidante una coppia è fatta da due giocatori differenti context c: Coppia inv: c.primo <> c.secondo oppure context c: Coppia inv: c.primo.nome <> c.secondo.nome or c.primo.cognome <> c.secondo.cognome

Esempi (relativi a BRISCOLA.gif) Vince uno scontro la coppia che ha vinto per prima 3 partite “ci devono essere 3 partite vinte dalla coppia vincitore e le partite sono meno di 6” context Scontro inv: partite->size=>3 and partite->size<6 and partite->exists(P1,P2,P3| P1<>P2 and P1<>P3 and P2<>P3 and P1.vince = vincitore and P2.vince = vincitore and P3.vince = vincitore) non vi ricorda niente dal vostro passato recente ???