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