Corso di Laurea Specialistica in Ingegneria Informatica Corso di Ingegneria del Software A. A. 2008 - Class Discovery E. TINELLI
Contenuti Classi di analisi: definizione ed esempi Tecniche per la definizione delle classi di analisi Regole pratiche 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.) Articolo_Biblioteca Numero di catalogo Data di acquisto Prezzo Attributi Tipo Stato Numero di copie Una classe di analisi non deve essere originata da considerazioni di progettazione Acquista() Cataloga() Disponi() Presta() Ritorna() 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. 4
Esempio 1 Boolean 1 preparato * Ordine NOrdine Ordine NOrdine Associazione * dataordine consegna() chiudi() Equivalente a dataordine preparato dataconsegna consegna() chiudi() 0 1 dataconsegna Data 5
Esempio 2 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) 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 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 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. 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 Insieme coeso di responsabilità Mostra i prodotti del carrello Alla classe CarrelloSpesa posso aggiungere responsabilità quali: Verifica la carta di credito Accetta il pagamento Stampa una ricevuta?? 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 12