• Non ci sono risultati.

I diagrammi di struttura - I parte

N/A
N/A
Protected

Academic year: 2021

Condividi "I diagrammi di struttura - I parte"

Copied!
58
0
0

Testo completo

(1)

I diagrammi di struttura - I parte

Laboratorio di Ingegneria del Software Prof. Paolo Ciancarini

Dott. Sara Zuppiroli

A.A. 2010/2011

(2)

Pre-requisiti per l’analisi del sistema

Diagrammi dei casi d’uso

Le descrizione delle sequenze Alcuni scenari necessari

Il documento di glossario

(3)

Analisi

Si trovano le entità coinvolte

Si studiano i legami tra le entità (relazioni tra le entità) Si sta individuando la struttura del sistema

(4)

Analisi vs. Progettazione

L’analisi modella i concetti chiave del dominio del problema.

La progettazione adatta il modello di analisi e lo completa affinché diventi implementabile.

In altre parole...

L’analisi è più vicina al problema.

La progettazione è più vicina all’implementazione.

Dal punto di vista di UML, si usano gli stessi tipi di diagramma con diversi livelli di dettaglio (i diagrammi di analisi sono più

’astratti’ di quelli di progettazione).

(5)

Classi e oggetti

Costituiscono i mattoni della struttura di un sistema.

Classe: É il descrittore di un insieme di oggetti che condividono: attributi, operazioni, metodi, relazioni e

comportamento. Definisce un insieme di oggetti che hanno le stesse caratteristiche.

Oggetto: É un’entità discreta con confini ben definiti che cattura stato e comportamento; un’istanza di una classe.

Nell’analisi si modella il dominio del problema attraverso l’uso delle classi di analisi. Sono poi raffinate nelle classi di

progettazione più simili a quelle da implementare.

(6)

Stato e Comportamento di un Oggetto

Stato: É stabilito dai valori degli attributi di un oggetto in un dato istante. Lo stato di un oggetto dipende dal valore dei sui attributi

Comportamento: Indica cosa può fare un oggetto. I

comportamenti sono descritti come operazioni in analisi.

L’esecuzione di un’operazione comporta spesso una modifica dello stato di un oggetto.

(7)

Come fare l’analisi

Estrarre un insieme di classi partendo dalla specifica del problema.

Individuate le classi ragionare su quali attributi e quali operazioni sono utili a risolvere il problema.

Stendere una mappa delle classi e delle relazioni che le legano.

Chiarire la dinamica che intercorrono tra le classi attraverso i diagrammi di comportamento.

Procedere in maniera iterativa (per raffinamenti successivi) per produrre un modello che rappresenti efficacemente il dominio del problema.

(8)

Come progettare

Si raffina il modello di analisi che contiene classi abbastanza generiche.

I costrutti più astratti di UML vengono trasformati in altri più concreti che possono essere implementati in un linguaggio di programmazione OO.

Si considerano i vincoli di piattaforma, linguaggio, e tutti i requisiti non funzionali.

Si utilizza un metodo iterativo.

Il risultato è un modello pronto per l’implementazione.

(9)

Come procedere: estrarre le classi di analisi

Una classe di analisi modella un concetto o entità del

problema: se la specifica dei casi d’uso è buona i concetti basilari sono già in evidenza.

I candidati più probabili sono nomi che compaiono nella specifica e nella documentazione.

Una ragione in più per tenere un glossario di progetto: le parole nel glossario sono spesso candidati ideali per

diventare classi di analisi.

Le classi di analisi non sopravviveranno necessariamente alla progettazione.

Due metodi molto diffusi per trovare le classi di analisi:

I analisi nome-verbo

I analisi CRC

(10)

Analisi nome-verbo

Si analizza tutta la documentazione disponibile e si sottolineano:

I nomi: (conto corrente) sono i potenziali candidati per divenire classi o attributi.

I predicati nominali: (numero del conto corrente) sono i potenziali candidati per divenire classi o attributi.

I verbi: (aprire) sono potenziali candidati a divenire responsabilità di classe.

(11)

Analisi CRC

Class-Responsibilities-Collaborators

Si tratta di un metodo di brainstorming di gruppo che coinvolge sviluppatori, esperti, committenti.

Si individuano i nomi delle classi, un insieme ristretto di responsabilità (cose che la classe sa/fa) e di classi

collaboratori (alle quali viene richiesto comportamento/informazione).

Si usano post-it divisi in tre sezioni chiamate proprio in questo modo.

Le schede sono suddivise e la loro vicinanza fisica rispecchia quella logica.

Si procede iterativamente per raffinamenti successivi.

(12)

Esempio di sceda CRC

Un esempio di scheda CRC

Nome Classe: Conto Corrente Responsabilità Collaboratori

Gestire saldo Banca

... ...

(13)

Le classi di analisi

Le qualità di una buona classe di analisi:

il suo nome ne rispecchia l’intento

è un’astrazione ben definita, che modella uno specifico elemento del dominio del problema

corrisponde ad una caratteristica ben identificabile del dominio

ha un insieme ridotto e definito di responsabilità ha la massima coesione interna

ha la minima interdipendenza con altre classi

(14)

Classi di analisi: regole pratiche

3-5 responsabilità per classe

non isolata, collabora con un piccolo insieme di altre classi evitare il proliferare di classi troppo semplici

evitare la concentrazione del modello in poche classi complesse

evitare troppi livelli di ereditarietà

tenere in mente i principi object-oriented

(15)

Classi e oggetti in UML

Person

-age : int

+getAge() : int Person

age = 10

Jim : Person

: Person

Le classi possono avere fino a 3 slot: uno (obbligatorio) per il nome (in UpperCamelCase) e l’eventuale stereotipo, uno per gli attributi e uno per le operazioni (opzionali).

La stessa classe può apparire con diverse quantità di ornamenti in diagrammi diversi.

Il titolo degli oggetti è sottolineato e del tipo ’nome : classe’, con nome opzionale.

Gli oggetti non hanno uno slot per le operazioni, possono definire valori per gli attributi.

(16)

Relazione tra classe e oggetto

-age : int

+getAge() : int Person

age = 10

Jim : Person

<<instanceOf>>

Si tratta di una dipendenza con stereotipo «instanceOf» (o

«istanzia» sul libro).

(17)

Classe: notazione

-numero : String -correntista : String -saldo : double = 0.0

+create(numero : String, correntista : String) +deposito(somma : double)

+preleva(somma : double) +getNumero() : String +getCorrentista() : String +getSaldo() : double

<<entity>>

ContoBancario Stereotipo

Nome

Sottosezione attributi

Sottosezione operazioni

Visibilità

Operazione!con!ambito!di!classe

Questo livello di dettaglio è tipico delle classi di progettazione, non quelle di analisi.

(18)

Classi di analisi vs. classi di progettazione in UML

Classi di analisi:

I contengono tipicamente solo pochi attributi e operazioni (candidati)

I a volte basta indicare solo il nome della classe

I pochi ornamenti, specifica incompleta (omessi tipi, signature delle operazioni, etc.)

Classi di progettazione:

I modellano una classe del linguaggio di programmazione scelto

I specifica completa (implementabile)

(19)

Attributi

visibilità nome molteplicità:tipo=valoreIniziale

Solo il nome è obbligatorio

Le classi di analisi solitamente contengono solo gli attributi più importanti (quelli che risultano evidenti dall’analisi del dominio); spesso specificano solo il nome di un attributo.

Assegnare un valore iniziale in una classe di analisi può evidenziare i vincoli di un problema.

Le classi di progettazione forniscono una specifica

completa (implementabile) della classe e dei suoi attributi.

(20)

Tipi di visibilità

+ public ogni elemento che può accedere alla classe può anche accedere a ogni suo membro con visibilità pubblica

- private solo le operazioni della classe possono accedere ai membri con visibilità privata

# protected solo le operazioni appartenenti alla classe o ai suoi discendenti possono accedere ai membri con visibilità protetta

∼ package ogni elemento nello stesso package del- la classe (o suo sottopackage annidato) può accedere ai membri della classe con visibilità package

(21)

Operazioni

visibilità nome (nomeParametro:tipoParametro, . . . ):

tipoRestituito

Valgono le stesse considerazioni fatte a proposito degli attributi per quanto riguarda analisi e progettazione.

In ogni classe non ci possono essere due operazioni con la stessa signature.

Il nome di attributi ed operazioni è scritto in lowerCamelCase.

(22)

Ambito

Ambito di istanza:

I gli oggetti hanno una propria copia degli attributi, quindi oggetti diversi possono avere diversi valori negli attributi

I Le operazioni agiscono su oggetti specifici

Ambito di classe:

I gli oggetti di una stessa classe condividono lo stesso valore per un attributo

I le operazioni non operano solo su una particolare istanza della classe, ma alla classe stessa. Ad esempio: costruttori e distruttori di classe.

I rappresentato sottolineando l’attributo/operazione

I analogo alla parola chiave static in Java

(23)

Ambito e accessibilità

Operazioni con ambito di istanza possono accedere sia ad altre operazioni o attributi con ambito di istanza sia con

ambito di classe.

Operazioni con ambito di classe possono accedere solo ad altre operazioni e attributi con ambito di classe (altrimenti non si saprebbe quale istanza scegliere).

Valgono le usuali restrizioni di visibilità.

(24)

Relazioni tra classi

Ci sono due relazioni statiche tra classi particolarmente importanti in UML:

Generalizzazione Associazione

Vi sono poi altre due relazioni che possono legare le classi anche ad altri tipi di elementi:

Dipendenza Realizzazione

(25)

Generalizzazione

Vertebrate Mammal

Relazione tassonomica tra un elemento più generale e uno che lo specifica.

La freccia parte dall’elemento specifico e punta verso quello più generale.

Si tratta dell’ereditarietà in UML.

Tra tutte le relazioni, questa è la più forte e vincolante.

(26)

Generalizzazione: stili grafici

Examples

Package PowerTypes

In Figure 7.42, the Person class can be specialized as either a Female Person or a Male Person. Furthermore, Person’s can be specialized as an Employee. Here, Female Person or a Male Person of Person constitute one GeneralizationSet and Manager another. This illustration employs the notation forms depicted in the diagram above.

Figure 7.41 - Examples of generalizations between classes

Shape

Polygon Ellipse Spline

Shape

Polygon Ellipse Spline

Separate target style

Shared target style

Female Person PersonMale

Employee Person

gender

Female Person

Male

Person Employee

Person

employment status gender

Female Person

Male

Person Employee

Person

gender

gender employment

status

employment status

Female Person

Male

Person Employee

Person

Lab di Ingegneria del Software () I diagrammi di struttura - I parte A.A. 2010/2011 26 / 58

(27)

Insiemi di generalizzazione

70 UML Superstructure Specification, v2.0

Examples

Package PowerTypes

In Figure 7.42, the Person class can be specialized as either a Female Person or a Male Person. Furthermore, Person’s can be specialized as an Employee. Here, Female Person or a Male Person of Person constitute one GeneralizationSet and Manager another. This illustration employs the notation forms depicted in the diagram above.

Figure 7.41 - Examples of generalizations between classes

Figure 7.42 - Multiple subtype partitions (GeneralizationSets) example

Shape

Polygon Ellipse Spline

Shape

Polygon Ellipse Spline

Separate target style

Shared target style

Female Person

PersonMale

Employee Person

gender

Female Person

Male

Person Employee

Person

employment status gender

Female Person

Male

Person Employee

Person

gender

gender employment

status

employment status

Female Person

Male

Person Employee

Person

Permettono di partizionare lo stesso elemento generale in modi diversi.

(28)

Classi astratte

In UML, un classificatore può essere dichiarato astratto:

significa che non è istanziabile.

I classificatori astratti si riconoscono per il nome in corsivo.

Le classi possono definire operazioni astratte (in corsivo), di cui non è data la specifica.

Una classe con almeno un’operazione astratta è automaticamente una classe astratta.

Una classe astratta non è istanziabile... ma i suoi figli possono esserlo.

(29)

Figli di classi astratte

-origin -width -height +draw()

+getArea() : int Shape

+draw()

+getArea() : int Rectangle

+draw()

+getArea() : int Circle

I figli forniscono il comportamento definito come astratto in Shape.

(30)

Ereditarietà multipla

Child

Parent1 Parent2

UML supporta l’ereditarietà multipla: un classificatore può ereditare da un numero arbitrario di altri classificatori.

A tempo di analisi questo permette di modellare efficacemente situazioni del mondo reale.

Tuttavia, classi con ereditarietà multipla dovranno essere

(31)

Associazione

Person Company employer employee

*

1 employs

Si tratta del tipo di relazione più generico: indica solo

l’esistenza di collegamenti (link) tra le istanze delle classi.

Rappresenta l’abilità di un’istanza di mandare messaggi a un’altra istanza.

Formalmente, definisce l’esistenza di tuple tra istanze tipate (se o1 è associato a o2, la coppia ordinata (o1, o2) fa parte della relazione).

Può coinvolgere più di due classi e la stessa classe più di una volta.

Tra le relazioni è anche la più flessibile e la meno vincolante.

(32)

Sintassi delle associazioni

Person Company employer employee

*

1 employs

Nome dell’associazione.

Triangolo direzionale: opzionale. Specifica la direzione in cui leggere l’associazione (aumenta la leggibilità).

Nome dei ruoli: opzionali a ciascun estremo.

Molteplicità: opzionale a ciascun estremo.

Navigabilità: opzionale indica che è possibile spostarsi da un qualsiasi oggetto della classe origine a uno o più oggetti

(33)

Molteplicità

Person

Company employer employee

*

1 employs

In una relazione n-aria, indica quante istanze della classe in quell’estremo possono partecipare alla relazione dopo aver fissato gli altri n-1 estremi.

Può essere un numero o un intervallo min..max, con * che indica l’infinito.

1..3,7 significa ’da 1 a 3 oppure 7’.

Molteplicità frequenti sono:

I 1

I 0..1

I 1..*

I *

(34)

Associazioni riflessive

Directory File

parent 0..1

child

* 1

*

Un’associazione riflessiva coinvolge la stessa classe più di una volta.

Esempio: gerarchia di file system.

Se si sostituisce la molteplicità 0..1 di parent con *, si

(35)

Esercizio sugli oggetti istanza di associazioni riflessive

Directory File

parent 0..1

child

* 1

*

Disegnare il dagramma degli oggetti dato il diagramma delle classi.

(36)

Associazioni riflessive e istanze

Directory File

parent 0..1

child

* 1

*

Una possibile realtà che soddisfa l’associazione...

home : Directory

projects : Directory pictures : Directory

memo.txt : File

(37)

Navigabilità (1)

Player Year

player year

playedInYear

Specifica se gli altri estremi dell’associazione possono sapere a quali istanze sono associati.

La freccia indica navigabilità.

La croce indica assenza di navigabilità.

La mancanza di entrambe significa navigabilità non specificata (tipico della fase di analisi).

Un oggetto di tipo Player sa in quali anni ha giocato, un oggetto di tipo Year non sa quali giocatori giocarono

quell’anno.

(38)

Navigabilità (2)

The following examples show notation for navigable ends.

In Figure 7.21:

The top pair AB shows a binary association with two navigable ends.

The second pair CD shows a binary association with two non-navigable ends.

The third pair EF shows a binary association with unspecified navigability.

The fourth pair GH shows a binary association with one end navigable and the other non-navigable.

The fifth pair IJ shows a binary association with one end navigable and the other having unspecified navigability.

Figure 7.22 shows that the attribute notation can be used for an association end owned by a class, because an association end owned by a class is also an attribute. This notation may be used in conjunction with the line-arrow notation to make it perfectly clear that the attribute is also an association end.

Figure 7.21 - Examples of navigable ends

A b B

2..5 1..4

a

E F

2..5 f 1..4

e

C D

2..5 d 1..4

c

h

G H

2..5 1..4

g

I J

2..5 j 1..4

i

A b B

2..5 1..4

a

E F

2..5 f 1..4

e

C D

2..5 d 1..4

c

h

G H

2..5 1..4

g

I J

2..5 j 1..4

i

Alcuni esempi di navigabilità.

Lab di Ingegneria del Software () I diagrammi di struttura - I parte A.A. 2010/2011 38 / 58

(39)

Notazione pratica per la navigabilità

In pratica, si tende a non specificare la navigabilità di ogni estremo di ogni relazione.

Un metodo diffuso è il seguente:

I non si usano le croci

I l’assenza di frecce indica navigabilità in entrambe le direzioni

I una freccia indica navigabilità in quella direzione e assenza di navigabilità nell’altra

I doppia navigabilità risulta indistinguibile da navigabilità non specificata, ma non è un problema in pratica

(40)

Attributi come associazioni

Examples

Figure 7.28 - Examples of attributes

The attributes in Figure 7.28 are explained below.

• ClassA::name is an attribute with type String.

• ClassA::shape is an attribute with type Rectangle.

• ClassA::size is a public attribute of type Integer with multiplicity 0..1.

• ClassA::area is a derived attribute with type Integer. It is marked as read-only.

• ClassA::height is an attribute of type Integer with a default initial value of 5.

• ClassA::width is an attribute of type Integer.

• ClassB::id is an attribute that redefines ClassA::name.

• ClassB::shape is an attribute that redefines ClassA::shape. It has type Square, a specialization of Rectangle.

• ClassB::height is an attribute that redefines ClassA::height. It has a default of 7 for ClassB instances that overrides the ClassA default of 5.

• ClassB::width is a derived attribute that redefines ClassA::width, which is not derived.

An attribute may also be shown using association notation, with no adornments at the tail of the arrow as shown in Figure 7.29.

Figure 7.29 - Association-like notation for attribute

ClassB id {redefines name}

shape: Square height = 7

/ width

ClassA name: String

shape: Rectangle + size: Integer [0..1]

/ area: Integer {readOnly}

height: Integer= 5 width: Integer

Area

Window

size

1

UML permette di rappresentare un attributo di una classe con la notazione tipica di un’associazione.

Il nome dell’attributo compare come ruolo insieme alla sua molteplicità.

Non ci sono ornamenti dalla parte della classe che contiene l’attributo.

(41)

Classi di associazione (1)

Spesso può capitare di avere un’associazione tra classi e la necessità di aggiungere attributi e comportamento che non sembrano adatti a nessuna delle due classi.

Ad esempio, si considerino le classi Persona e Azienda:

I una persona può essere occupata in molte aziende

I un’azienda può avere più impiegati

I dove inserire l’attributo salario?

I se inseriamo salario su persona potremmo avere il caso che una persona lavora per più aziende con uno stipendio

diverso per ogniuna di esse

I se inseriamo salario come attributo della classe Azienda perchè ogni azienda impiega molte persone.

I questo attributo quindi non si riferisce a persona o a compagnia, ma alla loro relazione

Si usano le classi di associazione.

(42)

Classi di associazione (2)

7.3.5 BehavioralFeature (from Kernel)

A behavioral feature is a feature of a classifier that specifies an aspect of the behavior of its instances.

Generalizations

“Feature (from Kernel)” on page 66

“Namespace (from Kernel)” on page 95

Description

A behavioral feature specifies that an instance of a classifier will respond to a designated request by invoking a behavior.

BehavioralFeature is an abstract metaclass specializing Feature and Namespace. Kinds of behavioral aspects are modeled by subclasses of BehavioralFeature.

Attributes

No additional attributes

Associations

ownedParameter: Parameter[*] Specifies the ordered set of formal parameters owned by this BehavioralFeature.

The parameter direction can be ‘in,’ ‘inout,’ ‘out,’ or ‘return’ to specify input, output, or return parameters. Subsets Namespace::ownedMember

raisedException: Type[*] References the Types representing exceptions that may be raised during an invocation of this operation.

Constraints

No additional constraints Additional Operations

Figure 7.25 - An AssociationClass is depicted by an association symbol (a line) and a class symbol (a box) connected with a dashed line. The diagram shows the association class Job, which is defined between the two classes Person and Company.

Company

Person * Job 1..*

Job

salary

person company

Si tratta di una classe a tutti gli effetti, chiamata come la relazione.

Collegata alla relazione tramite una linea tratteggiata.

Puoc possedere attributi, operazioni e altre associazioni.

Il significato della classe associazione in figura è dato un oggetto Persona e un’oggetto Azienda esiste un solo

oggetto Lavoro.

Lab di Ingegneria del Software () I diagrammi di struttura - I parte A.A. 2010/2011 42 / 58

(43)

Esempio classi associazione

Disegnare il diagramma delle classi che risolve la seguente frase:

Una persona può avere da zero a più cittadinanze. La

cittadinanza è la relazione che esiste tra una persona e uno stato.

Una persona può avere più di un lavoro retribuito in una specifica azienda.

Una persona può avere al più un lavoro in diverse aziende

(44)

Reificare le classi di associazione

Le classi di associazione sono un ottimo strumento di analisi... ma nella progettazione?

Trasformarle in una forma implementabile significa reificarle.

Si spezza l’associazione in due e si trasforma in una normale classe.

Company Person

Job

*

*

(45)

Aggregazione e composizione

Si tratta di particolari forme di associazione che rappresentano la relazione whole-part (tutto-parte) tra un aggregato e le sue parti.

Aggregazione: relazione poco forte (le parti esistono anche senza il tutto; es. i computer e il loro cluster).

Composizione: relazione molto forte (le parti dipendono dal tutto e non possono esistere al di fuori di esso; es. le stanze e la casa).

Non è sempre semplice capire quale delle due modella meglio una situazione.

(46)

Aggregazione e composizione: notazione

Aggregazione

ComputerCluster 0..1 * Computer

Composizione

House 1 1..* Room

(47)

Ancora sulla notazione

Figure 7.23 shows the notation for a derived union. The attribute A::b is derived by being the strict union of all of the attributes that subset it. In this case there is just one of these, A1::b1. So for an instance of the class A1, b1 is a subset of b, and b is derived from b1.

Figure 7.24 shows the black diamond notation for composite aggregation.

Changes from previous UML

AssociationEnd was a metaclass in prior UML, now demoted to a member of Association. The metaatribute targetScope that characterized AssociationEnd in prior UML is no longer supported. Fundamental changes in the abstract syntax make it impossible to continue targetScope or replace it by a new metaattribute, or even a standard tag, there being no

appropriate model element to tag. In UML 2, the type of the property determines the nature of the values represented by the members of an Association.

7.3.4 AssociationClass (from AssociationClasses)

A model element that has both association and class properties. An AssociationClass can be seen as an association that also has class properties, or as a class that also has association properties. It not only connects a set of classifiers but also defines a set of features that belong to the relationship itself and not to any of the classifiers.

Generalizations

“Association (from Kernel)” on page 36

“Class (from Kernel)” on page 45

Figure 7.23 - Derived supersets (union)

Figure 7.24 - Composite aggregation is depicted as a black diamond

A B

0..*

/b {union}

0..1 a

A1 B1

0..*

b1 0..1

a

{subsets b}

Window

Slider

Header Panel

+scrollbar

+title +body

1 1 1

2 1 1

Aggregazione e composizione possono essere combinate con le altre notazioni per le associazioni.

Lab di Ingegneria del Software () I diagrammi di struttura - I parte A.A. 2010/2011 47 / 58

(48)

Aggregazione: semantica (1)

L’aggregato può in alcuni casi esistere indipendentemente dalle parti, ma in altri casi no.

Le parti possono esistere indipendentemente dall’aggregato.

L’aggregato è in qualche modo incompleto se mancano alcune delle sue parti.

È possibile che più aggregati condividano una stessa parte.

L’aggregazione è transitiva.

L’aggregazione è asimmetrica.

(49)

Aggregazione: semantica (2)

Il vincolo più importante di una aggregazione è che le istanze devono essere acicliche.

In altre parole, la parte non deve essere in grado di contenere il tutto.

Se il problema richiede di avere cicli, bisogna usare una normale associazione.

(50)

Esempio di ciclo illegale

A

*

*

:A

:A

:A

Data un’aggregazione riflessiva (es. struttura dati albero), ecco

(51)

Composizione: semantica (1)

Ogni parte può appartenere ad un solo composito per volta.

Il composito è l’unico responsabile di tutte le sue parti:

questo vuol dire che è responsabile della loro creazione e distruzione.

Il composito può rilasciare una sua parte, a patto che un altro oggetto si prenda la relativa responsabilità.

Se il composito viene distrutto, deve distruggere tutte le sue parti o cederne la responsabilità a qualche altro oggetto.

In altre parole, la composizione è come l’aggregazione, ma la parte non può esistere separata dal tutto.

(52)

Associazioni e linguaggi di programmazione

Cosa diventano le associazioni quando sono implementate in un linguaggio di programmazione?

Dipende dalle caratteristiche del linguaggio e dal tipo e molteplicità dell’associazione.

I puntatori

I array

I references

I oggetti

Alcune associazioni vanno trasformate in una forma implementabile (reificate) durante la progettazione.

(53)

Associazioni durante la progettazione

La navigabilità viene generalmente aggiunta in fase di

progettazione (le associazioni di analisi tendono ad essere bidirezionali).

La navigabilità in un solo senso è vantaggiosa in vista dell’implementazione.

Aggregazione e composizione sono spesso aggiunte in fase di progettazione.

(54)

Esercizio

Che tipi di associazioni legano le seguenti proposizioni:

La macchina è un mezzo di trasporto.

Un mazzo di carte francesi ha 52 carte.

Un’anzienda ha diversi dipendenti.

La bicicletta ha 2 ruote.

Il sistema solare è formato da pianeti.

(55)

Esercizio negozio on-line

Disegnare il diagramma delle classi di analisi del seguente problema:

Un negozio di articoli sportivi desidera acquistare

un’applicazione che permetta l’acquisto on-line di alcuni articoli. I clienti si dovranno registrare. Il cliente potrà

scegliere gli articoli secondo alcuni parametri raccolti nel catalogo definito dall’amministratore del negozio on-line. Si potranno acquistare più articoli in una sola transazione,

questi articoli formeranno un carrello. Al termine dell’acquisto saranno disponibili diversi metodi di pagamento.

(56)

Esercizio gestione biblioteca

Viene richiesto un sistema che permetta al bibliotecario e a un utente di effettuare ricerche di libri. Il bibliotecario deve poter effettuare il prestito e gestire la restituzione del libro.

Un utente deve restituire il libro entro una certa data. Se il prestito risulta scaduto per la prima volta il sistema emette un avviso, se è la seconda volta il bibliotecario registra e

stampa una multa. L’utente a questo punto può decidere se pagare la multa subito oppure no. Il sistema deve

permettere la registrazione del pagamento.

(57)

Esercizio ricerche prodotti

Utilizzando il metodo CRC individuare le classi di analisi del seguente problema:

Una libreria ha la necessità di un sistema che le permetta di far effettuare ricerche al suo personale nel suo catalogo.

All’interno della libreria vengono venduti anche dvd video, e cd musicali.

Questo catalogo è consultabile anche on-line dagli utenti che hanno la carta fedeltà della libreria.

(58)

Esercizio

Se fosse la stessa azienda a produrre il software cosa potrebbe fare?

Si potrebbe modificare le analisi fatte per rendere riusabile lavoro effettuato precedentemente?

Disegna il nuovo diagramma delle classi.

Riferimenti

Documenti correlati

La stesura di queste linee guida non vuole peraltro rimanere un prodotto isolato del gruppo di studio che si prefigge un ulteriore scopo: ampliare, perfezionando i criteri

 I diagrammi delle classi mostrano anche gli attributi e le operazioni di una classe, e le restrizioni che si applicano al modo con cui gli oggetti sono collegati tra loro.

 I diagrammi delle classi mostrano anche gli attributi e le operazioni di una classe, e le restrizioni che si applicano al modo con cui gli oggetti sono collegati tra loro.

e l’Autorità di Gestione del PSR Campania 2014-2020, hanno organizzato una giornata formativa a beneficio dei Gruppi di Azione Locale campani, con lo specifico

[r]

Il Candidato, dato l’argomento estratto ed utilizzando il materiale messo a disposizione dalla Commissione, effettuando la/le misura/e che ritiene più opportune, realizzi la

­l’attivazione  di  un  tentativo  di  conciliazione  ai  sensi  dell’art.  135  del  CCNL  29.11.2007,  richiamato 

Per le Finalità Contrattuali di cui sopra, i Dati Personali possono essere trasferiti ai seguenti soggetti terzi, situati all'interno dell'Unione Europea, che svolgono