Corso di Laurea Specialistica in Ingegneria Informatica
Class Discovery
E. TINELLI
Corso di Ingegneria del Software
A. A. 2008 - 2009
Contenuti
• Classi di analisi: definizione ed esempi
• Tecniche per la definizione delle classi di analisi
• Regole pratiche
E. TINELLI – Ingegneria del Software A. A. 20082008-2009
2
Le classi di analisi (1/2)
• Rappresentano un’astrazione
ben definita nel dominio del
problema e dovrebbero
corrispondere a concetti
concreti del dominio del sistema
(cliente, prodotto, ordine, ecc.)
• Una classe di analisi non deve
essere originata da
considerazioni di progettazione
Articolo_Biblioteca
Numero di catalogo
Data di acquisto
Prezzo
Tipo
Stato
Numero di copie
Acquista()
Cataloga()
Disponi()
Presta()
Ritorna()
E. TINELLI – Ingegneria del Software A. A. 20082008-2009
Attributi
Operazioni
3
Le classi di analisi (2/2)
• Attributi – descrivono una classe ed il suo significato nel dominio del
problema
• Operazioni – definiscono il comportamento di un oggetto e si distingue
tra: operazioni che manipolano i dati; operazioni di calcolo; operazioni
che richiedono lo stato di un oggetto; operazioni che monitorano un
oggetto per verificare un evento.
• Associazione – un modo per rappresentare le proprietà di una classe
N.B. Le proprietà rappresentano le caratteristiche strutturali di una classe
definite mediante due notazioni molto diverse: attributi e associazioni.
Quale scegliere? In generale si usano gli attributi per gli “oggetti valore”
(date, valori booleani, stringhe di caratteri, ecc.) e le associazioni per le classi
più significative o quando possono essere definiti più elementi di quel tipo.
E. TINELLI – Ingegneria del Software A. A. 20082008-2009
4
Esempio 1
Boolean
1
preparato
Ordine
Ordine
*
Associazione
*
NOrdine
dataOrdine
consegna()
chiudi()
Equivalente a …
NOrdine
dataOrdine
preparato
dataConsegna
consegna()
chiudi()
0…1 dataConsegna
Data
E. TINELLI – Ingegneria del Software A. A. 20082008-2009
5
Esempio 2
E. TINELLI – Ingegneria del Software A. A. 20082008-2009
6
Tecniche per la definizione delle classi di analisi
• Analisi nome/verbo
• Analisi Class-Responsibility-Collaborator
• Analisi use case driven – gli scenari sono stati descritti e
numerati Æ portano alla definizione degli oggetti, delle
responsabilità di ogni oggetto e di come gli oggetti
collaborano tra loro
• Analisi Common Class Pattern – linee guida che
considerano la classificazione degli oggetti (es. concetti,
eventi, persone, processi organizzativi, luoghi, ecc.)
• Approccio ibrido – combina gli approcci precedenti (es.
studio del dominio del problema, applicazione delle linee
guida del Common Class Pattern, aggiunta di classi con
l’analisi nome/verbo, verifica delle classi con l’analisi usecase driven, analisi CRC per la fase di analisi e negoziazione)
E. TINELLI – Ingegneria del Software A. A. 20082008-2009
7
Analisi nome/verbo
• Analizzando direttamente il linguaggio del problema (i testi)
si individuano i nomi o le frasi nominali (classi o attributi) e
i verbi (responsabilità/operazioni di una classe)
• Problemi:
– Sinonimia e omonimia
– Classi “nascoste”
• Potenziali fonti di informazione:
–
–
–
–
Specifiche dei requisiti
Casi d’uso
Glossario
Documentazione varia (dominio, architettura, ecc.)
• Classificazione delle classi: Irrelevant Class, Relevant Class,
Fuzzy Class
E. TINELLI – Ingegneria del Software A. A. 20082008-2009
8
Analisi nome/verbo - Esempio
• Requisiti relativi ad un sistema che gestisce le Iscrizioni
all’Università:
– Ogni corso di laurea ha corsi obbligatori e corsi facoltativi
– Ogni corso ha un numero di crediti e può appartenere a diversi corsi
di laurea
– Ogni corso di laurea specifica il minimo numero di crediti per laurearsi
– Gli studenti possono combinare dei corsi offerti dalla facoltà in modo
da definire un programma di studio individuale
• Bisogna individuare nomi, frasi nominali, verbi e predicati
verbali
Classi Rilevanti: Corso, Laurea, Studente, Corsi offerti
Classi Fuzzy: Corsi obbligatori, Corsi facoltativi, Programma di studio
E. TINELLI – Ingegneria del Software A. A. 20082008-2009
9
Analisi CRC
• Raccolta di schede che rappresentano le classi suddivise in 3 parti: nome
della classe (e descrizione), le responsabilità ed i collaboratori
• Responsabilità: sono gli attributi e le operazioni rilevanti per la classe
• Collaboratori: le classi che sono necessarie per completare una
responsabilità della classe in oggetto (richiesta di informazioni o richiesta di
azione)
• Una possibile classificazione delle classi:
– Classi per entità – rappresentano in genere elementi che possono essere
memorizzati in un database
– Classi di confine – vengono utilizzate per definire l’interfaccia con cui
l’utente finale interagisce
– Classi di controllo – considerate di solito in fase di progettazione
gestiscono la creazione/aggiornamento di oggetti entità, la comunicazione tra
insiemi di oggetti, la convalida dei dati scambiati, ecc.
E. TINELLI – Ingegneria del Software A. A. 20082008-2009
10
Una buona classe di analisi ha …
• La massima coesione interna
• La minima interdipendenza con altre classi
• Esempio: sistema di commercio elettronico
– La classe CarrelloSpesa avrà responsabilità del tipo:
• Aggiungi un prodotto al carrello
• Rimuovi un prodotto dal carrello
• Mostra i prodotti del carrello
Insieme coeso di responsabilità
– Alla classe CarrelloSpesa posso aggiungere responsabilità quali:
• Verifica la carta di credito
• Accetta il pagamento
• Stampa una ricevuta
??
E. TINELLI – Ingegneria del Software A. A. 20082008-2009
11
Regole pratiche
• Evitare di avere classi troppo piccole o classi troppo complesse
(considerare tra le 3 e le 5 responsabilità per classe) Æ se l’intelligenza
del sistema viene distribuita più uniformemente sulle varie classi si
migliora la coesione del sistema e si facilita la manutenzione
• Le responsabilità di una classe devono esibire lo stesso livello di
astrazione
• Per identificare i collaboratori si possono esaminare 3 relazioni: “fa parte
di”, “è a conoscenza di”, “dipende da”;
• Incapsulazione: le informazioni ed il relativo comportamento dovrebbero
risiedere nella stessa classe
• Nessuna classe può essere isolata
• Evitare i “functoid”
• Evitare gli alberi di ereditarietà profondi
• Una classe con un unico attributo può essere utile per la progettazione
ma è probabilmente meglio rappresentata come attributo in fase di analisi
E. TINELLI – Ingegneria del Software A. A. 20082008-2009
12