您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > Python > Python-教程-chapter12
面向对象设计222设计中的SoC设计比较复杂时–任务被分隔开–只考虑一个问题,这个问题具有一定的独立性用面向对象的思想设计软件–以数据为中心333设计的本质是用黑箱及其接口描述系统–每个部件通过其接口提供一些服务相对来说,其他部件是这些服务的用户(客户)–客户只需了解服务的接口,而实现细节对客户无关紧要–服务组件只管提供服务的实现,不管客户如何应用设计中的SoC444自顶向下设计与OOD自顶向下设计–函数是黑箱–客户只要知道函数接口即能使用之–函数实现细节被封装在函数定义中OOD:–对象是黑箱–对象的能力由类定义–类对外提供的接口即方法–方法的实现对外部客户是不重要的555OOD设计指南OOD:对给定问题找出并定义一组有用的类的过程–确定有用的对象考虑问题描述中的名词(事物)这些事物有什么行为例如:图中Point666OOD设计指南OOD:对给定问题找出并定义一组有用的类的过程–确定有用的对象–确定实例变量对象信息如:点的x,y坐标777OOD设计指南OOD:对给定问题找出并定义一组有用的类的过程–确定有用的对象–确定实例变量–确定接口考虑问题描述中的动词(对象行为)对对象数据的所有操作要在提供的方法中完成点:显示、移动、读坐标、写坐标等888OOD设计指南OOD:对给定问题找出并定义一组有用的类的过程–确定有用的对象–确定实例变量–确定接口–复杂方法的自顶向下逐步求精999OOD设计指南OOD:对给定问题找出并定义一组有用的类的过程–确定有用的对象–确定实例变量–确定接口–复杂方法的自顶向下逐步求精–反复设计可能会不断增加新类或方法不能期待以线性、系统的方式设计程序101010OOD设计指南OOD:对给定问题找出并定义一组有用的类的过程–确定有用的对象–确定实例变量–确定接口–复杂方法的自顶向下逐步求精–反复设计–尝试其他途径会大量经历“尝试-失败”的过程111111OOD设计指南OOD:对给定问题找出并定义一组有用的类的过程–确定有用的对象–确定实例变量–确定接口–复杂方法的自顶向下逐步求精–反复设计–尝试其他途径–力求简单编程实例:壁球回顾–模拟两位球员的壁球比赛,记录比赛统计结果需求变化–还需要统计shutout的次数(一方7分,一方0分)12编程实例:壁球对象:–一局比赛:输入两个球员的技术水平,提供play()RBallGame–得分统计:统计比赛结果,提供update(),printReport()SimStats13编程实例:壁球对象:–一局比赛:RBallGame–得分统计:SimStatus主程序核心代码:stats=SimStats()foriinrange(n):theGame=RBallGame(probA,probB)theGame.play()stats.update(theGame)14151515编程实例:壁球(续)设计一个类时会获得其他类的设计思路–例如:实现SimStats的update(aGame)时,需要aGame的分数,由此想到RBallGame类应提供getScores方法–又如:实现RBallGame时,发现技术是属于球员而非比赛的,因此应设计Player类各类间的关系可用图来表示编程实例:壁球(续)完整程序:objrball.py16编程实例:DicePoker游戏规则:–玩家开始时有$100–每轮花$10进行游戏–先投掷一手5个骰子–然后有两次机会重掷部分或全部骰子–最后根据右表结帐17两对$5三同$8一对加三同$12四同$15顺子(1-5或2-6)$20五同$30编程实例:DicePoker图形界面要求–显示余额–玩家破产时自动终止–玩家也可选择退出–提示程序状态及用户如何响应的信息18编程实例:DicePoker(续)模型-视图(model-view)设计方法–将复杂程序分解为模型和用户界面–模型是程序的核心(程序的逻辑)视图是模型状态的展现–如:收音机,投资收益19编程实例:DicePoker(续)模型-视图(model-view)设计方法–分开的好处:对同一模型,容易改变视图先考虑问题如何解决,然后再考虑如何呈现给用户20编程实例:DicePoker(续)模型-视图(model-view)设计方法–本例中:游戏模型:PokerApp类游戏界面:TextInterface或GraphicsInterface类注:文字界面简单,适合调试;图形界面复杂,交互性好21编程实例:DicePoker(续)实现模型–低层对象:类Dice构造器:初始化Dice对象集合体rollAll:对5个骰子赋随机值roll:对部分骰子赋随机值,其他不变values:返回骰子当前值score:返回骰子的得分(金额)–高层对象:PokerApp22编程实例:DicePoker(续)实现界面–文本界面:测试用–GUI界面23OO概念:封装将数据以及相关操作打包在一起的过程.封装的结果就是对象概念.世界是相互作用的对象构成的.封装使”定义”与”使用”的SoC成为可能.封装使得代码重用成为可能(e.g.button)要会使用类库24OO概念:多态性给对象发了消息,具体做什么取决于该对象的类型.–例如:obj.draw(win)对不同图形对象obj将画出不同的图形.25OO概念:继承可以从现有的类出发,定义新类–超类与子类子类继承超类的变量和方法,并且另有自己的变量和方法好处:代码重用26作业EX12.532828End
本文标题:Python-教程-chapter12
链接地址:https://www.777doc.com/doc-3942945 .html