• Non ci sono risultati.

Ingegneria del Software

N/A
N/A
Protected

Academic year: 2022

Condividi "Ingegneria del Software"

Copied!
11
0
0

Testo completo

(1)

Ingegneria del Software

Esempi di Progettazione a oggetti con i pattern GRASP

Prof. Orazio Tomarchio

O. Tomarchio Ingegneria del Software 2

Cosa vedremo in questa lezione

Obiettivi

Progettare realizzazione di casi d'uso

Applicare i pattern GRASP per assegnare le responsabilità alle classi

Applicare UML per illustrare e pensare durante la progettazione degli ogget

Il tutto facendo riferimento ai casi di studio

(2)

O. Tomarchio Ingegneria del Software 3

Progettazione OO con pattern GRASP

Realizzazione di un caso d’uso

Definizione:

Descrive come viene realizzato un caso d’uso all’interno del Modello di Progetto in termini di ogget che collaborano

In realtà una realizzazione di caso d’uso è relativa ad uno solo dei possibili scenari di caso d’uso

Sarebbe più corretto parlare di realizzazione di scenario di caso d’uso (ma non è una espressione usata nella pratica)

O. Tomarchio Ingegneria del Software 4

Progettazione OO: relazioni tra gli elaborati

Operation: 

    enterItem(…) Post­conditions:

­ . . . Operation Contracts

Sale date. . .

Sales LineItem quantity 1..*

1 . . .

. . . Domain Model

Use­Case Model

Design Model : Register

enterItem (itemID, quantity)

: ProductCatalog

d = getProductDescription(itemID) addLineItem( d, quantity )

: Sale Require­

ments Business  Modeling

Design

Sample UP Artifact Relationships

: System

enterItem (id, quantity) Use Case Text

System Sequence Diagrams make NewSale()

system events

Cashier Process

Sale

: Cashier use case names

system operations Use Case Diagram

Supplementary Specification

Glossary

starting events to  design for, and  detailed post­

condition to  satisfy

Process Sale 1. Customer  arrives ...

2. ...

3. Cashier  enters item  identifier.

inspiration for  names of  some  software  domain  objects

functional  requirements  that must be  realized by  the objects ideas for 

the post­

conditions

Register ...

makeNewSale() enterItem(...) ...

ProductCatalog ...

getProductDescription(...) ...

* 1

non­functional  requirements domain rules

item details,  formats,  validation

(3)

O. Tomarchio Ingegneria del Software 5

Progettazione OO: relazioni tra gli elaborati

I casi d’uso suggeriscono le operazioni di sistema (SSD)

Le operazioni di sistema diventano i messaggi iniziali entranti nel Controller per i diagrammi di interazione

I diagrammi di interazione illustrano come gli ogget collaborano per realizzare i casi d’uso

Punti di attenzione:

Il Modello di dominio e gli elaborati del modello dei casi d’uso sono un input impreciso e incompleto per la progettazione

Si può progettare a partire da casi d’uso e SSD e opzionalmente dai contrat delle operazioni

O. Tomarchio Ingegneria del Software 6

Studio di caso: POS

Realizzazione del caso d'uso Process Sale

(4)

O. Tomarchio Ingegneria del Software 7

POS (modello di dominio)

Register id

Store Item nameaddress

Sale dateTime / total

CashPayment amountTendered

Sales LineItem quantity

Cashier id Customer

Product Catalog

Product Description itemID description price

Stocks

*

Houses 1..*

Used­by

*

Contains 1..*

Describes

*

Captured­on Contained­in

1..*

Records­sale­of 

0..1

Paid­by Is­for

Logs­

completed

*

 Works­on 1 1

1

1 1..*

1 1

1 1

1

1 1

0..1 1

1 Ledger

Records­

accounts­

for 1

1

O. Tomarchio Ingegneria del Software 8

Linee guida:

inizializzazione e caso d'uso di avviamento

Mentre si codifica

Si programmi prima almeno una parte delle inizializzazioni per l'avviamento

Ma, durante la modellazione della progettazione OO

Si consideri la progettazione delle inizializzazioni per l'avviamento alla fine

Dopo aver scoperto cosa va realmente creato e inizializzato

Progetamo quindi l'inizializzazione a supporto delle

necessità di altre realizzazione di caso d'uso

(5)

O. Tomarchio Ingegneria del Software 9

POS (1)

Progettazione di makeNewSale

Scelta del controller.

Per il Pattern Controller si hanno le scelte:

Facade Controller

Store (oggetto radice)

Register (un dispositivo fisico su cui gira il sw)

POSSystem (rappresenta il sistema complessivo)

Controller di caso d’uso

ProcessSaleHandler o ProcessSaleSession

Dato che le operazioni sono poche la scelta ricade su uno dei Facade Controller quindi

Si introduce la classe software Register

Scelta di chi crea una Sale (vendita)

Dall’analisi del Modello di dominio si vede che Register registra istanze di Sale quindi:

Per LRG si introduce la classe software Sale

Per il Pattern Creator è Register che può creare Sale

Deve essere creata una collezione vuota che conterrà i SalesLineItem

La collezione sarà mantenuta da Sale quindi per Creator Sale è un buon candidato per creare la collezione

O. Tomarchio Ingegneria del Software 10

POS (2)

Progettazione di makeNewSale (diagramma di sequenza)

(6)

O. Tomarchio Ingegneria del Software 11

POS (3)

Progettazione di enterItem

Scelta del controller (Pattern Controller)

Si usa Register (Facade Controller)

Scelta di chi crea una SalesLineItem

Dall’analisi del Modello di Dominio si vede che Sale contiene SalesLineItem quindi

Per LRG si introduce la classe sw SalesLineItem (Sale già esiste)

Per Creator Sale crea SalesLineItem

Scelta di chi ricerca una ProductDescription a partire da un itemID (Pattern Expert)

Dall’analisi del Modello di Dominio si vede che ProductCatalog contiene tutte le ProductDescription quindi

Per LRG si introducono le classi software ProductCatalog e ProductDescription

L’Expert è ProductCatalog. A questo si aggiunge il metodo getProductDescription(id)

Register deve poter chiamare il metodo getProductDescription

Deve avere Visibilità di ProductCatalog quindi:

Si aggiunge a Register una associazione con ProductCatalog

O. Tomarchio Ingegneria del Software 12

POS (4.1)

2: makeLineItem(desc, qty) enterItem(id, qty)

1: desc = getProductDesc(id) 2.1: create(desc, qty)

1.1: desc = get(id)

:Register :Sale

:Product Catalog

sl: SalesLineItem

lineItems :  List<SalesLineItem>

: Map<ProductDescription>

2.2: add(sl) by Expert

by Controller by Creator

Aggiunge SalesLineItem alla lista

Diagramma di comunicazione

(7)

O. Tomarchio Ingegneria del Software 13

POS (4.2)

SalesLineItem quantity : Integer ...

ProductCatalog ...

getProductDesc(...)

ProductDescription description : Text price : Money itemID: ItemID ...

1..*

1..* Register

...

enterItem(...) ...

Sale isComplete : Boolean time : DateTime makeLineItem(...) 1 ...

1

1 catalog

currentSale

descriptions {Map}

lineItems {ordered}

description

Diagramma delle classi di progetto (DCD) - (parziale)

O. Tomarchio Ingegneria del Software 14

POS (5)

Progettazione di endSale

Scelta del controller (Pattern Controller)

Si usa Register (Facade Controller)

Scelta di chi assegna true a Sale.isComplete (Pattern Expert)

Dall’analisi del Modello di Dominio si vede che isComplete è mantenuto da Sale

Per Expert è Sale che deve modificare isComplete quindi si aggiunge a Sale il metodo becomeComplete

Scelta di chi calcola il totale della vendita

Dall’analisi del Modello di Dominio si vede che Sale contiene SalesLineItem quindi:

Per Expert è Sale che deve restituire il totale quindi si aggiunge getTotal a Sale

Scelta di chi calcola il subtotale (totale di una SalesLineItem)

Per il calcolo del subtotale è necessario conoscere SalesLineItem.quantity e ProductDescription.price

Dall’analisi del Modello di Dominio si vede che SalesLineItem ha come attributo quantity ed è associato a ProductDescription

Per Expert è SalesLineItem che deve restituire il subtotale quindi si aggiunge il metodo getSubtotal

(8)

O. Tomarchio Ingegneria del Software 15

POS (6)

:Register

endSale( 1: becomeComplete s :Sale

by Expert by Controller

:Sale

tot = getTotal 1 * [i = 1..n]: st = getSubtotal

:ProductDescription 1.1: pr = getPrice lineItems[ i ]: 

SalesLineItem

by Expert by Expert UML: note the selector 

notation to select elements  from the lineItems collection

O. Tomarchio Ingegneria del Software 16

POS (7)

Progettazione di makePayment

Scelta del controller (Pattern Controller)

Si usa Register (Facade Controller)

Scelta di chi crea una Payment

Dall’analisi del Modello di Dominio si vede che Register registra e Sale utilizza strettamente Payment

2 candidati: Register e Sale. Si valutano le alternative con Low Coupling e High Coesion

Per Low Coupling la scelta è Sale

Scelta di chi registra le vendite completate

Dall’analisi del Modello di Dominio si vede che può essere la classe Ledger

Scelta di chi è il responsabile di conoscere il resto

Per calcolare il resto è necessario conoscere il totale della vendita e l’importo in contanti

Gli Expert parziali sono Sale e Payment

2 alternative: Payment responsabile principale e Sale secondario o viceversa. Si valutano le alternative con Low Coupling e High Coesion

Per Low Coupling la scelta è: Sale responsabile principale e Payment secondario (Sale è già accoppiato a Payment perchè lo crea)

(9)

O. Tomarchio Ingegneria del Software 17

POS (8)

O. Tomarchio Ingegneria del Software 18

POS (9)

DCD finale per l'iterazione 1

SalesLineItem quantity : Integer getSubtotal() ProductCatalog

...

getProductDesc(...)

ProductDescription description : Text price : Money itemID: ItemID ...

Store address : Address name : Text addCompleteSale(...)

Payment amount : Money ...

1..*

1..*

Register ...

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

Sale isComplete : Boolean time : DateTime becomeComplete() makeLineItem(...) makePayment(...) getTotal() 1

1

1

1

1

1

*

catalog

catalog

register

currentSale

descriptions {Map}

lineItems {ordered}

payment completedSales

{ordered}

description

(10)

O. Tomarchio Ingegneria del Software 19

POS (10)

Connessione dello strato UI allo strato di dominio

:Register Cashier

:ProcessSale JFrame

actionPerformed( actionEvent )

1: enterItem(id, qty) system event UI

Layer

Domain Layer

presses button

Nel Main si effettuano i seguenti step

si crea l’oggetto UI

si crea il Facade Controller Register

si rende visibile Register all’oggetto UI

Successivamente ogni azione sull’UI viene trasformata in una chiamata a Register

O. Tomarchio Ingegneria del Software 20

POS (11)

Caso d’uso di avviamento

StartUp del sistema e creazione dell’oggetto di dominio iniziale

Un oggetto radice rispetto alla gerarchia di contenimento

(11)

O. Tomarchio Ingegneria del Software 21

Esercizio

Realizzare il caso d'uso per l'iterazione 1 per lo studio di caso

relativo a Monopoly

Riferimenti

Documenti correlati

• Analisi e progettazione degli componenti comuni (detti anche core asset) e di quelli specifici di prodotto (detti anche features).. • Incontri in aula per condividere l’analisi e

• Quality Manager: responsabile della qualit` a del prodotto realizza- ti dal gruppo di progetto, effettua anche i test, responsabile della documentazione del progetto e della

All’aereo Boeing di Ethiopian Airlines, così come a quello di Lion Air precipitato in Indonesia, mancava un sistema di sicurezza in grado di avvisare i piloti di eventuali

• L’Ingegneria del Sw (Software Engineering) è una disciplina metodologica, cioè studia i metodi di produzione, le teorie alla base dei metodi, e gli strumenti di sviluppo e

come Web service, che al ricevere di una form XML che descrive una carriera risponde con un’altra form XML che dice se lo studente ` e ammesso o no alla laurea specialistica (il

 L'Ingegneria di Sistema ha come oggetto tutti gli aspetti dello sviluppo di un sistema basato su computers, inclusi gli aspetti hardware, software e di processo.  L'Ingegneria

Supponiamo che per fare questo sia possibile ridurre la durata di un solo task; si supponga inoltre che il task, una volta “accorciato”, non possa avere durata nulla. Si richiede

7) Si consideri un sistema di frenaggio ABS di una automobile. Per migliorare la sicurezza del dispositivo, i progettisti hanno deciso di includere tre centraline hardware di