UML, Astrazioni e Relazioni Astrazione
Transcript
UML, Astrazioni e Relazioni Astrazione
Astrazione • prendi qualcosa di concreto e lo fai diventare un UML, Astrazioni e Relazioni Prof. A. Calvagna • generalizzi: elimini i dettagli superflui, mantieni solo le proprieta’ significative 2007 • Vari livelli d’astrazione possibili • Al livello piu’ basso (il concreto): • ho un solo oggetto per tipo: ogni oggetto concreto ha sempre qualcosa di diverso da tutti gli altri • concetto, una categoria il mio paio di nike e’ ben diverso dal tuo paio di nike. • ogni livello di astrazione superiore individua un insieme sempre piu’ ampio di oggetti equivalenti • caratterizzati dalle stesse proprieta’ strutturali e funzionali (attributi e operazioni) • Esempi: • corriere della sera - giornale - media • nike “runners” - scarpa da ginnastica - calzatura • for (; ;) - loop infinito - ciclo Date due astrazioni A e B A Generalizza B A Realizza B A Dipende da B A Associata a B A Aggrega B A Compone B Class A Class B Class A Interface B Class A Class B Class A Class B Class A Class B Class A Class B Generalizzazione (IS-a) • A generalizza B: ogni istanza di tipo B e' anche vita indipendente • A possiede B (lo gestisce) • B e’ sì una parte di A, ma non solo di A • A e B sono astrazioni di pari livello. • A ha al suo interno un insieme (in senso A e’ una astrazione di livello piu’ alto rispetto a B: un insieme di oggetti piu’ ampio e generico. • in genere, A e’ consequenziale a B una istanza di tipo A • Si parte da B e si astrae ancora definendo A (possibile anche percorso inverso) • Le rispettive istanze dei due tipi hanno ciclo di • Composizione (Has subpart) • B e’ una parte di A • B non e' un A ma ne e’ una sua parte integrante, imprescindibile • Aggregazione (Has) B e' sensata solo nel contesto di A • puo' essere istanziata solo da un A (quindi dopo di A) • A e’ una astrazione di livello piu’ alto rispetto a B. matematico) di B Ciclo di vita di una istanza • creazione: chi dedice quando e’ il momento di allocarla? • accesso: chi si preoccupa di mantenere un riferimento valido alle istanze esistenti? • distruzione: chi decide quando eliminare una istanza? Prerogative di A su B Responsabilità => creazione accesso distruzione istanze istanze istanze legame nel codice... Relazione generalizzazione no no no realizzazione no no no dipendenza no no no associazione no no no aggregazione no si no composizione si si si tra tipi: A astrazione di B con le proprietà B A super di B A implements B parametri con l’impl. di B di tipo B in A strutturale, attributi di tipo B in A “relazione” in AxB e viceversa strutturale, attributi di tipo B in A “whole-part lasco” ma non viceversa strutturale, attributi di tipo B in A “whole-part stretto” con B inner class di A CLASSI INTERFACCE CLASSI ASTRATTE Classe Esempio • sintassi per l’astrazione • definisce le proprietà strutturali (attributi) e funzionali • e' un “orologio” qualsiasi cosa che... • mantiene internamente informazione (operazioni) caratterizzanti una categoria (un tipo) di oggetti • distintive rispetto alle altre categorie. • associata ad un’unica implementazione, completa, condivisa da tutte le sue istanze sull’ora (attributo) • mi consente di leggerla/regolarla (funzionalita') • ma solo ed esclusivamente questo! Interfaccia • sintassi per una porzione di astrazione • definisce un set di proprieta’ caratterizzanti un solo aspetto specifico • non distintivo di un’unica astrazione (non definisce un tipo) • senza una implementazione associata • trasversale a piu’ astrazioni esistenti (che la implementano) • può quindi avere molte implementazioni diverse, tutte valide allo stesso tempo. Classe Astratta • sintassi per una particolare astrazione la cui implementazione non e’ (del tutto) definibile. • • • le sue istanze sono oggetti non funzionanti (astratti) definisce comunque un tipo completo (struttura e funzioni) Le sottoclassi devono completare l’implementazione, ciascuna a modo suo Esempio • • Cosa è “iterabile”? qualsiasi cosa che mi consenta: first(), last(), next(), prev(), isDone()... ma non per forza solo questo! • • implements Runnable vs extends Thread • definisco un legame tra i tipi, introducendo di fatto un nuovo tipo di thread: • class MyThreadedClass extends Thread • class MyThreadedClass extends MyClass,Thread • dico solo che il mio tipo avrà anche un proprio thread di esecuzione: • class MyClass implements Runnable • NB: linguaggi senza ereditarietà multipla: • eliminata dai progettisti per semplificare i compilatori • le interfacce non vanno usate per compensarne la mancanza Esempio • Cosa e’ una figura geometrica? • un insieme di lati • area(), perimetro() • ...impossibile implementarla senza sapere lo specifico (sottotipo) di figura (cerchio, triangolo, ecc.).