Classi e stati Claudia Raibulet raibulet@disco.unimib.it la classe Cane modella le proprietà comuni di un insieme di oggetti quali attributi ha un cane peso colore come si comporta abbaia morde quali comandi può ricevere chiama non è necessario descrivere separatamente Fido e Pluto, sono classificati come cani Classi e oggetti sappiamo già che Fido, in quanto cane, abbaia, morde e può essere chiamato personalizzare gli attributi: l oggetto di Fido è un cane nero il cui peso è 17 kg oggetti un oggetto con un insieme di proprietà Fido 17 kg nero abbaia morde chiama un altro oggetto con un insieme di proprietà Pluto 12 kg bianco abbaia morde chiama Fido è un esemplare di cane Pluto è un esemplare di cane Astrazione instance-of :
Relazioni fra classi e oggetti Classificazione ( instance_of ) lega istanze e classi ogni oggetto della classe possiede le proprietà definite dalla classe Generalizzazione ( is_a ) lega una classe genitore (superclasse) a due o piu classi figlie (sottoclassi) che ne sono un sottoinsieme Aggregazione ( part_of ) lega una classe Aggregato con un insieme di classi Parti ogni oggetto di Aggregato è costituito da oggetti delle classi Parti caso particolare di Associazione Associazione lega fra loro una o più classi ogni oggetto di una delle classi può essere associato a oggetti delle altre classi Classi in UML della classe attributi operazioni Cane peso colore abbaia() morde() chiama()
Associazioni in UML cardinalità dell associazione Persona datanascita codfiscale...() Cane peso 0..1 possiede 0..* colore +padrone +cane abbaia() morde() chiama() ruolo Proprietà delle associazioni Nome: esprime il significato dell associazione spesso è un verbo opzionale (ma consigliato ) Ruolo: esprime il ruolo giocato dal partner spesso è un sostantivo o un aggettivo opzionale (ma consigliato ) Cardinalità: esprime quante istanze della classe possono essere associate all altra classe 1 - esattamente una n - esattamente n 0..* - zero o più 1..* - una o più 0..1 - zero o una eccetera
Esempio di cardinalita 1 a 1 ogni Cane è posseduto da 1 Persona ogni Persona possiede 1 Cane Persona 1 possiede 1 Cane Esempio di cardinalita 0 a * ogni Cane è posseduto da 1 Persona ogni Persona possiede un numero qualsiasi di Cani (anche 0) Persona 1 possiede 0..* Cane
Esempio di cardinalita 0 a 1 e 0 a * ogni Cane è posseduto da 0 o 1 Persona ogni Persona possiede un numero qualsiasi di Cani (anche 0) Persona 0..1 0..* possiede Cane Esercizio 1 Si chiede di modellare le partenze e gli arrivi nelle stazioni feroviare tramite un diagramma UML. Ogni stazione e descritta da un Ogni partenza e descritta dall orario di partenza, da un eventuale ritardo relativo alla partenza e la sua destinazione Ogni arrivo e descritto dall orario di arrivo e da un eventuale ritardo di arrivo Per ogni partenza e arrivo si specifica anche il binario caratterizzato da un numero univoco Una stazione puo avere da 3 a 30 binari
Esercizio 1 - Soluzione Partenza orario ritardo destinazione 1..* Stazione 1..* 1 1 1..* Arrivo orario ritardo provenienza 0..* 1 3..30 Binario 1 1 numero 0..* Esercizio 2 Si chidede di modellare la struttura di un edificio tramite un diagramma UML Un edificio ha almeno un piano, ma non piu di 50 Un piano ha vari appartamenti di varie metratture Un appartamento e caratterizzato dalla sua superficie e puo avere da una a cinque stanze Una stanza puo comunicare o meno con altre stanze dell appartamento
Esercizio 2 - Soluzione Edificio 1 Piano 1..50 Appartamento Stanza 1 1..6 1 1..5 0..4 0..4 comunica Diagrammi di stato Diagrammi statechart Claudia Raibulet raibulet@disco.unimib.it
Modellazione con statechart Un modello statechart è un estensione dei modelli basati su automi a stati finiti. Gli statechart descrivono le modifiche dinamiche degli stati di una classe (evoluzione degli oggetti della classe). Descrivono il comportamento di un qualunque oggetto della classe. Stati e transizioni Stati e transizioni Lo stato di un oggetto = l insieme dei valori attuali dei suoi attributi. L identità di un oggetto non muta mai. Un oggetto cambia lo stato tramite una transizione di stato. Soltanto i cambiamenti significativi provocano una transizione di stato: Una persona diventa ricca se il suo conto in banca supera 1 milione di euro. Altrimenti, anche se il suo conto corrente cambia, resta una persona non-ricca.
Diagrammi statechart Mostrano come gli oggetti di una classe reagiscono a determinati eventi, cioè quale azione fa un oggetto all accadere di un certo evento. L azione dell oggetto dipende dallo stato in cui esso si trova e determina di solito una modifica dello stato. Transizioni evento [parametri] [guardia] / [azione] Un evento è il verificarsi, in un certo momento, di un fatto che interessa qualsiasi oggetto della classe. Un evento può avere dei parametri. Innesca la transizione. Guardia l evento può essere condizionato da una guardia (condizione); solo quando la condizione è vera l azione viene eseguita. L azione/attivita è una breve computazione eseguita quando la transizione scatta. Uno stato può contenere computazioni complesse, cioè delle attività. Osservazione: gli elementi delle transizioni sono tutti opzionali transizioni automatiche (senza trigger) transizioni non condizionate (senza guardia) transizioni senza attività
Esempio: stati di un cane evento attività transizione accarezza / scodinzola guardia accarezza / abbaia Normale [stomaco vuoto] / abbaia Affamato / scodinzola cibo servito stato iniziale stato PastoInCorso [deperimento] accarezza / morde stato finale Esercizio 3 Si chiede di modellare i clienti di una banca con i loro conti correnti. Ogni banca ha un e un indirizzo e ha un minimo di 1000 conti correnti. Un cliente e descritto dal suo, cog, codice fiscale e data di nascita. Un cliente puo avere soltanto un conto corrente nella banca. Per ogni conto corrente si specifica il saldo. Esistono conti correnti speciali per cui sono disponibili soltanto un numero limitato di operazioni (per esempio 100 operazioni all anno). Le operazioni che puo fare un cliente sono relative ad un prelievo o un versamento oppure ad un interrogazione del saldo disponibile. Per ogni operazione effettuata da un cliente il suo conto deve essere aggiornato. La banca ha il diritto di aprire e chiudere conti correnti. Si chiede il diagramma delle classi.
Esercizio 3 - Soluzione Banca indirizzo apricc() chiudicc() ContoCorrente saldo 1 1000..* 1 1 aggiornasaldo() Cliente cog datadinascita codicefiscale preleva() versa() richiedisaldo() ContoCorrenteSpeciale numerooperazioni Esercizio 4 Quando un cliente apre un conto corrente puo scegliere di effettuare un versamento oppure di lasciare il conto vuoto. Se il cliente effettua un versamento allora il conto e in un stato normale con saldo maggiore di zero, altrimenti e in uno stato vuoto con saldo uguale a zero. Se il cliente preleva una somma maggiore del saldo allora il conto resta in rosso. Se il cliente lascia il conto in rosso piu di 30 giorni allora il conto viene bloccato. Per sbloccare il conto il cliente deve fare un versamento. Si chiede il diagramma di stato per la classe ContoCorrente.
Esercizio 4 - Soluzione effettua versamento[ somma > 0 ] / versa apri nuovo conto / apricc chiudi conto / chiudicc Vuoto effettua versamento[ somma > 0 ] / versa effettua prelevamento[ somma = saldo ] / preleva Normale effettua prelevamento[ saldo-somma > 0 ] / preleva effettua versamento[ saldo+somma > 0 ] / versa effettua versamento[ saldo+somma > 0 ] / versa effettua prelevamento[ saldo -somma < 0 ] / preleva Bloccato [ piu' di 30 giorni ] InRosso