Diagramma delle classi Università di Padova Facoltà di Scienze MM.FF.NN Informatica - anno 2009-10 Corso di Ingegneria del Software Diagrammi delle classi Class diagrams Diagrammi degli oggetti Object diagrams E’ un diagramma che illustra una collezione di elementi dichiarativi (statici) di un modello come classi e tipi, assieme ai loro contenuti e alle loro relazioni. Serve per individuare gli elementi di un sistema Costruito, perfezionato ed utilizzato durante tutto il processo di sviluppo del sistema Scopo: • individua e specifica i concetti del sistema • specifica le collaborazioni • specifica gli schemi logici dei D.B. Utilizzato dagli analisti, progettisti e dai programmatori © Renato Conte - UML: CLASSI e OGGETTI - 1/100 © Renato Conte - UML: CLASSI e OGGETTI - 2/100 Fasi, modelli e diagrammi Diagrammi delle classi e degli oggetti Un diagramma delle classi è un grafo composto da classi e relazioni. Requirements Analysis Use Case Model Component Diagrams Design Model Deployment Diagrams Deployment Model Implementation Test Class Diagrams Analysis Model Design Un diagramma degli oggetti è un grafo composto da istanze di classi (oggetti) e relazioni; esso è una istanza del diagramma delle classi. Use Case Diagrams Implem. Model Test Model Object Diagrams Incl. subsystems and packages Sequence Diagrams Collaboration Diagrams Statechart Diagrams UML 2: Communication Diagrams UML 2: State Machine Diagram. Activity Diagrams © Renato Conte - UML: CLASSI e OGGETTI - 3/100 © Renato Conte - UML: CLASSI e OGGETTI - 4/100 Sintassi di una classe ( esempi 1) Classe “A class is the descriptor Nome della classe Account for a set of objects with balance: Money accountHolder: String interestRate: int similar structure, behavior, Attributi and relationships”. setInterest() setOverdraftLevel() Operazioni dal manuale di riferimento di UML v.1.5 © Renato Conte - UML: CLASSI e OGGETTI - 5/100 © Renato Conte - UML: CLASSI e OGGETTI - 6/100 ( esempi 3) «entity» stereotype Account { abstract, author= Joe, status= tested } ( esempi 2) Classe attiva Boolean Account stato: enum {false,true} # # - balance: Money accountHolder: String interestRate: int = 7 lastAccountID: String Customer marcatori di visibilità + # + setInterest(d: Date) update() setOverdraftLevel() getBalance():Money Exceptions accessViolationException opzionali definite dall’utente Responsibilities -- Keep track of balance © Renato Conte - UML: CLASSI e OGGETTI - 7/100 constraints name: String title: String age: Integer isMale: Boolean { title = if isMale then ‘Mr.’ else ‘Ms.’ endif} { age >= 18 and age < 66 } { name.size < 100 } © Renato Conte - UML: CLASSI e OGGETTI - 8/100 Sintassi membri Livello di dettaglio nei diagrammi ( in diagrammi espansi o reali ) Attributi Diagrammi ad alto livello [visibility] name [multiplicity] [: type] Diagrammi espansi [= initial-value] [{property-string}] changeable, addOnly, frozen Operazioni ( implementate da metodi, ... ) [visibility] name [(parameter-list)] [: return-type] [{property-string}] Diagrammi essenziali Diagrammi reali Astrazione tecnologica e/o implementativa Dettagli tecnologici e/o implementativi leaf, query, sequential, guarded, concurrent parameter-list [direction] name : type [= default-value] direction in, out, inout. default © Renato Conte - UML: CLASSI e OGGETTI - 9/100 © Renato Conte - UML: CLASSI e OGGETTI - 10/100 Marcatori di visibilità + public visibility - private visibility # protected visibility ~ package visibility © Renato Conte - UML: CLASSI e OGGETTI - 11/100 ...altri marcatori / Derived $ Static (non standard preferibile la sottolineatura ) * Abstract (non standard ) © Renato Conte - UML: CLASSI e OGGETTI - 12/100 class-scope - instance-scope ATM card cardID: integer class-scope (static) UltimaCardID: integer = 0 PIN: String dataEmissione: date scadenza: date limitePrelievo: integer stato: statoV {attiva, smarrita, ...} Principali relazioni tra le classi • Associazioni (associations) sono relazioni strutturali • Generalizzazioni (generalizations) sono relazioni di ereditarietà. • Composizione e Aggregazione (composition and aggregation) speciali relazioni strutturali • Dipendenza (dependency) • Realizzazioni (realizations) una relazione tra una specificazione e la sua implementazione © Renato Conte - UML: CLASSI e OGGETTI - 13/100 © Renato Conte - UML: CLASSI e OGGETTI - 14/100 Associazioni molteplicità molteplicità Associazioni direzione e nome Società 1 Lavora per datoreDiLavoro * Persona impiegato ruoli © Renato Conte - UML: CLASSI e OGGETTI - 15/100 © Renato Conte - UML: CLASSI e OGGETTI - 16/100 Molteplicità nelle associazioni (1) lower-bound .. upper-bound 1..4 ClasseA Molteplicità nelle associazioni Employee * Secretary * (2) worksFor Company 1..** Manager supervisor * ClasseB Company Office Illimitato: da zero a “molti” Person BoardOfDirectors 0..1 allocatedTo * Employee ** BoardOfDirectors 0,3..8 boardMember © Renato Conte - UML: CLASSI e OGGETTI - 17/100 Molti-a-uno ( Many-to-one ) © Renato Conte - UML: CLASSI e OGGETTI - 18/100 Molti-a-uno ( significato con istanza ) • Una società ha molti dipendenti • Un dipendente può lavorare solo per una società. Impiegato * LavoraPer Società • Una società può avere zero dipendenti • Non è possibile per un dipendente non “dipendere” da una società Impiegato GambaDiLegno Employee * worksFor Ladri&Affini Company Pippo relazione parziale (zero sottinteso) Società Topolino P&P Investigazioni S.p.a sottinteso 1: relazione totale © Renato Conte - UML: CLASSI e OGGETTI - 19/100 © Renato Conte - UML: CLASSI e OGGETTI - 20/100 Molti-a-molti ( Many-to-many ) • Una segretaria può lavorare per molti dirigenti One-to-one • Un dirigente può avere molte segretarie • For each company, there is exactly one board of directors • Alcuni dirigenti potrebbero avere nessuna segretaria. • A board is the board of only one company • Una segretaria deve per forza avere almeno un dirigente • A company must always have a board relazione parziale • A board must always be of some company relazione totale Company Secretary * 1.. * BoardOfDirector Manager supervisor © Renato Conte - UML: CLASSI e OGGETTI - 21/100 Example: Flights and bookings – A booking is always for exactly one passenger • no booking with zero passengers • a booking could never involve more than one passenger. © Renato Conte - UML: CLASSI e OGGETTI - 22/100 Voli e prenotazioni: soluzione ? Passeggero Volo cognome nome numero ? – A Passenger can have ten Bookings • a passenger could have no bookings at all – A Flight can have 250 Bookings – A booking have a cost and a date © Renato Conte - UML: CLASSI e OGGETTI - 23/100 Prenotazione dataPrenotazione costo © Renato Conte - UML: CLASSI e OGGETTI - 24/100 Classe d’associazione ( association class ) Passeggero Associazioni qualificate ( qualified associations ) Volo 1..250 0..10 cognome nome numero Prenotazione dataPrenotazione costo qualificatori 64 1..N Passeggero Volo Prenotazione 1..250 0..10 cognome nome dataPrenotazione costo numero © Renato Conte - UML: CLASSI e OGGETTI - 25/100 Associazione ternaria con classe d’associazione conosce © Renato Conte - UML: CLASSI e OGGETTI - 26/100 Associazioni ricorsive (o riflessive) 1..* sposata LinguaggioDiProgrammazione moglie 0..1 * Programmatore assegnatoA 1..* sviluppatoCon utilizza 1..10 Sviluppo dataInizio dataFine ModuloSW © Renato Conte - UML: CLASSI e OGGETTI - 27/100 Persona capo 0..1 marito 1..* operaio dirige © Renato Conte - UML: CLASSI e OGGETTI - 28/100 Navigabilità nelle associazioni – Le associazioni sono per default con “direzione non specificata” per i diagrammi ad alto livello o essenziali. – E’ possibile indicare la direzione di una associazione (navigabilità) aggiungendo una freccia alla estremità della linea. – Se si vuol indicare l’impossibilita’ della navigazione in una direzione si inserisce un simbolo di blocco NodoDiAlberoBinario Dipendenze dependency radice 0..1 figlio 0..2 haSottoalbero © Renato Conte - UML: CLASSI e OGGETTI - 29/100 © Renato Conte - UML: CLASSI e OGGETTI - 30/100 Dipendenze Una dipendenza mostra che una classe usa un’altra classe. Un cambiamento nella classe indipendente influirà l’altra. Account Money ... accountHolder: String interestRate: int Generalizzazione addInterest() setOverdraftLevel() deposit(cash: Money) © Renato Conte - UML: CLASSI e OGGETTI - 31/100 © Renato Conte - UML: CLASSI e OGGETTI - 32/100 Generalizzazione ( specializzazione, ereditarietà ) (1) Specializzazione (2) Una relazione tassonomica tra un elemento più generale ed uno più specifico Il discriminatore (discriminator) è una etichetta che descrive il criterio utilizzato per la specializzazione. superclasse classe generica Parent Animal “generalizzazione implica sostituibilità” IS-A Animal typeOfFood habitat Child AquaticAnimal classe derivata LandAnimal Carnivore Herbivore classe specializzata © Renato Conte - UML: CLASSI e OGGETTI - 33/100 © Renato Conte - UML: CLASSI e OGGETTI - 34/100 Discriminatori multipli Specializzazione: stili grafici Animal Shape habitat Polygon Ellipse AquaticAnimal Spline typeOfFood LandAnimal typeOfFood Shape AquaticCarnivore Polygon Ellipse AquaticHerbivore LandCarnivore LandHerbivore Spline © Renato Conte - UML: CLASSI e OGGETTI - 35/100 © Renato Conte - UML: CLASSI e OGGETTI - 36/100 Ereditarietà multipla (1) Ereditarietà multipla (2) Animal Vehicle venue power {overlapping} WindPowered Vehicle {overlapping} MotorPowered Vehicle Land Vehicle Water Vehicle AquaticAnimal AquaticCarnivore Truck LandAnimal AquaticHerbivore Carnivore LandCarnivore Herbivore LandHerbivore Sailboat © Renato Conte - UML: CLASSI e OGGETTI - 37/100 © Renato Conte - UML: CLASSI e OGGETTI - 38/100 Classi astratte, tipi, interfacce Interfacce Abstract classes, Types, Interfaces «type» SomeType typeOfFood habitat venue power I tipi non hanno implementazione Usati per i “built in types” , per es. come int. GestoreEvento ActionListener «interface» SomeFace Stabiliscono un contratto (un obbligo) col cliente Le interfacce hanno solo dichiarazioni pubbliche SomeClass {abstract} Le classi astratte non hanno istanze (Le classi astratte pure C++ sono simili alle interfacce Java) Il nome della classe in corsivo qualifica la classe astratta GestoreEvento «interface» ActionListener actionPerformed() ... ... actionPerformed() ... realizzazione «abstract» SomeClass © Renato Conte - UML: CLASSI e OGGETTI - 39/100 © Renato Conte - UML: CLASSI e OGGETTI - 40/100 Interfacce Interfacce: notazioni equivalenti • Una interfaccia descrive una porzione del comportamento visibile di un insieme di oggetti • Una interfaccia è simile ad una classe, solo che non possiede attributi e metodi implementati Machine Cashier StoreX Person -storeId: Integer -POSlist: List Cashier ATM Machine Withdraw( ) Deposit( ) +create() <<interface>> «interface» Person +login(UserName, Passwd) Store +find(StoreId) Employee ATM Cashier +getPOStotals(POSid) +getPOStotals(POSid) +updateStoreTotals(Id,Sales) +updateStoreTotals(Id,Sales) +get(Item) Employee +get(Item) realizzazione © Renato Conte - UML: CLASSI e OGGETTI - 41/100 Interfacce: esempio con dipendenze © Renato Conte - UML: CLASSI e OGGETTI - 42/100 Interfacce: esempio con dipendenze inputStream ISensor TheftAlarm dipendenza d’uso realizzazione socket { file must exist } FileReader ProximitySensor ClassFile dipendenza realizzazione FileWriter ProximitySensor TheftAlarm ISensor © Renato Conte - UML: CLASSI e OGGETTI - 43/100 outputStream { file must not be locked } © Renato Conte - UML: CLASSI e OGGETTI - 44/100 Classi astratte ( notazioni equivalenti ) Classi generiche ( template ) font corsivo Shape T d: Dimension font corsivo per il metodo astratto draw() Priority Queue {Print Job} Shape Print Queue insert(T) {abstract} remove(T) Circle <<abstract>> Square Shape draw() draw() © Renato Conte - UML: CLASSI e OGGETTI - 45/100 Classi generiche: diverse realizzazioni FArray © Renato Conte - UML: CLASSI e OGGETTI - 46/100 Package • Un package è un meccanismo generale per organizzare elementi in gruppi omogenei. T, k:integer Package A « bind » (T→Address, k→24) T [0..k] a realization ( part dependency and part generalization ) • Un packages può contenere altri package. AddressList FArray<Point,22> © Renato Conte - UML: CLASSI e OGGETTI - 47/100 • Dipendenze tra package si indicano con una freccia (vedi figura). • Vi sono delle regole di visibilità per i componenti dei package. Package B © Renato Conte - UML: CLASSI e OGGETTI - 48/100 Package: dipendenze Package: dipendenze Customer Controller Banking::CheckingAccount «access» «access» «access» «access» Diagram Elements «access» «access» Banking Domain Elements CheckingAccount © Renato Conte - UML: CLASSI e OGGETTI - 49/100 Graphics Core © Renato Conte - UML: CLASSI e OGGETTI - 50/100 Visibilità tra package Package D Generalizzazione e dipendenze tra package. Compiler A F B JavaCompiler Java © Renato Conte - UML: CLASSI e OGGETTI - 51/100 C E © Renato Conte - UML: CLASSI e OGGETTI - 52/100 Associazione e generalizzazione: commenti – Le associazioni descrivono relazioni che esistono tra istanze a run time. Aggregazione e Composizione • Quando si disegna un diagramma degli oggetti, generato da un diagramma delle classi, ci deve essere un’istanza per entrambe le classi congiunte dalla associazione. – Le generalizzazioni descrivono relazioni tra classi nei diagrammi delle classi. • Queste non appaiono affatto nei diagrammi degli oggetti. © Renato Conte - UML: CLASSI e OGGETTI - 53/100 Aggregazione e Composizione Una speciale forma di associazione che specifica una relazione tra la parte intera (aggregato) ed i suoi componenti (parti) © Renato Conte - UML: CLASSI e OGGETTI - 54/100 Aggregazione e Composizione (2) * Polygon Polygon + vertex 3..∗ Contains {ordered} Point composition aggregation 1 Graphics Bundle Point color texture © Renato Conte - UML: CLASSI e OGGETTI - 55/100 -bundle GraphicsBundle color texture density © Renato Conte - UML: CLASSI e OGGETTI - 56/100 Aggregazione (Aggregation) Composizione (Composition) – Una composizione è una forma forte di aggregazione isPartOf • Se l’aggregato viene distrutto, anche le sue parti vengono distrutte * 1..* Itinerario Città Building Employee 1..* Room Employee address: Address * 1..* Testo Parole Due alternative per ”Address” © Renato Conte - UML: CLASSI e OGGETTI - 57/100 Composizione: alcune notazioni equivalenti Address street municipality region country postalCode © Renato Conte - UML: CLASSI e OGGETTI - 58/100 Una gerarchia di aggregazioni (... o composizioni?) Window Veicolo scrollbar[2]:Slider title: Header body: Panel Window Chassis Carrozzeria Window 2 scrollbar: Slider 1 title: Header body: Panel 2 1 1 * Slider Header Panel Telaio Motore Transmissione Ruote 1 © Renato Conte - UML: CLASSI e OGGETTI - 59/100 © Renato Conte - UML: CLASSI e OGGETTI - 60/100 Quando usare una aggregazione od una composizione • Come regola generale, un' associazione è una aggregazione/composizione se è vero che: – si può stabilire • le parti sono “pezzi” dell’aggregato • oppure l’aggregato è “composto” di parti – quando qualcosa che possiede o controlla l’aggregato, allora controlla anche le sue parti Propagazione – Un meccanismo dove un’operazione su un aggregato è implementata facendo eseguire quella operazione sulle sue parti – Allo stesso tempo, le proprietà delle parti si propagano spesso indietro verso l’aggregato – La propagazione sta all’aggregazione come l’ereditarietà sta alla sua generalizzazione. • La maggior differenza è: – l’ereditarietà è un meccanismo implicito – la propagazione deve essere programmata quando richiesta • Si tratta di una aggregazione se le parti possono esistere anche se l’aggregato viene a mancare Polygon 3..* LineSegment • Si tratta di una composizione se le parti cessano di esistere quando l’aggregato viene distrutto © Renato Conte - UML: CLASSI e OGGETTI - 61/100 aggregato parti © Renato Conte - UML: CLASSI e OGGETTI - 62/100 Composizione e classi annidate: differenze CompositeClass DeclaringClass Diagramma degli oggetti PartClass NestedClass © Renato Conte - UML: CLASSI e OGGETTI - 63/100 © Renato Conte - UML: CLASSI e OGGETTI - 64/100 Object Diagram or Instance Diagram An object diagram is a graph of instances, including objects and data values. Istanze o oggetti (1) triangle triangle: Polygon A static object diagram is an instance of a class diagram; it shows a snapshot of the detailed state of a system at a point in time. The use of object diagrams is fairly limited, mainly to show examples of data structures. center : Point = (2,2) vertices : Point* = ((0,0), (4, 0), (2,4)) borderColor : Color = black fillColor : Color = white triangle: Polygon : Polygon dal manuale di riferimento di UML v.1.5 © Renato Conte - UML: CLASSI e OGGETTI - 65/100 Istanze o oggetti (2) : Frame attendee: Person © Renato Conte - UML: CLASSI e OGGETTI - 66/100 Istanze e ruoli Person : Frame Parent Istanza anonima attiva e passiva instanceName / ClassifierRoleName [: ClassifierName ] Istanza con nome steve: Person : Card shoeSize = 42 Charlie / Parent Charlie / Parent : Person Attributi con valore multiObject © Renato Conte - UML: CLASSI e OGGETTI - 67/100 © Renato Conte - UML: CLASSI e OGGETTI - 68/100 Diagramma degli oggetti Un link è una istanza di una associazione (nello stesso modo in cui affermiamo che un oggetto è una istanza di una classe) Pat: Employee Diagramma degli oggetti ... primaV: Valutazione pippo: Studente voto = 30 nome = ”Pippo” : Valutazione Wayne: Employee OOCorp: Company OOCorp's Board Ali: Employee programmazione: Corso paperino : Studente : Valutazione nome = ”Paperino” : Valutazione Carla: Employee UML inc: Company UML inc's Board : Studente : Valutazione : Studente : Valutazione : Corso Terry: Employee © Renato Conte - UML: CLASSI e OGGETTI - 69/100 ... relativo diagramma delle classi Studente © Renato Conte - UML: CLASSI e OGGETTI - 70/100 Esempio diagramma degli oggetti con aggregazione : Family Corso * * cognome nome codice Valutazione data voto Joe : Person © Renato Conte - UML: CLASSI e OGGETTI - 71/100 husband wife Jill : Person © Renato Conte - UML: CLASSI e OGGETTI - 72/100 Persone e voli pilota Esempi riassuntivi equipaggio Volo Persona 1..* 0..* assistenteDiVolo © Renato Conte - UML: CLASSI e OGGETTI - 73/100 © Renato Conte - UML: CLASSI e OGGETTI - 74/100 Association - Multiplicity Alberi binari • A cricket team has 11 players. One of them is the captain. • A player can play only for one Team. NodoDiAlberoBinario 0..1 • The captain leads the team members. radice figlio Team Member 10 0..2 Captain Player 1 0..1 11 1 member of Team 0..1 radice 1 Captain NodoDiAlberoBinario 0..1 radice Leads figlioDestro © Renato Conte - UML: CLASSI e OGGETTI - 75/100 0..1 0..1 figlioSinistro © Renato Conte - UML: CLASSI e OGGETTI - 76/100 Matrimonio Agenda Person name placeOfBirth dateOfBirth placeOfDeath dateOfDeath Address Book child * - Name: char + + + + Add Contact() : void Add Group() : void Sort() : void Search() : void * * + + Add Contact() : void Add Group() : void 1..* Woman femalePartner child Man 0..1 * Contact - { AND } * Union 0..1 placeOfMarriage dateOfMarriage dateOfDivorce parents Name: char Email Address: char Cell Phone: int Fax: int Address Line 1: char Address Line 2: char City/Town/Suburb: char Post Code: char State/Province: char Country: char * © Renato Conte - UML: CLASSI e OGGETTI - 77/100 © Renato Conte - UML: CLASSI e OGGETTI - 78/100 Biblioteca Organismo * Organismo VolumeFisico copiaCorrisp * Apparato {Sistema} 0..1 * * 0..1 childmalePartner * * Address Book Group Organo Tessuto Cellula * Libro titolo : string 1..* 1..* HaInPrestito HaScritto dal : Data Animale Muscolare Fegato Vegetale Digerente Stomaco HaPrenotato dal : Data al : Data Ghiandolare Respiratorio Polmoni nome : string HaInPrestito 0..1 * Cuore * Autore HaLetto HaLetto HaPrenotato Lettore dal : Data nome : string prenotazione() * Circolatorio LettoreOccasionale © Renato Conte - UML: CLASSI e OGGETTI - 79/100 Abbonato nTessera : int © Renato Conte - UML: CLASSI e OGGETTI - 80/100 Sistema universitario: use case Register for courses Sistema universitario: registrazioni Student Maintain curriculum Registrar Select courses to teach Professor © Renato Conte - UML: CLASSI e OGGETTI - 81/100 Sistema di registrazione universitario © Renato Conte - UML: CLASSI e OGGETTI - 82/100 Sist. di registrazione universitario: Data Base (vari package) DBCourse 1 UniversityArtifacts + saveCourse() People TransactionManager + saveCourse() Database DBStudent dipendenze dipendenze DBProfessor © Renato Conte - UML: CLASSI e OGGETTI - 83/100 © Renato Conte - UML: CLASSI e OGGETTI - 84/100 Sist. di registrazione universitario: UniversityArtifacts Sist. di registrazione universitario: People Course RegistrationForm (from Interfaces) <<UniversityArtifacts>> People - name - phone - address - IDNumber +primary - name : CString - description : CString - creditHours : short - timeOfDay - location 4 +alternate Course 2 i metodi get() e set() sugli attributi sono impliciti - name - program - location CourseMaintenanceForm (from Interfaces) + addStudent() + addProfessor() + isFull() : return Student Professor - major - gradYear - tenureStaus ? 4 1 teaches 4 1 1 + verifyID() + untitled() + setID() + createCourse() + setCourseInfo() ... CourseSelectionForm 1..4 + create() + getCourseInfo() 1 + save() + getCourseNumber() 1..n + getName() + getDescription() + getTimeOfDay() ... * Add/DropForm (from Interfaces) 1 Curriculum RegistrationUser NewCourseForm 1 1..* registersFor 0..4 CourseOffering registersFor (from Interfaces) 1 (from Interfaces) 3..10 * + Set name() + Set description() + Set time and day() ... - ddaysOffered - timeOfDay - location 1 teaches 1..4 3..10 (from People) - name - phone - address ... + addStudent() ... © Renato Conte - UML: CLASSI e OGGETTI - 85/100 Sistema bancomat (ATM) © Renato Conte - UML: CLASSI e OGGETTI - 87/100 © Renato Conte - UML: CLASSI e OGGETTI - 86/100 Banking System gestisce «entity» Bank «entity» ATM info gestisce ha identifica 1..* 1..* accede a * cardID: String PIN: String dataEmissione: date scadenza: date limitePrelievo: integer stato: statoV {attiva, smarrita, ...} * 1..* «entity» ATM card ATM card «entity» Transazione 1..* possiede 0..* «entity» * «entity» Cliente possiede Dettagli per la classe ATM card (soli attributi ) modifica 1..* «entity» Conto corrente Validaz.PIN 1,2 Estratto conto Prelievo Trasfer. conto © Renato Conte - UML: CLASSI e OGGETTI - 89/100 Studio della struttura dati “Grafo” (1) A © Renato Conte - UML: CLASSI e OGGETTI - 90/100 Studio della struttura dati “Grafo” (2) Grafo: una soluzione informatica operativa E D C Grafo A &C B &A ListaDiAdiacenza F B ListaDiAdiacenza Grafo: schema dal punto di vista logico 0..1 * Vertice C next 0..1 D CellaVertice arrivaA Grafo * Arco * * { AND } © Renato Conte - UML: CLASSI e OGGETTI - 91/100 &F 0..1 E ParteDa> ArrivaA> &C * 0..1 0..1 CellaArco next 0..1 F &B &D © Renato Conte - UML: CLASSI e OGGETTI - 92/100 Design pattern iteratore (da un reverse engineering) Item (List< Employee* >) Iterator Item List Item Design pattern iteratore Item ReverseListIterator ListIterator tratto dal testo Item SkipList (Iterator< Employee* >) “Design Patterns”: Gamma, Helm, johnson, Vlissides Item Item SkipListIterator da un reverse engineering Item ricavato dal codice associato al testo AbstractList Item IteratorPtr ListTraverser (ListTraverser< Employee* >) 1 -_iterator 1 bool Item (ListIterator< Item >) PrintNEmployees -_iterator Item Coord FilteringListTraverser © Renato Conte - UML: CLASSI e OGGETTI - 93/100 Design pattern iteratore (codici C++) Design pattern iteratore (particolare) Iterator Item Iterator() : Iterator First() : void Next() : void IsDone() : bool CurrentItem() : Item Item ListIterator _current : long (Iterator< Employee* >) ListIterator(aList : const List*) : ListIterator First() : void Next() : void IsDone() : bool CurrentItem() : Item SkipListIterator Item ReverseListIterator © Renato Conte - UML: CLASSI e OGGETTI - 94/100 Item ReverseListIterator(aList : const List*) : ReverseListIterator First() : void Next() : void IsDone() : bool CurrentItem() : Item Item SkipListIterator(aList : const List*) : SkipListIterator First() : void Next() : void IsDone() : bool CurrentItem() : Item © Renato Conte - UML: CLASSI e OGGETTI - 95/100 template <class Item> class ListIterator : public Iterator<Item> { public: ListIterator(const List<Item>* aList); virtual void First(); virtual void Next(); virtual bool IsDone() const; virtual Item CurrentItem() const; template <class Item> class Iterator private: { const List<Item>* _list; public: int _current; virtual void First() = 0; }; virtual void Next() = 0; virtual bool IsDone() const = 0; virtual Item CurrentItem() const = 0; protected: Iterator(); }; © Renato Conte - UML: CLASSI e OGGETTI - 96/100 costrutto Associazione Association Composizione e Aggregazione Composition and Aggregation Riassunto delle relazioni Annidamento Nesting Generalizzazione Generalization descrizione sintassi Una relazione tra due o più classificatori che implica una connessione tra le loro istanze Una speciale forma di associazione che specifica una relazione tra la parte intera (aggregato) ed i suoi componenti (parti) Una relazione tra due o più classi: all’interno di una classe vengono dichiarate altre classi Una relazione tassonomica tra un elemento più generale ed uno più specifico Una relazione tra due elementi, nei quali il cambiamento nell’elemento indipendente può influire nell’elemento dipendente Dependency Dipendenza Realizzazione Realization Una relazione tra una specificazione e la sua implementazione © Renato Conte - UML: CLASSI e OGGETTI - 97/100 Bibliografia Grady Booch, James Rumbaugh, Ivar Jacobson: The Unified Modeling Language User Guide, Addison Wesley (1999). Grady Booch, James Rumbaugh, Ivar Jacobson: The Unified Modeling Language Reference Manual, Addison Wesley (1999). Martin Fowler: UML Distilled: A Brief Guide to the Standard Object Modeling Language, Third Edition Addison Wesley (2003) - ISBN : 0-321-19368-7 © Renato Conte - UML: CLASSI e OGGETTI - 99/100 © Renato Conte - UML: CLASSI e OGGETTI - 98/100 Riferimenti nel Web OMG UML - www.omg.org/uml/ • Reference manual UML 1.5 • UML 2.1 Superstructure Specification • UML 2.2 Superstructure Specification UML: Tutorial e link: www.kobryn.com © Renato Conte - UML: CLASSI e OGGETTI - 100/100