Dpto. de Computación y T.I. Taller de Ingeniería de Software Clase 7 Agenda 1. Traducción Clases a Implementación 2. Asignación próxima semana 3. Exposición por equipos Definir clases con métodos y atributos simples 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 ... Atributos Referencia Creación de Métodos Los diagramas de comunicación muestran los mensajes que son enviados en respuesta a la invocación de un método La secuencia de estos mensajes se corresponde con una serie de sentencias en la definición de un método Diagrama de Comunicación 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<ProductDescription> lineItems : List<SalesLineItem> Métodos public class Register { private ProductCatalog catalog; private Sale currentSale; ProductCatalog public Register(ProductCatalog pc) {...} public void endSale() {...} public void enterItem(ItemID id, int qty) {...} public void makeNewSale() {...} public void makePayment(Money cashTendered) {...} } catalog 1 ... getProductDesc(...) Sale Register ... endSale() enterItem(id: ItemID, qty : Integer) makeNewSale() makePayment(cashTendered : Money) currentSale 1 isComplete : Boolean time : DateTime becomeComplete() makeLineItem(...) makePayment(...) getTotal() Métodos { ProductDescription desc = catalog.ProductDescription(id); currentSale.makeLineItem(desc, qty); } enterItem(id, qty) 2: makeLineItem(desc, qty) :Register 1: desc := getProductDescription(id) :Product Catalog :Sale Métodos { lineItems.add( new SalesLineItem(desc, qty) ); } enterItem(id, qty) 2: makeLineItem(desc, qty) :Register :Sale 2.2: add(sl) lineItems : List<SalesLineItem> 2.1: create(desc, qty) sl: SalesLineItem Clases Colectoras public class Sale { ... Sale isComplete : Boolean time : DateTime SalesLineItem lineItems private List lineItems = new ArrayList(); } becomeComplete() makeLineItem() makePayment() getTtotal() A collection class is necessary to maintain attribute visibility to all the SalesLineItems. 1..* quantity : Integer getSubtotal() Orden de Implementación Store 7 address : Address name : Text 1 ProductCatalog addSale(...) 1 2 ProductDescription 3 ... 1..* getProductDesc(...) description : Text price : Money itemID : ItemID ... 1 1 Register Sale 6 isComplete : Boolean time : DateTime ... endSale() enterItem(...) makeNewSale() makePayment(...) 5 1 4 SalesLineItem becomeComplete() makeLineItem(...) makePayment(...) getTotal() ... 1..* quantity : Integer getSubtotal() * Payment 1 amount : Money ... 1 Entrega Semana 8 Exposición Exposición:: Diagramas de Secuencia y Comunicación Exposición: Traducción de Clases a Implementación Recursos Bernd Bruegge Bruegge,, and Allen H. Dutoit Dutoit.. ObjectObjectOriented Software Engineering Engineering:: Using UML, Patterns and Java. Prentice Hall. 3rd Edition Edition,, 2009 Craig Larman Larman:: Applying UML and Patterns: An Introduction to ObjectObject-Oriented Analysis and Design and Iterative Development. 2005. http://www.craiglarman.com/book_applying/applying.htm