面向对象设计_第1页
面向对象设计_第2页
面向对象设计_第3页
面向对象设计_第4页
面向对象设计_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、面向对象设计122设计中的SoC设计比较复杂时任务被分隔开只考虑一个问题,这个问题具有一定的独立性用面向对象的思想设计软件 以数据为中心2333设计的本质是用黑箱及其接口描述系统每个部件通过其接口提供一些服务相对来说,其他部件是这些服务的用户(客户)客户只需了解服务的接口, 而实现细节对客户无关紧要服务组件只管提供服务的实现, 不管客户如何应用设计中的SoC344自顶向下设计与OOD自顶向下设计函数是黑箱客户只要知道函数接口即能使用之函数实现细节被封装在函数定义中OOD:对象是黑箱对象的能力由类定义类对外提供的接口即方法方法的实现对外部客户是不重要的4555OOD设计指南OOD: 对给定问题找

2、出并定义一组有用的类的过程确定有用的对象考虑问题描述中的名词(事物)这些事物有什么行为例如:图中Point5666OOD设计指南OOD: 对给定问题找出并定义一组有用的类的过程确定有用的对象确定实例变量对象信息如:点的x,y坐标6777OOD设计指南OOD: 对给定问题找出并定义一组有用的类的过程确定有用的对象确定实例变量确定接口考虑问题描述中的动词(对象行为)对对象数据的所有操作要在提供的方法中完成点:显示、移动、读坐标、写坐标等7888OOD设计指南OOD: 对给定问题找出并定义一组有用的类的过程确定有用的对象确定实例变量确定接口复杂方法的自顶向下逐步求精8999OOD设计指南OOD: 对

3、给定问题找出并定义一组有用的类的过程确定有用的对象确定实例变量确定接口复杂方法的自顶向下逐步求精反复设计可能会不断增加新类或方法不能期待以线性、系统的方式设计程序9101010OOD设计指南OOD: 对给定问题找出并定义一组有用的类的过程确定有用的对象确定实例变量确定接口复杂方法的自顶向下逐步求精反复设计尝试其他途径会大量经历“尝试-失败”的过程10111111OOD设计指南OOD: 对给定问题找出并定义一组有用的类的过程确定有用的对象确定实例变量确定接口复杂方法的自顶向下逐步求精反复设计尝试其他途径力求简单11编程实例: 壁球回顾模拟两位球员的壁球比赛,记录比赛统计结果需求变化还需要统计sh

4、utout的次数(一方7分,一方0分)1212编程实例: 壁球对象:一局比赛: 输入两个球员的技术水平, 提供play()RBallGame得分统计: 统计比赛结果, 提供update(), printReport()SimStats13编程实例: 壁球对象:一局比赛: RBallGame得分统计: SimStatus主程序核心代码:stats = SimStats()for i in range(n): theGame = RBallGame(probA,probB) theGame.play() stats.update(theGame)1414151515编程实例: 壁球(续)设计一个类

5、时会获得其他类的设计思路例如:实现SimStats的update(aGame)时,需要aGame的分数, 由此想到RBallGame类应提供getScores方法又如:实现RBallGame时, 发现技术是属于球员而非比赛的, 因此应设计Player类各类间的关系可用图来表示15编程实例: 壁球(续)完整程序:objrball.py1616编程实例:Dice Poker游戏规则:玩家开始时有$100每轮花$10进行游戏先投掷一手5个骰子然后有两次机会重掷部分或全部骰子最后根据右表结帐17两对$5三同$8一对加三同$12四同$15顺子(1-5或2-6)$20五同$3017编程实例:Dice Po

6、ker图形界面要求显示余额玩家破产时自动终止玩家也可选择退出提示程序状态及用户如何响应的信息1818编程实例: Dice Poker(续)模型-视图(model-view)设计方法将复杂程序分解为模型和用户界面模型是程序的核心(程序的逻辑)视图是模型状态的展现如:收音机,投资收益1919编程实例: Dice Poker(续)模型-视图(model-view)设计方法分开的好处: 对同一模型,容易改变视图先考虑问题如何解决,然后再考虑如何呈现给用户2020编程实例: Dice Poker(续)模型-视图(model-view)设计方法本例中:游戏模型: PokerApp类游戏界面: TextIn

7、terface或GraphicsInterface类注:文字界面简单,适合调试; 图形界面复杂,交互性好2121编程实例:Dice Poker(续)实现模型低层对象:类Dice 构造器: 初始化Dice对象集合体rollAll: 对5个骰子赋随机值roll: 对部分骰子赋随机值,其他不变values: 返回骰子当前值score: 返回骰子的得分(金额)高层对象:PokerApp2222编程实例:Dice Poker(续)实现界面文本界面:测试用GUI界面2323OO概念:封装将数据以及相关操作打包在一起的过程.封装的结果就是对象概念.世界是相互作用的对象构成的.封装使”定义”与”使用”的SoC成为可能.封装使得代码重用成为可能(e.g. button)要会使用类库2424OO概念: 多态性给对象发了消息, 具体做什么取决于该对象的类型.例如:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论