版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第18章使用GRASP的对象设计例如
ObjectDesignExampleswithGRASP学习目标设计用例实现.应用GRASP为类分配职责应用UML阐述和思考对象设计图18-1制品关系、强调用例实现用例实现〔UseCaseRealizations〕
用例实现描述如何按对象的协作将一个特定的用例实现为设计模型用例实现反映用例表达的需求与满足需求的对象设计之间的关系
UML交互图是表示用例实现的一种通用语言用例实现〔UseCaseRealizations〕的UML图ProcessSale(from<UseCaseName>)ProcessSale<<use-caserealization>><<realize>>用例实现与UP制品的关系用例文本指出了SSD中所示的系统操作系统操作可以成为输入到领域层交互图的控制器中的起始消息初学者容易忽略这个关键点领域层交互图阐述了对象如何交互以完成所需任务-用例实现系统操作与通信图图18-2通信图和系统操作的处理系统操作与顺序图图18-3顺序图和系统操作图关键点:将SSD中的系统操作作为领域层控制对象的起始消息操作:enterItem(itemID:ItemID,quantity:integer)交叉引用:用例:处理销售前置条件:有正在进行的销售后置条件:创立SalesLineItem的实例sli(创立实例)……
操作契约和用例实现可以根据用例文本或某人的领域知识来设计用例实现。但对复杂的系统操作,需要编写操作契约操作契约CO2:enterItem图18-4满足契约后置条件的局部交互图操作契约的实现操作:makeNewSale()交叉引用:用例:处理销售前置条件:无后置条件:-创立了Sale的实例s(创立实例).-s被关联到Register(形成关联).-s的属性被初始化(修改属性).如何设计makeNewSale:RegistermakeNewSale1:???()操作契约CO1:makeNewSale()系统操作makeNewSale的实现方案选择Register作为控制器类创立Sale的一个新的实例s建立s与Register的关联初始化s的属性(包括创立SalesLineItem的一个对象集)可供选择的控制器类代表整个系统的设备或子系统的控制器:Register,POSSystem代表处理或接受一个用例场景的所有系统事件的控制器:ProcessSaleHandler,ProcessSaleSession图18-5应用GRASP控制器模式由谁来创立Sale和SalesLineItem的对象?实际上,从领域模型可知:Register知道Sale类的信息,Sale知道SalesLineItem类的信息。按照创立者模式,可由Register负责创立Sale类的对象,由Sale负责创立SalesLineItem类的对象集。Sale和集合的创立创立一个新的sale实例s的属性初始化创立一个对象集(容器)图18-6Sale和集合的创立操作:enterItem(itemID:ItemID,quantity:Integer)交叉引用:用例:处理销售前置条件:有正在进行销售后置条件:-创立了SalesLineItem的实例sli(实例创立).-sli被关联到当前的sale(形成关联).-sli.quantity赋值为quantity.〔修改属性〕-基于itemID的匹配,sli被关联到productSpecification(形成关联).如何设计enterItem操作契约CO2:enterItem:RegisterenterItem()1:???()系统操作enterItem的实现方案讨论1系统操作契约的要求:已经存在一个对象s。创立SalesLineItem的一个新的实例sli,将它放进在前面创立的SalesLineItem对象集。建立s与sli之间的关联。根据系统操作的输入参数quantity修改sli的quantity属性。sli基于itemID关键字与productSpecification建立关联。系统操作enterItem的实现方案讨论2选择Register作为控制器类暂不考虑显示商品说明与价格〔根据模型/视图别离的设计原那么〕只需获得相关信息。查找产品说明ProductSpecifications。发送消息给产品目录ProductCatalog,用以查找产品说明ProductSpecifications。因为产品目录包含了所有的产品说明信息。假设在StartUP用例实现中创立Register和ProductCatalog的实例,两个实例间建立了永久的关联。假设产品说明ProductSpecifications都在内存,暂不考虑从数据库恢复ProductSpecifications的问题。查找产品说明的消息是发送给对象集的消息。综合上述讨论,基于GRASP设计模式,考虑实现enterItem的对象设计。enterItem交互图,动态视图图18-7enterItem交互图,动态视图图18-8和enterItem设计有关的局部DCD,静态视图和enterItem设计有关的局部DCD,静态视图操作:endSale()交叉引用:用例:处理销售前置条件:正在进行的销售后置条件:-Sale.isComplete被设置为真〔修改属性〕系统操作endSale的实现操作契约CO3:endSale:RegisterendSale()1:???()系统操作endSale的实现方案讨论选择Register作为控制器类。更新Sale对象的信息isCompete=true考虑到“处理销售〞用例文本的场景,要求计算税后销售总金额〔将用于显示〕。由于模型/视图别离设计原那么,暂不考虑显示总金额的设计。主成功场景:3.收银员输入商品工程标识。4.系统逐条记录出售的商品工程,并……收银员重复3-4步,直到结束。5.系统显示总额和所计算的税金图18-9完成商品工程的输入完成商品工程的输入分析计算销售总金额的设计指出谁有知道销售总金额的职责。推导出销售总金额是所有销售商品小计的和。销售商品小计:=商品数量*单价。列出满足职责所需的信息和知道这些信息的类。陈述职责概括所需信息列出知道信息的类计算销售总额所需信息信息专家商品单价ProductDescription.priceProductDescription商品数量SalesLineItem.quantitySalesLineItem销售商品小计SalesLineItem.subtotalSalesLineItem所有当前Sale中的SalesLineItemSale获取销售总额图18-10Sale.getTotal交互图图18-11在注解符号中表示方法在注解符号中表示方法操作:makePayment(amount:Money)交叉引用:用例:处理销售前置条件:有正在进行的销售后置条件:-创立了Payment的实例p(创立实例).-p.amountTendered被赋值为amount〔修改属性).-p被关联到当前的Sale〔形成关联〕-当前Sale被关联到store(形成关联)。(以便将已完成的sale添加到历史纪录).系统操作makePayment的实现操作契约CO4:makePayment:RegistermakePayment()1:???()系统操作makePayment的实现方案讨论选择Register作为控制器类创立Payment的一个实例记录已完成销售Sale的日志计算支付余额〔将用于显示〕图18-3Register.makePayment的交互图Register.makePayment的交互图图18-14谁应该负责获知已完成的销售谁应该负责获知已完成的销售图18-15在日志中记录已完成的销售在日志中记录已完成的销售图18-16Sale.getBalance的交互图计算余额图18-17反映了更多设计决策的更为完整的DCDNextGen迭代1最终的DCD系统初始化和“启动〔startUP〕〞用例何时创立初始化的设计--准那么:最后完成初始化的设计如何完成应用的启动--创立一个初始领域对象〔initialdomainobject〕。java应用中用的是main()方法“启动〔startUP〕〞用例系统操作的解释--在一个交互图中,发送create()消息用以创立起始的领域对象进行初始化;〔初始化完成后,控制返回GUI〕。--〔可选〕如果这个起始的领域对象同时获得进程控制权,那么在第二个交互图中,发送run()消息〔或其他等价的消息〕给这个起始对象。设计:store.create()创立Store、register,productCatalog和productSpecification对象;建立productCatalog与productSpecification间的关联;建立store与productCatalog间的关联;建立store与register间的关联;建立register与productCatalog间的关联。Store作为初始领域对象,负责以下有关的创立和初始化工作。初始领域对象及其后继领域对象的创立图18-20初始领域对象及其后继领域对象的创立从用户界面层到领域层连接的考虑用户界面〔UI〕层不应承担对领域对象处理的职责,只负责用户界面层的任务,例如更新窗口内容等。用户界面〔UI〕层将所有面向领域层的请求转发给领域层,由领域层来处理这些请求。在领域层设计一个控制器对象接受用户界面对领域层的请求。创立用户界面对象的同时,应建立用户界面对象到控制器对象的连接。用户界面层对象获得领域层对象可见性的的设计初始化例程〔例如,Java的main方法〕创立一个UI和一个领域对象,将领域对象传递给UI。或者由UI对象通过一个负责创立领域对象的Factory对象创立领域对象。publicclassMain{publicstaticvoidmain(String[]args){Storestore=newStore();//创立初始的领域对象Registerregister=store.getRegister();//由初始的领域对象创立控制器对象ProcessSaleJFrameframe=newProcessSaleJFrame(register);//创立一个窗口对象,同时建立与控制器对象的连接
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度内蒙古自治区包头市煤炭买卖合同3篇
- 二零二四年度教育培训与咨询服务合同标的详细说明2篇
- 2024年度医疗美容服务合作合同3篇
- 2024年上海单位员工培训与发展合同3篇
- 租赁合同解除通知函
- 物业管理服务合同
- 校服购销合同
- 全新供应链管理服务合同(2024版)6篇
- 二零二四年度企业并购及重组顾问合同2篇
- 二零二四年度餐饮服务与管理合同标的及服务细节
- 物业表格:工程维修单
- 空运提单格式
- 幼儿园中班语言《小兔子开铺子》课件
- 湖北省饲料企业名录
- 五年级上册美术课件-第4课 未来的交通工具丨赣美版
- 2021-2022学年五年级下学期数学课后服务数学思维类游戏课4 流水行船问题 课件(共12张PPT)
- 碳酸饮料对人体危害
- 火情侦察工作中最应注意的五大问题
- 荒漠区生态治理(麦草沙障、植物固沙)施工方案
- 农业机械化发展现状和趋势-PPT课件
- 大学生职业生涯规划大赛参赛作品ppt课件
评论
0/150
提交评论