270 likes | 358 Views
Chapter 18. 使用 GRASP 的对象设计示例. 大纲. 用例实现 应用 GRASP 为类分配职责 应用 UML 阐述和思考对象的设计. 什么是用例实现. 用例如何在设计模型中实现. 系统事件. 用例实现. 领域模型. 如何实现 makeNewSale. 契约(后置条件) 创建了 Sale 的实例 s s 被关联到 Register s 的属性被初始化 选择控制器 类型 1 还是类型 2 ?. 如何实现 makeNewSale. 如何实现 enterItem. 如何实现 enterItem. 契约(后置条件)
E N D
Chapter 18 使用GRASP的对象设计示例
大纲 • 用例实现 • 应用GRASP为类分配职责 • 应用UML阐述和思考对象的设计
什么是用例实现 • 用例如何在设计模型中实现
如何实现makeNewSale • 契约(后置条件) • 创建了Sale的实例s • s被关联到Register • s的属性被初始化 • 选择控制器 • 类型1还是类型2?
如何实现enterItem • 契约(后置条件) • 创建了SalesLineItem的实例sli • sli被关联到当前的Sale • sli.quantity赋值为quantity • 基于itemID的匹配,sli被关联到ProductDescription • 控制器类的选择
用代码表示对象的协作? Register::enterItem(id, qty){ ProductDescription desc = ProductCatelog.getInstance().get(id); currentSale.makeLineItem(desc,qty); }
如何实现endSale • 契约(后置条件) • Sale.isComplete被设为真 • 控制器的选择
如何实现makePayment • 契约(后置条件) • 创建了Payment的实例p • p.amountTendered被赋值为amount • p被关联到当前的Sale • 当前的Sale被关联到Store
比较 SaleTable RegisterTable
比较 Service_3 Service_n
如何将UI层连接到业务层 • 获取业务对象的方法 • 从应用的入口方法(如main方法)创建业务层的 “根”对象,并传递给UI。 • 从工厂对象取得业务对象。
启动应用(代码) public class Main { public static void main(String[] args) { Store store = new Store(); Register register = store.getRegister(); ProcessSaleJFrame frame = new ProcessSampleJFrame(register); ....... } }