• Non ci sono risultati.

Soluzione esercizio 1

N/A
N/A
Protected

Academic year: 2022

Condividi "Soluzione esercizio 1"

Copied!
3
0
0

Testo completo

(1)

1 / 12

© Renato Conte

Università di Padova

Facoltà di Scienze MM.FF.NN Informatica - anno 2009-10 Corso di Ingegneria del Software

Soluzione esercizi compito appello 14 luglio 2010

2 / 12

© Renato Conte

Tradurre in codice C++ e SQL

(esempio “CREATE TABLE” in mySQL) il diagramma UML delle classi

disegnato a fianco.

Nel diagramma mancano le chiavi primarie idA ed idB, delle rispettive classi A e B, che sono da includere solo nel caso di oggetti persistenti su base di dati,

e quindi - nello specifico - solo per tabelle SQL.

La creazione di tali tabelle dovrà soddisfare i vincoli di integrità referenziale che potrebbero risultare necessari per rispettare i vincoli derivanti dallo schema UML ( es. “ON UPDATE RESTRICT” ).

Esercizio 1

A +a1: int +a2: int

B +b1: int

+b2: int *

r

s

3 / 12

© Renato Conte

Soluzione esercizio 1

In questo caso ci possono essere alcune soluzioni equivalenti,

dipende dall'abilità a tradurre i vincoli di uno schema delle classi UML in vincoli SQL, mentre la traduzione in definizioni in linguaggio C++ lascia poche alternative

4 / 12

© Renato Conte

Definizione della struttura in C++

class A { public:

int a1;

int a2;

B * * r;

};

class B { public:

int b1;

int b2;

A s;

};

Soluzione Esercizio 1

A +a1: int +a2: int

B +b1: int

+b2: int *

r

s

Soluzione alternativa

class A { public:

int a1;

int a2;

std::vector<B*> r;

};

(2)

5 / 12

© Renato Conte

CREATE TABLE A

( idA INTEGER NOT NULL, PRIMARY KEY(idA), a1 INTEGER, a2 INTEGER, s INTEGER,

FOREIGN KEY(s) REFERENCES B(idB) ON DELETE CASCADE

ON UPDATE CASCADE );

CREATE TABLE B

( idB INTEGER NOT NULL, PRIMARY KEY(idB), b1 INTEGER, b2 INTEGER, r INTEGER,

FOREIGN KEY(r) REFERENCES A(idA) ON DELETE SET NULL

ON UPDATE SET NULL );

Continua soluzione 1: parte SQL -

A +a1: int +a2: int

B +b1: int

+b2: int *

r

s

6 / 12

© Renato Conte

Un televisore può utilizzare le seguenti tipologie di ingressi:

(a) il segnale analogico proveniente dall'antenna tradizionale;

(b) il segnale digitale terrestre; c) l'ingresso ausiliario per il lettore DVD;

(d) l'ingresso da altro dispositivo esterno, p.es.,un computer.

Quando l'ingresso selezionato è di tipo (a) o (b) il televisore offre la possibilità di selezionare canali identificati nell'intervallo 1..10. Tramite telecomando possiamo fare tutte le selezioni (a)-(d) sopra indicate, accendere/spegnere l'apparecchio, e regolare il volume (0..9). I vari comandi si possono anche dare simultaneamente, ovviamente non quando il televisore è spento. Poiché il televisore in questione non ha memoria permanente, all'accensione esso si troverà sempre col volume a zero, con ingresso (a) e la relativa impostazione sul canale 1.

Data questa specifica, si rappresentino i possibili stati del televisore mediante un diagramma UML di stato (corrispondente alla macchina a stati del sistema descritto).

Esercizio 2

7 / 12

© Renato Conte

Soluzione esercizio 2

In questo caso ci possono essere molte soluzioni equivalenti.

Presento una soluzione semplice che soddisfa i requisiti essenziali richiesti dal testo del problema.

Faccio uso di concetti esposti alla lezione sui diagrammi "macchine a stati" (state machine diagram), in particolare alle slide 7 e 8

tratte dal documento 01-03-03.ppt “UML Tutorial Series”

dal sito: www.omg.org

Si suppone di avere un telecomando che possiede i seguenti tasti, che provocano cambiamenti di stato o di variabili, alla macchina a stati:

Ingressi:

in+ : passa all'ingresso successivo in- : passa all'ingresso precedente

a,b,c,d : passa all'ingresso rispettivamente a,b,c,d

Cambio canale: C(n) sta per un tasto compreso tra C1 e C10

Cambio volume: <vol / vol> : cambia la variabile vol diminuendola fino ad un minimo di 0 / aumentandola fino ad un massimo di 10

ON / OFF : accende / spegne il televisore

8 / 12

© Renato Conte

Televisore Acceso

entry / vol:= 0; chan:= 1;

Televisore Spento

ON OFF

(a)

(d) (c)

(b) a, in-

b, in+

d, in+

c, in-

c, in +

b, in - d,

in -

a c

b d a,

in +

C(n) / CambioCanale(n)

Ingressi:

(a) analogico (b) digitale terrestre (c) DVD

(d) dispositivo esterno in+ / in- significa passare al tipo di ingresso succ/prec C(n) provoca l'azione CambioCanale che modifica la variabile chan;

n può essere un valore compreso tra 1 e 10

C(n) / CambioCanale(n)

vol>, <vol

vol> / vol:= (vol+1) fino ad un massimo di 10

<vol / vol:= (vol-1) fino ad un minimo di 0 vol>, <vol

vol>, <vol

vol>, <vol

(3)

9 / 12

© Renato Conte

La gestione di un cinema multisala prevede che i clienti possano, tramite un sistema basato su WEB, prenotare un posto in una sala dove si proietta un determinato film ad un certo orario di un dato giorno.

Specificare, mediante diagramma UML delle classi, le entità di livello model necessarie per la realizzazione di un tale sistema.

Disegnare poi un diagramma di sequenza che illustri le fasi salienti di una ricerca con prenotazione, e dell'invio di un promemoria a conferma del successo dell'operazione.

Attenzione: ai fini dell'esercizio basterà considerare le funzioni di ricerca del film e la prenotazione posto, escludendo altre funzionalità quali, p.es., la gestione dei pagamenti e l'interfaccia grafica.

Esercizio 3

10 / 12

© Renato Conte

Bozza soluzione esercizio 3

Esistono molti modi per risolvere il problema: un modo sarebbe di fare il progetto concettuale con gli insiemi entità Sala, Film e l'associazione Proiezione (vedi anche figura pagina 11), tradurre col modello relazionale e ipotizzare un paio di

interrogazioni SQL con Join tra le tre tabelle. L'approccio ad oggetti può apparentemente complicare le cose. Propongo due soluzioni simili.

La classe Cinema potrebbe non essere obbligatoria, è utile come Façade e per gestire eventuali altri cinema

Vincoli molteplicità: un solo film in una determinata sala, ad una certa data/ora

risposta contiene una lista di risposte, anche vuota. Elaborata da Cinema in base alla join delle risposte di disponibilità tra Sale, Fiml e Ora-giorno risposta(x) e' la scelta fatta per la prenotazione

11 / 12

© Renato Conte Film titolo regista + ricercaFilm() 1..*

Cinema {Façade}

+ ricercaFilm() + prenotazione()

*

Sala

+ numSalaPosti(film) + prenotaPosto() - posto: boolean[*]

Proiezione - ora - giorno + dataOra(film)

:Cinema :Film :Proiezione :Sala

ricercaFilm(titolo) ricercaFilm(titolo)

f

dataOra(f) numSalaPosti(f) risposta

prenotazione(risposta(x))

prenotaPosto(risposta(x))

ricevuta

*

gestisce

* *

12 / 12

© Renato Conte Film

titolo regista + ricercaFilm()

1..* *

Cinema {Façade}

+ ricercaFilm() + prenotazione()

proiezione

*

Sala

+ numSalaPosti(film) + prenotaPosto() - posto: boolean[*]

Calendario - ora - giorno

+ dataOra(film)

:Cinema :Film :Calendario :Sala

ricercaFilm(titolo)

ricercaFilm(titolo)

f

dataOra(f) numSalaPosti(f) risposta

prenotazione(risposta(x))

prenotaPosto(risposta(x))

ricevuta

* gestisce *

Riferimenti

Documenti correlati

Inoltre, visto che il cilindro rotola senza strisciare, la velocit` a del centro di massa e la velocit` a angolare sono legate tra loro da v c

Il disco durante la rotazione non varia la sua energia potenziale quindi tutto si riduce alla variazione di energia potenziale della sferetta, ossia.. E f

L’energia cinetica del centro di massa alla fine del piano, sommata all’energia cinetica di rotazione appena ricavata dovr` a essere uguale all’energia potenziale

Con queste informazioni siamo in grado di calcolare il lavoro totale svolto sul gas durante il ciclo come la somma dei lavori sulle singole trasformazioni o, alternativamente,

Per calcolare la volocit` a un istante prima dell’impatto con il suolo possiamo considerare la conservazione dell’energia meccanica, tenendo conto che l’energia

(24) Per ricavare l’energia dissipata dopo un giro della puleggia ` e sufficiente calcolare il lavoro fatto dalla forza d’attrito sul blocco m 1 e sul blocco m 2 su uno spostamento

Possiamo ragionare nel modo seguente: se Mario raggiunge la sommit` a del suo salto nello stesso istante in cui il fungo inizia a cadere i due, nonostante le masse diverse,

Per poter fare il giro della morte due volte deve avere velocit` a v 0 (ricavata nel punto 1) dopo avere attraversato per due volte il tratto scabro di lunghezza L, una prima