Diagrammi di interazione! Sono usati per portare a compimento un caso d uso, un operazione o un alta componente comportamentale.! Mostrano la seguenza di eventi (messaggi) tra gli oggetti durante la collaborazione.! Sono usati negli stadi più avanzati dell analisi dei requisiti e di progettazione, quando il modello delle classi di base è noto.
Tipologie! Diagrammi di collaborazione Enfatizzano le relazioni (tra oggetti) lungo cui i messaggi sono scambiati. Di solito sono più utili nella fase di progettazione.! Diagrammi di sequenza Enfatizzano lo scambio di messaggi tra oggetti organizzato in sequenze temporale. Di solito sono più utili nella fase di analisi.! Sono interscambiabili.
Diagrammi di collaborazione (I)! Una collaborazione è rappresentata da un insieme di oggetti (che collaborano per portare a termine un compito) e di legami tra essi.! Un interazione è un insieme di messaggi che caratterizza un qualche comportamento.! Una collaborazione senza nessuna interazione (messaggio) può essere vista come un istanza del diagramma delle classi (oggetti, attori, legami).
Diagrammi di collaborazione (II)! Oggetti nomeoggetto: nomeclasse nomeoggetto -> suggerisce il ruolo dell oggetto nel diagramma. : nome Classe -> rappresenta una generica istanza della classe.! Legami Sono rappresentati come le associazioni nel diagramma delle classi. Sono istanze delle associazioni.! Attori Corrispondono agli attori rappresenati nei casi d uso. L attore che inizia un caso d uso o un diagramma d interazione si chiama iniziatore.
Messaggi (I)! La struttura di un messaggio corrisponde alla segnatura del metodo dell oggetto a cui il messaggio viene indirizzato.! Per inviare un messaggio l oggetto mittente deve fornire: L oid dell oggetto destinatario; Il nome dell operazione (metodo) nell oggetto destinatario; Gli argomenti attuali d ingresso (in) e di ritorno (out) o sia d ingresso che di ritorno (inout).
Messaggi (II)! L oid dell oggetto destinatario: Può essere contenuto in un attributo del mittente. Potrebbe corrispondere al nome dell oggetto destinatario sul diagramma: nomeoggetto.nomemessaggio(in x, out y)
Messaggi (III)! La specifica di messaggi conduce alla scoperta di operazioni.! La dipendenza tra i messaggi e le operazioni: ogni messaggio invoca l operazione del oggetto target che ha lo stesso nome del messaggio.
Tipi di messaggi! Messaggi inviati ad un oggetto classe: Costruttori/destruttori (messaggi per creare/distruggere oggetti istanza).! Messaggi inviati sia ad un oggetto classe sia ad un oggetto istanza: Di letttura (messaggi interogativi, orientati al presente); Di aggiornamento (messaggi informativi, orientati al passato); Di collaborazione (messaggi imperativi, orientati al futuro).
Messaggi iterativi! Un messaggio iterattivo è inviato ripetutamente a più oggetti di una classe.! Hanno una marca d iterazione: *.! Operano su collezioni (vettori, liste, ecc.).
Messaggi self! Specificano un invocazione locale (un metodo chiama un altro metodo nello stesso oggetto).! Oppure l oid del mittente è inviato al destinatario (di solito nei messaggi asincroni).
Messaggi asincroni! In un messaggio asincrono, l oggetto mittente non deve attendere che il destinatario finisca il proprio lavoro prima di continuare l esecuzione.! Sono utilizzati per l esecuzione concorrente di diverse operazioni.! Sono rappresentati con una mezza freccia.
Diagrammi di sequenza! Gli oggetti sono disposti lungo la dimensione orizzontale.! La sequenza dei messaggi è mostrata nella dimensione verticale.! Una linea verticale = linea di vita di un oggetto. Linea trateggiata oggetto non attivo (non in vita). Rettangolo stretto oggetto attivo (in vita).! Una freccia un messaggio da un oggetto mittente (sender) ad un oggetto destinatario (target).
Il sistema bibliotecario! Diagramma dei casi d uso: universitario (I) presta rivista UtenteMotoreRicerc a cerca libro/rivista PrestatarioRiviste ritorna rivista prest a copia libro ritorna copia libro PrestatarioLibri ResponsabileBibliot ecario aggiorna catalogo prenota libro estende prestito
Il sistema bibliotecario! Diagramma delle classi: universitario (II) Utente cerca Libro prenota è una copia 1 cerca MembroBiblioteca presta/ritorna/estende/scade 0..1 0..* 1.. * CopiaLibro Rivista presta/ritorna/scade PersonaleBiblioteca aggiungi/rimouvi 0..* 0..1 aggiungi/rimouvi
Il sistema bibliotecario! Diagramma delle classi: universitario (III) Utent e cerca cerca(s : String) : CopiaLibro [ ] prenot a Libro isbn : String titolo : String autore : String nocopie : Integer prenotato : Boolean getnocopiedisponibili() : Integer setnocopiedisponibili(n : Integer) getprenotato() : Boolean setprenotato(p : Boolean) è una copia 1 1.. * cerc a id : String nolibri : Integer MembroBiblioteca pres tacopialibro(libro : CopiaLibro) : Boolean ritornacopialibro(libro : CopiaLibro) : Boolean estendepres tito(libro : CopiaLibro) : Boolean prenota(libro : Libro) : Boolean getnolibri() : Boolean setnolibri(n : Integer) presta/ritorna/estende/scade 0..1 0..* CopiaLibro disponibile : Boolean dal : Date chi : MembroBiblioteca prest a(m : Mem brobibliotec a) : Boolean ritorna() : Boolean estende() : Boolean getdisponibile() : Boolean setdisponibile(b : Boolean) getdal() : Dat e setdal(d : Date) getchi() : M em brobiblioteca setchi(m : Mem brobiblioteca) Rivista disponibile : Boolean presta/ritorna/sc ade 0..* 0..1 PersonaleBiblioteca noriviste : Integer prestarivista(rivista) : Boolean ritornarivista(rivista : Rivista) : Boolean aggiungi/rimouvi aggiungi/ rimouvi
Presta copia libro: diagramma di collaborazione 4: setdisponibile(falso) 2: getnolibri( ) 5: setchi(m) 8: setnolibri(getnolibri()+1) 6: setdal(date) 3: presta(m) 1: prestacopialibro(c) unmembro : MembroBiblioteca copia : CopiaLibro 7: setnocopiedisponibili(getnocopiedisponibili()-1) libro : Libro : PrestatarioLibri
Presta copia libro: diagramma di sequenza : PrestatarioLibri : Mem brobiblioteca : CopiaLibro : Libro prestacopialibro(c) getnolibri( ) presta(m) s etdisponibile(false) setchi(m) setdal(date) setnocopiedisponibili(getnocopiedis ponibili()-1) setnolibri(getnolibri()+1)
Estende prestito: diagramma di collaborazione 1: estendeprestito(c) unmembro : MembroBiblioteca 2: estende( ) 3: getprenotato( ) copialibro : CopiaLibro libro : Libro : PrestatarioLibri
Estende prestito: diagramma di sequenza : PrestatarioLibri : MembroBiblioteca : CopiaLibro : Libro estendeprestito(c) estende( ) getprenotato( )
Il sistema di gestione delle lauree specialistiche (I)! Diagramma dei casi d uso: prepara programma corso Studente Laurea Specialistica iscrizione laurea specialistica insegna corso Docente Generico Studente Laurea Breve segue corso laurea specialistica consulta lista studenti Personale Generico consulta lista corsi Utente Generico Tutore Generico aiut a student e
Il sistema di gestione delle lauree specialistiche (II)! Diagramma delle classi: UtenteGenerico consulta lista studenti Personale Tutore 1 Docente 1 consulta lista corsi laurea specialistica aiuta 0..* Studente segue 1..* 1..* prepara programma/insegna 0..* Corso 6.. * compos to da StudenteLBreve Student els pecialistica iscrizione 0..* 1 1.. * LaureaSpecialistic a
Il sistema di gestione delle lauree specialistiche (III)! Diagramma delle classi: UtenteGenerico getlistacorsi() : Cors o [] consulta lista studenti id : Integer nome : String cognome : String indirizzo : String Personale getlistastudenti(ls : LaureaSpecialistica) : Studente [] Tutore liststudenti : Studente [] aggiungistudente(s : Studente) : Boolean rimuovistudente(s : Studente) : Boolean aiutastudente(s : Studente) aiuta 1 Docente listacorsi : Corso [ ] preparacorso(c : Corso) : Boolean aggiungicorso(c : Corso) : Boolean rimuovicorso(c : Corso) : Boolean 1 prepara programma/insegna consulta lista corsi laurea specialistica matricola : Integer nome : String cognome : String indirizzo : String corsi : Corso [] 0.. * Studente iscrizionecorso(c : Corso) : Boolean de-iscrizionecorso(c : Corso) : Boolean getmatricola() : Integer getnomecognome() : String segue 1..* 1..* Corso 0..* nome : String ore : Integer docente : Docente listastudenti : Studente [] programma : String aggiungistudente(s : Studente) : Boolean rimuovistudente(s : Studente) : Boolean getlistastudenti() : Studente [] 6..* composto da 1..* StudenteLBreve iscrizionelb() : Boolean StudenteLSpecialistica iscrizionels() : Boolean is crizione 0..* 1 LaureaSpecialistica nome : String listacorsi : Corso [ ] listastudenti : Studente [] aggiungicorso(c : Corso) : Boolean rimuovicorso(c : Corso) : Boolean aggiungistudente(s : Studente) : Boolean rimuovistudente(s : Studente) : Boolean getlistacorsi() : Corso [] getlistastudenti() : Studente []
Iscrizione laurea specialistica: diagramma di collaborazione 3: aggiungist udent e(t his) 4: aggiungist udent e(t his) corso1 : Corso 5: aggiungistudente(thi s) corso2 : Corso 1: iscrizionels( ) : Studente LSpeciali sti ca : Studente Laurea Specialistica 2: aggiungistudente(this) corso3 : Corso : LaureaS pecialist ica
Iscrizione laurea specialistica: diagramma di sequenza : Studente Laurea Speciali stica : StudenteLSpecialistica : LaureaSpecialistica : Cors o iscrizionels( ) aggiungistudente(this) * aggiungistudente(this)
Consulta lista studenti: diagramma di collaborazione 1: getnomecognome( ) : StudenteLBreve : Personale Generico : StudenteLSpecialistica 2: getnom ecognom e( )
Consulta lista studenti: diagramma di sequenza : Personale Generico : StudenteLB reve : St udent els pecialist ic a * getnomecognom e( ) * getnomecognome( )