- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
软件工程-第11讲R2,软件工程前沿技术讲座,软件工程讲义,软件工程讲座,软件工程导论第六版,软件工程导论第6版,软件工程第9版pdf,软件工程导论第6版pdf,软件工程原书第9版,软件工程原书第八版
责任分配原则(1) ——专家( Expert )原则 把责任分配给信息专家 --有足够信息去完成该责任的类。 拟人化的抽象思维 我知道什么?我能做什么?这件事该由谁负责? 责任分配原则(2) ——老板(Boss)原则 聚合/组合结构的消息传递 当出现以下情况时,发给A的消息先通过B处理和中转: B聚合A(Aggregation) B组合A( Composition ) 责任分配原则(2) ——老板(Boss)原则 责任分配原则(3) ——可视(Visibility)原则 两个对象之间有消息传递,则相应类必有关联 不要与陌生人说话 类图(修订4) 用例:结账:基本路径 1. 会员请求结账 2. 系统检查账户是否处于打开状态 3. 系统检查库存是否满足 4. 系统检查会员提交的信息是否充分 5. 系统合计订单总价(订单总价=所有订单项价钱 合计+税金+运费) 6. 系统显示收费明细 7. 会员确认 8. 系统通知供应商发货,减少相应库存数量 责任分配给谁? 会员?账户? 应用:专家+老板原则 类和代码变化 会员.检查账户状态() { … 账户.检查状态() … } 责任分配给谁? ? 应用专家原则 “合计总价”操作分配给哪个类? 目的:统计所有订单项的总价钱。 所需信息:每一个订单项的价钱及其总和。 考虑:谁知道这些? 答案:订单 责任分配给谁? 应用专家原则 “计算订单项价钱”操作分配给哪个类?(零件?订单项?订单?) 统计某个订单项的价钱需要用到的信息: 订单项.购买数量×零件.价格 考虑:谁知道以上的所有信息?零件?订单项? 答案:订单项 零件不知道订单项, 订单项知道零件 订单项找零件取价格 UML动态模型 顺序图 最常用。以时间为中心,描述对象间的交互,焦点是消息的时间顺序。 协作图 焦点:收发消息的对象结构组织。利用工具可以由顺序图生成。两者合称“交互图”。 状态图 对一个类的生命循环建模,对复杂的动态行为有用. 活动图 活动到活动之间的控制流 开发流程——动态建模 交互 你想要啊?你要是想要的话你就说嘛,你不说我怎么知道你想要呢,虽然你很有诚意地看着我,可是你还是要跟我说你想要的。你真的想要吗?那你就拿去吧!你不是真的想要吧?难道你真的想要吗?…… 交互模式 用例图-类图-顺序图 顺序图 顺序图和类图的映射 顺序图和类图的映射 CRC(类-责任-协作) 顺序图和类图的映射 说明订单有以下操作 订单.结账() 订单.合计总价钱() 订单.付款() 订单.检验信用卡() 消息的传入 顺序图和类图的映射 订单.结账() { … 订单项.计算价钱() 订单项.计算税金() 订单项.寻找最近的供应商() 订单项.计算运费() … (订单.)合计总价钱() } 消息的传出 建模工具允许自动映射类图 责任分配? 每天凌晨4:30,农夫Jones都要起床,到牛栏去挤奶 怎样用OO方法表达这个挤奶过程? 面向过程的奶牛挤奶 定义函数Milk() --float Milk(struct cow, float amount); 挤奶(使奶离开奶牛)的过程: 面向过程的问题 “挤奶”操作是孤立的 没有对挤奶农夫的需求 Milk()必须告诉哪头牛来挤奶 Milk()直接访问结构的内部 Milk()和结构形成耦合 面向对象的挤奶 涉及的实体 农夫,奶牛 涉及的关系 农夫是奶牛的主人 农夫挤奶牛的奶? 但这样行得通吗? 牛奶在奶牛那里,不在农夫那里! Farmer::Milk不得不访问Cow的内部行为 Farmer::Milk要调用Cow的哪个操作? 另一种责任分配方法 另一种方法-把Milk()放在Cow中 为了挤奶,Farmer调用Cow::Milk()操作 所有的“结构”信息(数据)隐藏在Cow中 在OO模型中,Farmer不是直接从cow中取奶,而是请求Cow自己挤奶 Struct cow { char name[30]; float currentMilkVolume; const float maxMilkVolume=3.0; }; 考虑… 谁知道奶牛有多少奶? 奶牛 谁知道在请求挤奶时是否有奶可挤? 奶牛 如果农夫请求挤3加仑但奶牛只有2加仑可以提供。谁来决定应该提供2,1还是0加仑? 奶牛 协作面向对象的掷色子 一个人掷两颗色子,点数为7则胜,否则负。针对此过程画出协作图。 “游戏开始,玩家滚出两粒色子…” 怎样用OO方法表达这个掷色子过程? 先看看有哪些类 分析类的协作 加上了方法之后的类图 总的责任分配原则 低耦合,高内聚 耦合 描述设计的组成部分之间的相互依赖 低耦合 类间要保持低耦合度 目的:复用 内聚 描述模块内各元素的紧密结合程度 高内聚 类内各
文档评论(0)