Modellare con le Classi Che cosa è UML?
Transcript
Modellare con le Classi Che cosa è UML?
Modellare con le Classi Che cosa è UML? UML ( Unified Modelling Language ) è un linguaggio grafico standard per m o d e l l a r e software object oriented • T r a la fine d e g l i a n n i ‘8 0 e g l i i n i z i d e g l i a n n i ’90 f e c e r o la c o m p a r s a i primi processi di s v i l u p p o object - oriented • La proliferazione di metodi e notazioni diverse creavano confusio n e • Due importanti metodologi, R u m b a u g h e Booch, decisero di fondere i l o r o a p p r o c c i nel 1 9 9 4 . — Cominciarono a lavorare insieme alla Rational Software Corporation • Nel 1 9 9 5 , u n altro m e t o d o l o g o, J a c o b s o n , s i u n ì al g r u p p o — Il suo lavoro si concentrava sugli use cases • N l e 1 9 9 7 l’ Object M a n a g e m e n t G r o u p ( O M G ) cominci ò il processo di standardizzazione di U M L Prof.ssa A.R. Fasolino Modellare con le classi 2 1 Diagrammi UML • Class diagrams — Descrivono le classi e le loro relazioni • Interaction diagrams — Mostrano il comportamento del sistema attraverso la rappresentazione di come gli oggetti interagiscono tra loro • State diagrams e activity diagrams — Mostrano il modo in cui i sistemi si comportano internamente • Component e deployment diagrams — Mostrano come i vari componenti del sistema sono logicamente e fisicamente dislocati Prof.ssa A.R. Fasolino Modellare con le classi 3 Caratteristiche di UML • Ha una semantica precisamente definita • Possiede meccanismi di estensione • Possiede un linguaggio testuale associato — Object Constraint Language (OCL) L ’obiettivo di U M L è di fornire un s u p p o r t o a l processo di sviluppo s o f t w a r e — Non è una metodologia — Può essere usato all’interno dei processi di sviluppo che adottano le proprie metodologie Prof.ssa A.R. Fasolino Modellare con le classi 4 2 Caratteristiche di un buon modello Un modello dovrebbe • Usare una notazione standard • Essere comprensibile sia dagli utenti che dai clienti • Permettere agli ingegneri del software di avere precise indicazioni sulle caratteristiche del sistema • Fornire informazioni usando diversi livelli di astrazione I M o d e l l i sono usati per: • Aiutare a creare il progetto. • Permettere l’analisi e la revisione dei documenti di progetto. • Diventare la parte principale della documentazione del sistema . Prof.ssa A.R. Fasolino Modellare con le classi 5 Aspetti principali dei Class Diagram UML I principali el e m e n t i dei class d i a g r a m sono : • Classi - R a p p r e s e n t a n t i i tipi d i d a t i p r e s e n t i i n u n s i s t e m a • Associazioni - Rappresentano i collegamenti fra istanze di classi • Attributi - Sono I dati semplici presenti nelle classi e nelle loro istanze • Operazioni - R a p p r e s e n t a n o le f u n z i o n i s v o l t e d a l l e c l a s s i e d a l l e l o r o istanze • Generalizzazioni - R a g g r u p p a n o le c l a s s i i n g e r a r c h i e d i e r e d i t a r i e t à Prof.ssa A.R. Fasolino Modellare con le classi 6 3 Classi U n a classe è s e m p l i c e m e n t e r a p p r e s e n t a t a da un rettangolo con i l n o m e della classe all ’interno • Il diagramma può anche mostrare gli attributi e le operazioni • La signature completa di un’operazione è: o p e r a t i o n N a m e( p a r a m e t e r N a m e: p a r a m e t e r T y p e … ): r e t u r n T y p e Rectangle Rectangle getArea resize Prof.ssa A.R. Fasolino Rectangle Rectangle Rectangle height width height width height: int width: int getArea resize getArea(): int resize(int,int) Modellare con le classi 7 Associazioni e Molteplicità Un’associazione rappresenta una relazione (fisica o concettuale) tra classi es. Persona lavora per Dipartimento • Le relazioni sono bidirezionali s e b b e n e i l n o m e d e l l a relazione faccia riferimento ad un’unica direzione La molteplicità specifica quante istanze di una classe possono essere associate con una singola istanza di un’altra classe. Prof.ssa A.R. Fasolino Modellare con le classi 8 4 Molteplicità delle associazioni Il simbolo di molteplicità adiacente alla classe 2 indica quante istanze della classe 2 possono avere legami con una singola istanza della classe 1 1=Valore di default nome associazione Uno ed uno solo classe2 classe1 11 nome associazione classe1 Opzionale (zero o uno) classe2 0..1 *= molti nome associazione classe1 molti (zero o più di uno) classe2 0..* nome associazione classe1 Uno o più di uno classe2 1..* Modellare con le classi Prof.ssa A.R. Fasolino 9 Associazioni e Molteplicità Esempi di associazioni e molte plicità Employee * Secretary * Company 1..** Company Office Person Manager BoardOfDirectors 0..1 0,3..8 * * Employee BoardOfDirectors intervallo Prof.ssa A.R. Fasolino Modellare con le classi 10 5 Nominare le Associazioni • Ogni associazione può avere un nome, per esplicitare il suo significato ( nome di associazione o n o m e d i r u o l o ) Employee worksFor * Company Secretary * 1..** Manager supervisor Company Office Person BoardOfDirectors 0..1 allocatedTo 0,3..8 * * Employee BoardOfDirectors boardMember Modellare con le classi Prof.ssa A.R. Fasolino 11 Come analizzare e validare le associazioni Tre pattern di mo lteplicità r i c o r r e n t i : • U n o -a - m olti — Una compagnia ha molti impiegati, — Un impiegato può lavorare per una sola compagnia. - L a c o m p a g n i a n o n c o n o s c e le a t t i v i t à e x t r a s v o l t e dai s u oi impiegati! — Una compagnia può avere zero impiegati - Es. Una compagnia fittizia — Non è possi bile conservare dati di un impiegato se non lavora per una compagnia Employee * Prof.ssa A.R. Fasolino worksFor Company Modellare con le classi 12 6 Come analizzare e validare le associazioni • Molti -a - molti (2 ° pattern) — Un segretario può lavorare per molti manager — Un manager può avere molti segretari — I segretari possono lavorare in gruppi — I Manager possono avere un gruppo di segretari — Alcuni manager potrebbero non avere segretari. — E’ possibile che un segretario abbia, anche temporaneamente, zero manager? Secretary * 1..** Manager supervisor Prof.ssa A.R. Fasolino Modellare con le classi 13 Come analizzare e validare le associazioni • U n o -a - uno (3 ° p a t t e r n ) — Ogni compagnia possiede 1 ed 1 sol corpo dirigente — Ogni corpo dirigente appartiene ad una sola compagnia — Una compagnia ha sempre un corpo dirigente — Un corpo dirigente deve far sempre parte di una compagnia Company Prof.ssa A.R. Fasolino BoardOfDirectors Modellare con le classi 14 7 Come analizzare e validare le associazioni Evitare associazioni uno -a - uno i n u t i l i ! Evitare ciò Person m i g l i o r e soluzione! PersonInfo Person address email birthdate name name address email birthdate Modellare con le classi Prof.ssa A.R. Fasolino 15 Un esempio più complesso • Una prenotazione (booking) si riferisce sempre ad un solo passegger o — Non esistono prenotazioni con zero passeggeri - Ciò implica che prima di creare una prenotazione deve esistere un passeggero — Una prenotazione non può mai riferirsi a più di un passeggero. • Un Passeggero può avere più prenotazioni — Un passeggero potrebbe avere zero prenotazioni — Un passeggero potrebbe avere più di una prenotazione Passenger Prof.ssa A.R. Fasolino * Booking * Modellare con le classi SpecificFlight 16 8 Classi associative • In alcuni casi, un attributo che si riferisce a due classi collegate non può essere riferito a nessuna delle due • Può esistere nel caso di molteplicità molti-a-molti * Student * CourseSection Soluzioni equivalenti Registration livello Student * Registration * CourseSection livello — P r i m a d i c r e a r e u n ’ i s t a n z a d e l l a c l a s s e R e g i s t r a t i o n, d e v o n o esistere le istanze delle classi collegate Modellare con le classi Prof.ssa A.R. Fasolino 17 Associazioni riflessive • Associazioni che collegano una classe con se’ stessa successor * Course * * isMutuallyExclusiveWith * prerequisite Associazione asimmetrica Prof.ssa A.R. Fasolino Associazione simmetrica Modellare con le classi 18 9 Direzionalità delle associazioni • Le associazioni sono per default bi-direzionali • È possibile limitare il verso di percorrenza di una relazione aggiungendo una freccia ad un estremo Giorno * Nota E s. Un sistema calendario • Att. Rimandare queste scelte alla fase di design (limitano la flessibilit à) Modellare con le classi Prof.ssa A.R. Fasolino 19 Generalizzazioni Specializz a re una superclasse in due o pi ù sottoclassi • Il discriminatore è una etichetta che descrive i criteri usati nella specializzazione Animal Animal habitat AquaticAnimal LandAnimal typeOfFood Carnivore Herbivore — Un discriminatore potrà essere implementato come un attributo con valori diversi nelle due sottoclassi Prof.ssa A.R. Fasolino Modellare con le classi 20 10 Evitare generalizzazioni inopportune Recording Gerarchia inadeguata: meglio usare varie istanze! VideoRecoding MusicVideo Recording * hasCategory RecordingCategory title artist description JazzRecording ClassicalRecording subcategory :RecordingCategory video audio subcategory music video subcategory subcategory :RecordingCategory :RecordingCategory :RecordingCategory :RecordingCategory classical blues jazz BluesRecording RockRecording Migliore Class diagram, ed il corrispondente Diagramma delle istanze * :RecordingCategory :RecordingCategory AudioRecording subcategory subcategory rock :Recording :Recording 9th Symphony Beethoven Let it be The Beatles Modellare con le classi Prof.ssa A.R. Fasolino 21 Gestire gerarchie con discriminatori multipli • Una soluzione: creare generalizzazioni di più alto livello Animal habitat Svantaggio: Tutte le proprietà del secondo discriminatore sono duplicate AquaticAnimal typeOfFood typeOfFood AquaticCarnivore AquaticHerbivore Prof.ssa A.R. Fasolino LandAnimal LandCarnivore LandHerbivore Modellare con le classi 22 11 Gestire gerarchie con discriminatori multipli • Usando l’ereditarietà multipla Animal typeOfFood habitat AquaticAnimal AquaticCarnivore LandAnimal AquaticHerbivore Carnivore LandCarnivore Herbivore LandHerbivore Modellare con le classi Prof.ssa A.R. Fasolino 23 Evitare che un oggetto di una gerarchia debba cambiare classe • I linguaggi non permettono questo cambiamento: bisognerebbe distruggere l’oggetto corrente e crearne uno nuovo dell’altra classe, assegnandogli tutte le associazioni che il primo aveva con altri oggetti… Student attendance FullTimeStudent PartTimeStudent • Sarebbe meglio introdurre un attributo ‘tipoFrequenza’ ma perderei i vantaggi del polimorfismo Prof.ssa A.R. Fasolino Modellare con le classi 24 12 Diagrammi di Istanza • Un diagramma che contiene esplicitamente oggetti (istanze di classi) e link ( istanze di associazioni) esistenti a run-time Pat:Employee Wayne:Employee OOCorp:Company OOCorp's Board: UML inc:Company UML inc's Board Ali:Employee Carla:Employee Terry:Employee • Utili per modellare specifici scenari –ma sono meno generali dei class diagram Prof.ssa A.R. Fasolino Modellare con le classi 25 Confronto fra associazioni e generalizzazioni nei diagrammi d’istanza • Le associazioni descrivono le relazioni che esisteranno fra istanze a run time. — In un diagramma d’istanza generato da un class diagram, ci sar à sempre un’istanza di entrambe le classi collegate da una associazione • Le generalizzazioni descrivono relazioni fra classi nei class diagrams. — Non compaiono nei diagrammi d’istanza. — Un’istanza di una classe avrà gli attributi della classe più quelli delle superclassi da cui discende (in pratica dovrebbe essere considerata anche come un’istanza di ciascuna delle superclassi della classe …) Prof.ssa A.R. Fasolino Modellare con le classi 26 13 Ulteriori aspetti dei class diagram: Aggregazione • Le Aggregazioni sono speciali associazioni che rappresentano una relazione ‘tutto-parti ’. — Il lato del ‘tutto’ è spesso chiamato l’aggregato — Il simbolo dal lato del tutto sostituisce una associazione avente nome i s P a r t O f Vehicle * VehiclePart Country * Prof.ssa A.R. Fasolino Region Modellare con le classi 27 Quando usare una aggregazione U n a associazi o n e d i v e n t a u n a a g g r e g a z i o n e s e : • È possibile affermare che: — Le parti sono ‘parte di’ un insieme — L’aggregato è ‘composto da’ parti • Quando qualcosa possiede o controlla l’aggregato, allora esso possiede o controlla anche le sue parti Prof.ssa A.R. Fasolino Modellare con le classi 28 14 Una gerarchia di aggregazione documento 0..1 titolo sottosezione 0..* 1 sezione 0..* paragrafo frase 1..* Prof.ssa A.R. Fasolino Modellare con le classi 29 Composizione • Una composizione è una forma forte di aggregazione — Se l’aggregato viene distrutto, anche le sue parti saranno distrutte (le parti non esistono senza il tutto) Palazzo * Stanza • Due alternative per rappresentare l’indirizzo (composizione uno-a-uno): Employee Employee address: Address Prof.ssa A.R. Fasolino Address street municipality region country postalCode Modellare con le classi 30 15 Gerarchia di Aggregazione Veicolo Chassis * * Carrozzeria Porta * Telaio Motore Trasmissione Ruota L’aggregazione fornisce indicazioni utili al progettista che potr à scegliere di incapsulare il codice delle parti nella classe aggr egata Prof.ssa A.R. Fasolino Modellare con le classi 31 Propagazione • Un meccanismo secondo cui un’operazione in un aggregato è implementata facendo svolgere all’aggregato l’operazione sulle sue parti. • Analogamente, le propriet à delle parti si propagano indietro verso l’aggregato (e s . C a l c o l o il p e s o t o t a l e t r a m i t e il peso delle parti) • La Propagazione sta all’aggregazione come l’ereditariet à sta alla generalizzazione. — Differenza fondamentale: - L ’ er e d i t a r i e t à è un m e c c a n i s m o i m p l i c i t o - L a p r o p a g a z i o n e d e v e e s s e r e p r o g r a m m a t a, s e r i c h i e s t a Polygon Prof.ssa A.R. Fasolino * LineSegment Modellare con le classi 32 16 Interfaccia U n ’interfacci a descriv e una porzione c o m p o r t a m e n t o v i s i b i l e d i u n insi e m e di oggetti . del • Un’ interfaccia è simile ad una classe, tranne che essa non possiede variabili d’istanza nè metodi implementati. • Una o pi ù classi possono fornire l’implementazione dell’interfaccia. Person «interface» Cashier Machine withdraw deposit Employee Person Machine Cashier ATM Prof.ssa A.R. Fasolino Employee Modellare con le classi Cashier ATM 33 Note e testo descrittivo T r e m o d i p e r a g g i u n g e r e i n f o r m a z i o n i a i d i a g r a m mi U M L • Testo descrittivo e a l t r i d i a g r a m m i — Includere i diagrammi UML in altri documenti — Descrizioni testuali aggiuntive possono essere utili a specificare altri aspetti o caratteristiche non specificabili in UML • Note : — Una nota è un pezzo di testo incluso in un diagramma UML — È come un commento in un linguaggio di programmazione Prof.ssa A.R. Fasolino Modellare con le classi 34 17 Object Constraint Language (OCL) O C L è un linguaggio di specifica progettato per specificare vincoli nei moduli software • Una espressione OCL specifica un vincolo (predicato logico) sul sistema che deve assumere valore v e r o • Un vincolo non può avere side-effects — Non può calcolare un risultato non-Boolean nè modificare alcun dato. • Gli statements OCL nei class diagrams possono specificare quali devono essere i valori di attr ibuti e associazioni: il programmatore dovr à poi rispettare tali vincoli Modellare con le classi Prof.ssa A.R. Fasolino 35 OCL statements Gli s t a t e m e n t s O C L po s s o n o essere costruiti usando : • Riferimenti a nomi di ruolo, nomi di associazioni, attributi ed I risultati di operazioni • I valori logici true e false • Operatori logici come a n d , o r, =, >, < o <> (not equals) • Stringhe di caratteri quali: ‘a s t r i n g’ • Interi e numeri reali • Operatori aritmetici : *, / , +, - Prof.ssa A.R. Fasolino Modellare con le classi 36 18 Esempio: vincoli sui poligoni {edge->forAll(e1,e2 | e1 <> e2 implies e1.startPoint <> e2.startpoint and e1. endPoint <> e2.endpoint)} a LinearShape is any shape {ordered} that can be constructed of line segments (in contrast with shapes that contain curves). LinearShape edge 1..* LineSegment startPoint : Point endPoint : Point length : int Path Line Polygon {startPoint <> endPoint} {edge->first.startPoint = edge->last. endPoint} length {edge->size=1} {length = edge.length->sum} RegularPolygon {edge->forAll(e1,e2 | e1.length = e2.length)} Modellare con le classi Prof.ssa A.R. Fasolino 37 Un esempio dettagliato: un Class Diagram per una Genealogia Person name sex placeOfBirth dateOfBirth placeOfDeath {husband.sex dateOfDeath = #male} placeOfMarriage child husband dateOfMarraige 0..1 dateOfDivorce * wife parent 0..1 2 {wife.sex = #female} {parent->forAll(p1,p2: p1 <> p2 implies p1.sex <> p2.sex)} • Problemi — Una persona d e v e avere sempre due genitori — I Matrimoni non sono gestiti adeguatamente (persone con più matrimoni?) Prof.ssa A.R. Fasolino Modellare con le classi 38 19 Genealogia : Possibili soluzioni Person Person name sex placeOfBirth dateOfBirth placeOfDeath child dateOfDeath * name placeOfBirth dateOfBirth placeOfDeath child dateOfDeath * partner * 0..2 {partner->forAll(p1,p2 | p1 <> p2 implies p1.sex <> p2.sex)} * Union Woman Man 0..1 * 0..1 child malePartner femalePartner child 0..1 placeOfMarriage parents dateOfMarriage dateOfDivorce * * Union 0..1 placeOfMarriage parents dateOfMarriage dateOfDivorce Prof.ssa A.R. Fasolino Modellare con le classi 39 Una raccomandazione In relazione ai Class diagram, UML include altri aspetti di cui non ci siamo occupati. E s. • notazione per le classi parametriche ( template) •Visibilità di attributi e metodi •Relazioni di dipendenza fra classi… Fare riferimento allo standard!!! Prof.ssa A.R. Fasolino Modellare con le classi 40 20 Il processo di sviluppo dei Class Diagrams I d i a g r a m mi U M L possono essere creati in diverse fasi del ciclo di vita , con diversi scopi e livelli di dettaglio • Exploratory domain model: — Viene sviluppato nella fase di analisi del dominio del problema per documentare ciò che si è appreso • System domain model: — Descrive aspetti del dominio del problema che saranno presenti nel sistema (i dati di interesse) • System model: — Include anche classi che saranno usate per costruire le interfacce utente e l’architettura del sistema Prof.ssa A.R. Fasolino Modellare con le classi 41 System domain model vs System model • Il system domain model trascura molte classi che sono necessarie per il sistema finale — Può contenere anche meno della metà delle classi del sistema. — Dovrebbe essere sviluppato per essere riusato indipendentemente da: - user interface classes - architectural classes • Il system model completo include: — Il system domain model — Classi dell’interfaccia utente ( e s . f i n e s t r e , m e n u , f o r m … ) — Classi dell’architettura del sistema (c l i e n t / s e r v e r s / fi l e/ database) — Classi di utilità Prof.ssa A.R. Fasolino Modellare con le classi 42 21 Sequenza di attività suggerite • • • • • • Identifica un primo insieme di classi candidate Aggiungi associazioni ed attributi a queste classi Trova le generalizzazioni Trova le principali r e s p o n s a b i l i tà di ogni classe In base alle responsabilit à decidi sulle operazioni Itera il processo finchè il modello ottenuto soddisfacente — Aggiungi o cancella classi, associazioni, attributi, generalizzazioni, responsabilit à o operazioni — Identifica le interfacce utente — Usa i design patterns Non essere nè disorganizzati, nè troppo rigidi.. Prof.ssa A.R. Fasolino Modellare con le classi è 43 Identificare le classi • Quando si sviluppa un domain model si tende a scoprire classi • Nel lavorare all’interfaccia utente o all’architettura, si tende ad inventare classi — Necessarie a risolvere un problema di design — Si possono inventare classi anche per il domain model! • Riusare il pi ù possibi le! — Usare frameworks — Se il sistema è una estensione di un precedente… — Guardare a sistemi simili Prof.ssa A.R. Fasolino Modellare con le classi 44 22 Una semplice tecnica per scoprire le classi del dominio • Analizzare documentazione di partenza, come la descrizione dei requisiti • Estrarre nomi e frasi nominali (nomi con aggettivi) • Eliminare nomi che: — Sono ridondanti (rappresentano la stessa classe) — Rappresentano istanze e non classi — Sono vaghi o troppo generici — Corrispondono a classi che non sono necessarie al livello considerato • Fare attenzioni a classi nel domain model che rappresentano tipi di utente o altri attori (servono davvero?) Prof.ssa A.R. Fasolino Modellare con le classi 45 Identificare associazioni ed attributi • Parti con le classi ritenute centrali ed importanti • Stabilisci i dati ovvi e chiari che esse contengono e le loro relazioni con altre classi. • Procedi con le classi meno importanti. • Evita di aggi ungere troppi attributi ed associazioni ad una classe — Un sistema è più semplice se manipola meno informazioni Prof.ssa A.R. Fasolino Modellare con le classi 46 23 Suggerimenti per associazioni valide trovare e specificare • Una associazione dovrebbe esistere se una classe: - possiede - controlla - è collegat a a - si riferisce a - è parte di - ha c o m e p a r t i - è membro di o ppure - ha come membri qualche altra classe del modello • Specificare le molteplicit à da entrambi i lati. • Assegnare un nome chiaro all’associazione. Modellare con le classi Prof.ssa A.R. Fasolino 47 Azioni piuttosto che associazioni. • Un errore comune consiste nel considerare azioni come se fossero associazioni. SocioLibreria * * * Prende In prestito Restituisce * * ArticoloLibreria Errore ! Prestito * DataPrestito DataRitorno * DataRestituzione SocioLibreria ArticoloLibreria Meglio: l’operazione presta crea un Prestito e L’operazione restituisci setta la data di restituzione Prof.ssa A.R. Fasolino Modellare con le classi 48 24 Identificare gli attributi • Cercare le informazioni che devono essere conservate per ciascuna classe • È possibile che nomi che sono stati scartati come classi, possano ora essere considerati attributi • Un attributo dovrebbe in genere contenere un solo valore — E s. stringa, numerico Modellare con le classi Prof.ssa A.R. Fasolino 49 Suggerimenti per identificare e specificare attributi validi • È bene non avere molti attributi duplicati • Se un sottoinsieme degli attributi di una classe forma un gruppo coerente, crea una classe distinta per questi attributi Person Person Person name addresses name street1 municipality1 provOrState1 country1 postalCode1 street2 municipality2 provOrState2 country2 postalCode2 name Bad due Errore: usotodi a plural attributi attributeal plurale Address * addresses * street municipality provOrState country postalcode type Good l’attributo solution. The Bene: type indicates whether tipo tipo di it is indica a home iladdress, indirizzo business address etc. Bad due to too many Errore: troppi attributi attributes, and inability duplicati, e incapacità to add more addresses di gestire più indirizzi Prof.ssa A.R. Fasolino Modellare con le classi 50 25 L’esempio dei voli (con attributi e nuove associazioni) Employee Passenger name employeeNumber jobFunction name number RegularFlight * supervisor time flightNumber * * * Booking * seatNumber Prof.ssa A.R. Fasolino * SpecificFlight date Modellare con le classi 51 Identificare generalizzazioni e interfacce • Due modi per trovare le generalizzazioni : — bottom-up - Raggruppo classi simili creando una nuova superclasse — top-down - Cerco prima le classi più generali, e poi specializzo • Crea un interfaccia, invece di una superclasse se: — Le classi sono molto diverse fra loro, tranne che hanno poche operazioni in comune — Una o pi ù classi hanno gi à le loro superclassi — Potrebbero essere disponibili diverse implementazioni dell a stessa classe Prof.ssa A.R. Fasolino Modellare con le classi 52 26 L’esempio dei voli (con generalizzazioni) Person PersonRole 0..2 name idNumber EmployeeRole PassengerRole jobFunction RegularFlight * supervisor time flightNumber * * Booking * * * SpecificFlight seatNumber date Modellare con le classi Prof.ssa A.R. Fasolino 53 Assegnare le Responsabilità alle classi Una r e s p o n s abilit à è un qualcosa che è richiesto al sistema . • La responsabilit à di ogni requisito funzionale deve essere attribuita ad una delle classi, anche se tale requisito potrà essere svolto mediante una collaborazione fra più classi. — Tutte le responsabilità c h i a r a m e n t e c o r r e l a t e. di una classe dovrebbero essere — S e u n a c l a s s e h a t r o p p e r e s p o n s a b i l i t à, v a l u t a r e l ’i p o t e s i d i dividerla in più classi — S e u n a c l a s s e n o n h a r e s p o n s a b i l i t à, p r o b a b i l m e n t e è i n u t i l e — Quando una responsabilità non pu ò essere attribuita a nessuna d e l l e c l a s s i e s i s t e n t i , d ov r e b b e e s s e r e c r e a t a u n a n u o v a c l a s s e • P e r s t a b i l i r e l e r e s p o n s a b i l i t à: — S v o l g e r e l ’ analisi dei c a s i d’ u s o — C e r c a r e v e r b i e n o m i c h e d e s c r i v o n o az i o n i n e l l a d e s c r i z i o n e del sistema Prof.ssa A.R. Fasolino Modellare con le classi 54 27 Categorie di responsabilità • Set e get dei valori degli attributi • Crear e ed inizializzare nuove istanze • Prelevare o persistente memorizzare dati da una memoria • Distruggere istanze • Aggiungere e cancellare istanze di associazioni • Copiare, convertire, trasfor mare, trasmettere o fornire in output dati. • Calcolare risultati numerici • Navigare e cercare dati di particolari istanze • Altro lavoro specifico. Modellare con le classi Prof.ssa A.R. Fasolino 55 L’esempio dei voli (con responsabilità) — Creare un nuovo VoloRegolare — Cercare un VoloRegolare — Modificare gli attributi di un volo — Creare un VoloSpecifico — Prenotare un passeggero — Cancellare una prenotazione Prof.ssa A.R. Fasolino PersonRole 0..2 * Person Airline name idNumber * EmployeeRole PassengerRole jobFunction RegularFlight * supervisor time flightNumber * * Booking seatNumber * * * SpecificFlight date Modellare con le classi 56 28 Responsabilità Classe Creare un nuovo RegularFlight RegularFlight o p p u r e m e g l i o Airline Cercare un RegularFlight Airline c h e m a n t i e n e l a c o l l e z i o n e d e l l e istanze dei voli Modificare gli attributi di un volo( RegularFlight) RegularFlight ( o g n i c l a s s e è r e s p o n s a b i l e Creare un VoloSpecifico RegularFlight, s i c c o m e u n v o l o S p e c i f i c o dei propri attributi) è un’istanza di VoloRegolare Prenotare un passeggero su un VoloSpecifico O S pecificFlight o P a s s e n g e r R o l e: meglio PassengerRole (è il passeggero che decide di prenotare) Cancellare una prenotazione Prof.ssa A.R. Fasolino Booking Modellare con le classi 57 Costruire un prototipo di class diagram su carta (Metodo delle CRC cards: Class Responsibility Collaboration) • Per ogni classe identificata, porre il nome della classe su una scheda (Card) • Man mano che vengono individuati attributi e responsabilità, elencarl i sulle Card — Se non tutte le responsabilità entrano in una card: - C i ò s u g g e r i s c e d i d i v i d e r e la c l a s s e i n p i ù c l a s s i . • Sistemare le card su una lavagna per creare il Class diagram • Disegnare le linee corrispondenti ad associazioni e generalizzazioni. Prof.ssa A.R. Fasolino Modellare con le classi 58 29 Identificare le operazioni Le operazioni saranno necessarie r e s p o n s a b i l i tà di ciascuna classe a realizzare le • Ci saranno in genere diverse operazioni per realizzare ogni responsabilit à, ma una in particolare avr à l’impegno della responsabilità. • Le principali operazioni che implementano responsabilità sono normalmente dichiarate p u b l i c una • Altri metodi che collaborano a realizzare una responsabilità devono essere dichiarate private se possibile. Modellare con le classi Prof.ssa A.R. Fasolino 59 Esempio di collaborazioni per implementare alcune tipiche responsabilità EmployeeRole + getName [e2] crewMember * ** Booking Booking [c2] SpecificFlight * * PassengerRole + makeBooking [c1] addLinkToBooking [c4] Prof.ssa A.R. Fasolino + + + + specifyAirplane [a1] createFlightLog [b1] changeAirplane [d1] findCrewMember [e1] addLinkToBooking [c3] * Airplane 0..1 addLinkToSpecificFlight [a2, d3] deleteLinkToSpecificFlight [d2] 0..1 FlightLog FlightLog [b2] Modellare con le classi 60 30 SpecificFlight Collaborazione ‘a’ * Airplane 0..1 + specifyAirplane [a1] addLinkToSpecificFlight [a2, d3] Creare un link b i -direzi o n a l e t ra due oggetti esistenti; es. aggiungere un link fra un’istanza di S p e c i f i c F l i g h t e un’istanza di A i r p l a n e. 1. (public) L ’istanza di S p e c i f i c F l i g h t — Crea un l i n k mono - direzi o n a l e v e r s o l’istanza di Airplane — Q u i n d i , c h i a m a l ’o p e r a z i o n e 2 . 2. (non-public) L’istanza di A i r p l a n e — crea un link mono - direzi o n a l e v e r s o l’istanza di SpecificFlight Modellare con le classi Prof.ssa A.R. Fasolino Class collaboration ‘b’ 61 0..1 0..1 SpecificFlight + createFlightLog [b1] FlightLog FlightLog [b2] Creare un oggetto e collegarlo ad un oggetto esistente es. creare un SpecificFlight. F l i g h t L o g, e collegarlo ad uno 1. (public) L ’istanza di S p e c i f i c F l i g h t — Chiama il costruttore di FlightLog (operation 2) — Quindi crea un link monodirezionale verso la nuova istanza di F l i g h t L o g. 2. (non-public) Il costruttore della Classe F l i g h t L o g’s — Crea u na l i n k verso l ’istanza di Prof.ssa A.R. Fasolino monodirezionale SpecificFlight. Modellare con le classi a l l ’i n d i e t r o 62 31 PassengerRole Class collaboration ‘c’ + makeBooking [c1] addLinkToBooking [c4] Booking Booking [c2] * * SpecificFlight addLinkToBooking [c3] Creare una classe associati v a , dati due oggetti esistenti es. creare un’istanza di B o o k i n g, che collegher à uno S p e c i f i c F l i g h t ad un P a s s e n g e r R o l e . 1. ( p u b l i c ) l ’i s t a n za d i — 2. PassengerRole C h i a m a i l c o s t r u t t or e d i B o o k i n g (o p e r a z i o n e 2). ( n o n - p u b l i c ) Il c o s t r ut tor e d e l l a C l a s s e B o o k i n g , t r a l e a l t r e a z i o n i : — C r e a u n l i n k m o n o d i r e z i o n a l e all ’i n d i e t r o v e r s o l’i s t a n z a d i PassengerRole — Crea un link monodirezionale verso l ’i s t a n z a di SpecificFlight — C h i a m a l e o p e r a z i o n i 3 e 4. 3. ( n o n - p u b l i c ) L’i s t a n z a d i S p e c i f i c F l i g h t 4. ( n o n - p u b l i c ) L’i s t a n z a d i P a s s e n g e r R o l e — — C r e a u n l i n k m o n o d i r e z i o n a l e v e r s o l ’i s t a n z a d i B o o k i n g . C r e a u n l i n k m o n o d i r e z i o n a l e v e r s o l ’i s t a n z a d i B o o k i n g . Modellare con le classi Prof.ssa A.R. Fasolino Class collaboration ‘d’ SpecificFlight 63 Airplane 0..1 * addLinkToSpecificFlight [a2, d3] deleteLinkToSpecificFlight [d2] + changeAirplane [d1] C a m b i a r e l a desti n a z i o n e d i u n link es. cambiare l’ A i r p l a n e di airplane1 a airplane2 uno S p e c i f i c F l i g h t , da 1. (public) l ’i s t a n z a d i S p e c i f i c F l i g h t — Cancella il link verso airplane1 — Crea un link monodirezionale verso airplane2 — Chiama l’operazione 2 — Q u i n d i c h i a m a l ’o p e r a z i o n e 3 . 2 . ( n o n- p u b l i c ) airplane1 — Cancella il suo link S p e c i f i c F l i g h t. 3 . ( n o n- p u b l i c ) monodirezionale verso l ’i s t a n z a di airplane2 — Crea un link monodirezionale verso l ’i s t a n z a di S p e c i f i c F l i g h t. Prof.ssa A.R. Fasolino Modellare con le classi 64 32 Class collaboration ‘e’ EmployeeRole * crewMember + getName [e2] SpecificFlight * + findCrewMember [e1] Cercare una istanza associata es. cercare un membro di equipaggio associato ad uno S p e c i f i c F l i g h t e che abbia un certo nome. 1. (public) The instance of S p e c i f i c F l i g h t — Crea un Iterator su tutti i link crewMember dello SpecificFlight — Per ognuno di essi chiama l’operazione 2, finchè non trova il nome cercato 2. (può essere public) l’istanza restituisce il suo nome. Prof.ssa A.R. Fasolino di EmployeeRole Modellare con le classi 65 Implementing Class Diagrams in Java • Attributes are implemented as instance variables • Generalizations are implemented using • Interfaces are implemented using extends implements • Associations are normally implemented using instance variables • Divide each two - way association into two one- way associations — so each associated class has an instance variable. • F o r a o n e- w a y a s s o c i a t i o n w h e r e t h e m u l t i p l i c i t y a t t h e o t h e r e n d i s ‘o n e ’ or ‘ o p t i o n a l ’ — declare a variable of that class (a reference) • F o r a o n e- w a y a s s o c i a t i o n w h e r e t h e m u l t i p l i c i t y a t t h e o t h e r e n d i s ‘ m a n y’: — use a collection class implementing List, such as V e c t o r Prof.ssa A.R. Fasolino Modellare con le classi 66 33 Example: S p e c i f i c F l i g h t class SpecificFlight { private Calendar date; private RegularFlight regularFlight; private TerminalOfAirport destination; private Airplane airplane; private FlightLog flightLog; private ArrayList crewMembers; // of E m p l o y e e R o l e private ArrayList bookings ... } Prof.ssa A.R. Fasolino Modellare con le classi 67 Example: S p e c i f i c F l i g h t // Constructor that should only be called from // addSpecificFlight SpecificFlight( Calendar aDate, RegularFlight aRegularFlight) { date = aDate; regularFlight = aRegularFlight; } Prof.ssa A.R. Fasolino Modellare con le classi 68 34 Example: R e g u l a r F l i g h t class RegularFlight { private ArrayList specificFlights ; ... // Method that has primary // responsibility public void addSpecificFlight( Calendar aDate) { SpecificFlight newSpecificFlight; newSpecificFlight = n e w SpecificFlight(a D a t e , this); specificFlights . a d d ( newSpecificFlight); } ... } Prof.ssa A.R. Fasolino Modellare con le classi 69 35