Generalità Concetti di base: Oggetto, Classe, Attributo, Operazione, Associazione, Aggregazione, Generalizzazione, Ereditarietà Il Diagramma delle Classi: notazione UML 1 Generalità Approccio all analisi del problema basato sul principio del partizionamento rispetto agli oggetti oggetti intesi come entità/ concetti del dominio del problema con un proprio stato (struttura dei dati) e comportamento (operazioni/funzioni) evoluzione del concetto di Tipo di dato Astratto Principali differenze dall approccio procedurale (orientato alle funzioni): nell approccio procedurale, struttura dati e funzioni sono debolmente connesse l approccio OO è applicabile a tutte le fasi di sviluppo, analisi, progettazione, codifica: cambia solo il livello di astrazione ma non i concetti e la notazione 2 1
Concetti fondamentali dell OO Un sistema OO è visto come una collezione di oggetti discreti che interagiscono attraverso i servizi che essi offrono Classe (di oggetti): incapsulamento di struttura dati e funzioni Relazione tra oggetti: associazione, aggregazione e generalizzazione Ereditarietà e polimorfismo (specifico della progettazione) 3 Oggetto Definizione generale un oggetto rappresenta una qualsiasi cosa (reale o astratta) che abbia un confine definito (concetto associato) Definizione più specifica un oggetto è qualcosa di identificabile, che ricorda il proprio stato, e che può rispondere a richieste di operazioni relative al proprio stato Proprietà dell oggetto: attributi (o variabili di istanza) che descrivono lo stato operazioni (o metodi) che descrivono il comportamento Gli oggetti interagiscono tra di loro richiedendo servizi o informazioni reciprocamente in risposta ad una richiesta, un oggetto può invocare una operazione che può cambiare il suo stato 4 2
Classe (di oggetti) Una classe rappresenta un gruppo di oggetti con proprietà simili (attributi), comportamento comune (operazioni), relazioni comuni con altri oggetti e semantica comune. I termini oggetto e istanza (di classe) sono interscambiabili Dal punto di vista formale una classe equivale al tipo di dato astratto (incapsulamento di dati ed operazioni sui dati) un oggetto è un elemento del tipo 5 Incapsulamento Nome classe Attributo 1 Attributo 2 Attributo 3 Operazioni Attributi Operazione 1 Operazione 2 Operazione 3 6 3
Classi e Oggetti Persona (Persona) Mario Rossi (Persona) Luigi Verdi (Persona) Fabio Bianchi Classe Oggetti 7 Attributi Un attributo è una proprietà statica di un oggetto nome, età, peso sono attributi della classe Persona colore, peso, anno, modello sono attributi della classe Auto Un attributo contiene un valore per ogni istanza l attributo età ha valore 24 nell oggetto Mario Rossi I nomi degli attributi devono essere unici all interno di una classe Il valore di un attributo non ha identità (non è un oggetto) tutte le occorrenze di 24 sono indistinguibili 8 4
Operazioni Un operazione è un azione che un oggetto esegue su un altro oggetto e che determina una reazione Le operazioni su di un oggetto operano sui dati incapsulati dell oggetto Tipi di operazione selettore (query): accedono allo stato dell oggetto senza alterarlo (es. lunghezza della classe coda) modificatore: alterano lo stato di un oggetto (es. appendi della classe coda) Operazioni di base per una classe di oggetti: costruttore: crea un nuovo oggetto e/o inizializza il suo stato distruttore: distrugge un oggetto e/o libera il suo stato 9 Operazioni.. Nome classe Nome operazione Nome operazione (lista argomenti): tipo risultato Persona nome età cambia-lavoro() cambia-indir() File nome dimensione ultimo_aggiorn. Stampa( ) Oggetto geometrico colore posizione muovi(delta:vettore) seleziona(p:punto):boolean ruota(angolo) 10 5
Legami e Associazioni Un legame rappresenta una relazione (fisica o concettuale) tra oggetti es. Mario Rossi lavora per Dipartimento di Informatica Un associazione descrive un gruppo di legami aventi struttura e semantica comuni es. Persona lavora per Dipartimento Le relazioni sono bidirezionali sebbene il nome della relazione faccia riferimento ad un unica direzione 11 Associazioni e legami Nazione nome ha per capitale Città nome Diagramma delle classi (nazione) nome=canada ha per capitale (Città) nome=ottawa Diagramma degli oggetti (nazione) nome=italia ha per capitale (Città) nome=roma 12 6
Molteplicità delle associazioni (notazione UML) La molteplicità specifica quante istanze di una classe possono essere associate con una singola istanza di un altra classe Il simbolo di molteplicità adiacente alla classe 2 indica quante istanze della classe 2 possono avere legami con una singola istanza della classe 1 classe1 nome associazione 1 classe2 Uno ed uno solo classe1 nome associazione classe2 Opzionale (zero o uno) 0..1 classe1 nome associazione 0..* classe2 molti (zero o più di uno) classe1 nome associazione 1..* classe2 Uno o più di uno 13 Classe associativa e attributi di legame E utilizzata per modellare proprietà delle associazioni Un attributo di una classe associativa contiene un valore per ogni legame E in genere usata nelle associazioni molti-a-molti File accessibile da 0..* 1..* Utente Accesso permess o 14 7
Ruoli I ruoli forniscono una modalità per attraversare relazioni da una classe all altra i nomi di ruolo per una classe sono posti alla fine della relazione con un altra classe i nomi di ruolo possono essere usati in alternativa ai nomi delle associazioni I ruoli sono spesso usati per relazioni fra oggetti della stessa classe Utente 0..*Utente autorizzato 0..* proprietario 0..* Directory contenitore contenuto contiene 15 Aggregazione La relazione di aggregazione è un associazione speciale che aggrega gli oggetti di una classe componente in un unico oggetto della classe la si può leggere come è composto da in un verso e è parte di nell altro verso Proprietà transitività: se A è parte di B e B è parte di C, allora A è parte di C antisimmetria: se A è parte di B, allora B non è parte di A dipendenza: un oggetto contenuto potrebbe non sopravvivere senza l oggetto contenente Un albero di aggregazione rappresenta una classe con più di una relazione di aggregazione 16 8
Aggregazione classe composta classe composta 0..* classe componente classe parte 1 0..* classe parte 2 17 Aggregazione: un esempio documento titolo 0..1 sottosezione 1 0..* sezione 0..* paragrafo 1..* frase 18 9
Generalizzazione/specializzazione La relazione di generalizzazione rappresenta una tassonomia delle classi la classe generale è detta superclasse ogni classe specializzata è detta sottoclasse Può essere letta come è un tipo di (verso di generalizzazione) può essere un (verso di specializzazione) Ogni oggetto di una sottoclasse è anche un oggetto della sua superclasse 19 Generalizzazione superclasse sottoclasse1 sottoclasse2 Notazione UML 20 10
Ereditarietà L ereditarietà è un meccanismo di condivisione delle proprietà degli oggetti in una gerarchia di generalizzazione Tutte le proprietà (attributi e operazioni) di una superclasse possono essere applicati alle sottoclassi (sono ereditati) generalizzazione ed ereditarietà godono della proprietà transitiva è possibile definire nuove proprietà per le sottoclassi è possibile ridefinire le proprietà ereditate (eredità non stretta) 21 forma geometrica colore posizione riferimento spessore tratto muovi( ) seleziona( ) ruota( ) mostra( ) forma adimensionale forma monodimensionale orientamen to forma bidimensionale orientamento tipo-riempimento scala( ) riempi( ) punto linea punt i final arco raggio angolo polilinea pun ti poligono numero lati vertici cerchio centr o 22 11
Ereditarietà multipla Una sottoclasse ha più di una superclasse ed eredita la proprietà da tutte le superclassi comoda nella modellizzazione ma può creare conflitti nella realizzazione persona docente studente non docente dottorando studente_cdl studente_du istruttore corso 23 Un insieme di linee guida per l analisi Come condurre l analisi? Non esistono algoritmi, ma solo linee guida per condurre l analisi I passi fondamentali secondo l approccio di Code e Yourdon Identificare gli oggetti Identificare le strutture Identificare gli attributi Identificare le associazioni Definire i servizi 24 12
Linee guida per Identificare gli oggetti A partire da una descrizione del problema, identificare gli oggetti candidati fra i nomi corrispondenti a: entità fisiche, dispositivi, eventi ricordati, ruoli giocati, organizzazioni, etc. Un candidato può essere scelto come un oggetto se il sistema ha bisogno di ricordare qualcosa riguardo all oggetto se il sistema ha bisogno di qualche servizio offerto dall oggetto, per svolgere le sue funzioni se l oggetto presenta molti attributi 25 Identificare le strutture Catturare le relazioni di generalizzazione-specializzazione e quelle di aggregazione (tutto-parti) identificare le classi più generali e derivare quelle più specializzate che aggiungono o ridefiniscono attributi/ servizi es. In una libreria, gli oggetti da leggere possono specializzarsi in libri, riviste, giornali identificare oggetti in relazione di tutto-parti con altri oggetti es. la libreria (il tutto) si compone degli oggetti libro, rivista, materiale audio-visivo 26 13
Identificare gli attributi Per ciascun oggetto, valutare quali sono gli attributi che risultano rilevanti nel dominio del problema es. uno stesso attributo dell oggetto Persona (es. Altezza) può essere rilevante o meno a seconda del problema analizzato Collocare correttamente gli attributi nelle gerarchie di oggetti un attributo comune ad una gerarchia di oggetti, dovrebbe essere definito all interno della classe più generale (la superclasse), mentre quelli specifici di un oggetto specializzato, andranno nella classe specializzata (la sottoclasse) 27 Identificare le associazioni Le associazioni devono descrivere relazioni permanenti fra oggetti delle classi, non transitorie, legate ad un evento passeggero es. Persona lavora per Dipartimento Qualunque dipendenza fra due o più classi è una associazione una classe richiede una qualche risorsa dell altra Un riferimento da una classe ad un altra può essere modellato come una associazione 28 14
Identificare i servizi Ciascun oggetto offre servizi ad altri oggetti che ne fanno richiesta mediante un messaggio Identificare prima i servizi necessari per creare, distruggere e modificare le istanze della classe questi servizi non sono in genere evidenziati sul modello ad oggetti quindi identificare gli altri servizi necessari al sistema per fornire le funzionalità desiderate 29 L esempio del Ristorante Obiettivi richiesti al sistema: automatizzare la produzione del conto ai clienti, ottenere statistiche sulle vendite, determinare discordanze fra le forniture ricevute e quelle consumate, automatizzare gli ordinativi delle forniture Dalla descrizione del dominio del problema e dagli obiettivi richiesti al sistema si ottiene un primo insieme di oggetti candidati: Ristorante, Proprietario, Conto, Menu, Ordine-Cliente, Fornitore, Ordine-Fornitore, Gestore-Ordini, Piatti. Vanno eliminati gli oggetti: Proprietario, Piatti, Fornitore... perchè il sistema non deve conservare alcuna informazione su di essi 30 15
Modello ad oggetti iniziale Gestione Forniture Ordine-Fornitore Ristorante Menu Ordine Conto 31 Passi successivi Il Ristorante costituisce una aggregazione di Menu e di Gestione-Forniture Un Menu è una aggregazione di molte Voci-Menu (nuovo oggetto) Un Ordine-Fornitore è un aggregato di molti Elementifornitura (nuovo oggetto) Tra Ordine-Fornitore ed Elementi-fornitura c è una associazione con un attributo quantità Scelta degli attributi e delle associazioni Scelta dei servizi 32 16
Gestore Forniture Credito-Fornitura( ) Debito-Fornitura( ) Ordine-Fornitore 1..* Produci-assegno() Elemento-fornitura Nome-elemento Prezzo-unitario Ristorante quan.forn. Statistiche( ) Report-discrepanze( ) Menu Voce Menu Nome Numero Prezzo 1..* Forniture-usate 1..* Ordine 1..* Produci-conto( quantità forn. 33 17