06-Modello di Implementazione.pdf - Informatica

12 downloads 96 Views 348KB Size Report
Un Modello di Implementazione è costituito ... Linee guida per passare dal modello di progetto al modello di .... Caso di studio POS:modello di implementazione.
Modello di Implementazione Laboratorio di Ingegneria del Software Andrea Bei

Modello di implementazione 



Un Modello di Implementazione è costituito dall’insieme dei sorgenti che implementano un Modello di Progetto Linee guida per passare dal modello di progetto al modello di implementazione     

Progettare la visibilità Creare classi e interfacce dai DCD Creare metodi dai diagrammi di interazione Usare collezioni per implementare relazioni uno a molti tra classi Seguire un ordine di implementazione guidato dall’accoppiamento (dalla classe meno accoppiata alla classe più accoppiata)

Modello di Implementazione

2

Progettare la visibilità  

Un oggetto A può inviare un messaggio ad un oggetto B solo se questo è visibile da A 4 tipi di visibilità da A verso B  Per attributo  B è un attributo di A  Per parametro  B è un parametro di un metodo di A  Locale  B è un oggetto locale di un metodo di A  Globale  B è visibile globalmente

Modello di Implementazione

3

Visibilità per attributo class Register { ... private ProductCatalog catalog; ... }

enterItem (itemID, quantity)

: Register

: ProductCatalog

desc = getProductDesc( itemID )

public void enterItem( itemID, qty ) { ... desc = catalog.getProductDesc(itemID) ... }

Modello di Implementazione

4

Visibilità per parametro

enterItem(id, qty)

2: makeLineItem(desc, qty) :Register

:Sale

1: desc = getProductDesc(id) 2.1: create(desc, qty) :Product Catalog makeLineItem(ProductDescription desc, int qty) { ... sl = new SalesLineItem(desc, qty); ... }

Modello di Implementazione

sl : SalesLineItem

5

Visibilità per parametro -> attributo enterItem(id, qty) :Register

2: makeLineItem(desc, qty)

:Sale

2: desc = getProductDesc(id) 2.1: create(desc, qty) :Product Catalog sl : SalesLineItem // initializing method (e.g., a Java constructor) SalesLineItem(ProductDescription desc, int qty) { ... description = desc; // parameter to attribute visibility ... }

E’ comune trasformare la visibilità per parametro in visibilità per attributo soprattutto nel caso di parametri passati ai costruttori

Modello di Implementazione

6

Visibilità locale enterItem(id, qty) { ... // local visibility via assignment of returning object ProductDescription desc = catalog.getProductDes(id); ... }

enterItem (itemID, quantity)

: Register

: ProductCatalog

desc = getProductDesc( itemID )

Modello di Implementazione

7

Creare classi e interfacce dai DCD 

I DCD descrivono nomi delle classi e delle interfacce  le firme delle operazioni  gli attributi delle classi 



A partire dai DCD è possibile descrivere la definizione di base di classi e metodi 

alcuni strumenti UML producono automaticamente la definizione di base

public class SalesLineItem { private int quantity; private ProductDescription description; public SalesLineItem(ProductDescription desc, int qty) { ... } public Money getSubtotal() { ... } }

ProductDescription SalesLineItem quantity : Integer

description description : Text price : Money 1 itemID : ItemID

getSubtotal() : Money ...

Modello di Implementazione

8

Creare metodi dai diagrammi di interazione 

Ogni messaggio all’interno di un metodo è trasformato in una istruzione

enterItem(id, qty) :Register

2: makeLineItem(desc, qty)

1: desc = getProductDesc(id)

:Sale

2.1: create(desc, qty) :Product Catalog sl: SalesLineItem

1.1: desc = get(id) 2.2: add(sl) : Map

lineItems : List

class Register { ... private ProductCatalog catalog; public void enterItem(ItemID id,int qty) { ProductDescription desc=catalog.getProdutDesc(id); currentSale.makeLineItem(desc,qty); } Modello di... Implementazione

9

Collezioni per relazioni uno a molti 

Implementare le relazioni uno a molti tra classi con le collezioni  in

Java: List, Set, Map Sale

public class Sale { ...

isComplete : Boolean time : DateTime

SalesLineItem lineItems

private List lineItems = new ArrayList(); }

becomeComplete() makeLineItem() makePayment() getTtotal()

1..*

quantity : Integer getSubtotal()

Le classi collezione sono A collection class is necessary to necessarie per mantenere maintain attribute visibility to all la the visibilità per attributo di tutte le SalesLineItems. SalesLineItem

Modello di Implementazione

10

Seguire un ordine di implementazione 

Implementare le classi dalla meno accoppiata alla più accoppiata Acc=3 Store

7

address : Address name : Text

ProductCatalog

addSale(...) 1

Acc=0

Acc=1

1

ProductDescription

3

... 1..*

2

description : Text price : Money itemID : ItemID

getProductDesc(...) ...

1 Register

Acc=2

Acc=2 Sale

6

5

Acc=1

isComplete : Boolean time : DateTime

... endSale() enterItem(...) makeNewSale() makePayment(...)

1

1

SalesLineItem

becomeComplete() makeLineItem(...) makePayment(...) getTotal() ...

1..*

quantity : Integer getSubtotal()

*

Payment 1

Modello di Implementazione

4

1 Acc=0

amount : Money ...

11

Caso di studio POS:modello di implementazione 1: Payment

2: ProductSpecification (è ProductDescription)

Modello di Implementazione

12

Caso di studio POS:modello di implementazione 3: ProductCatalog

4: SalesLineItem

Modello di Implementazione

13

Caso di studio POS:modello di implementazione 5: Sale

Modello di Implementazione

14

Caso di studio POS:modello di implementazione 6: Register

6: Store

Modello di Implementazione

15