- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
钱能第13章 面向对象程序设计
打 蜡 电影《功夫少年》中Daniel和Miyagi先生达成一项协议,Miyagi先生交Daniel功夫,而Daniel必须无条件地完成Miyagi先生布置的所有任务。Daniel的第一个任务是给汽车打蜡,先上蜡,再抛光。第二个任务是给地板打蜡,也是先上蜡,再抛光。 Miyagi又让Daniel粉刷栅栏。最后一个任务是粉刷房屋,每面墙都要刷。Daniel很有礼貌,完成了每项任务。但几天以后他就急了,并询问什么时候才能开始学功夫。结果是,给车打蜡、给地板打蜡、粉刷栅栏和墙壁就是功夫中的步法训练。 你现在感受可能正像Daniel当时的感觉那样。整数、操作符、指针、函数、结构,……什么时候才能学些有用的东西呀?就快了。你已经学习了编写一个面向对象程序所需要的所有工具。你的耐心就要得到回报了! 第13章 面向对象程序设计 13.1 抽象 13.2 分类 13.3 设计和效率 13.4 讨论Josephus问题 13.5 结构化方法 13.6 结构化方法的实现 13.7 面向对象方法 13.8 面向对象方法的实现 13.9 程序维护 13.1 抽象 面向对象程序设计基于两个原则: 抽象和分类。 抽象是具体事物的描述的一个概括。 13.2 分类 层层分类,使概念逐渐细化,即具体化。相反,归类的结果,便是逐步抽象的过程。例如: 13.3 设计和效率 结构化的程序规模比较小,但是整体过程比较复杂,执行的效率在大数情况下是比较低的。 面向对象的程序从绝对的语句行数上,比结构化的程序可能要多,但它的程序结构更易理解,编译运行的效率即产生的机器代码规模和运行时间却更小和更快。 相对来讲,OO的方法比SD的方法能产生更有效的程序,而且OO的程序,其可读性、可维护性都比结构化程序好。 效 率 程序运行的效率是指占用尽可能少的资源而运行速度相对较快。这里的资源主要是指存储空间。 效率不能只看其运行速度的快慢,也不能只看其占据的存储空间,要综合地比较时间和空间才能客观地评价程序运行的效率。 13.4 讨论Josephus问题 Josephus问题解答 建立小孩结构类型 初始化小孩数,开始位置,数小孩个数 分配小孩结构数组 for 初始化结构数组(构成环链) 挂接下一个数组元素 小孩编号 输出编号 endfor 续 转到开始位置 while(小孩数多于一个) 数小孩个数(一个循环) 出列小孩 将该小孩从环链中删除 endwhile 输出获胜者 返还结构数组空间 ★ 结构化程序设计方法按功能分割问题, 面向对象程序设计按对象分割问题。 13.5 结构化方法 将Josephus问题进行功能分解,也即对下面各项实现一个功能子块: (1)初始化小孩数,开始位置,数小孩数; (2)初始化环链表(采用链表数据结构求解); (3)数小孩; (4)处理未获胜的小孩。分解之后,主程序描述变得更精简。 Josephus问题解答 // Josephus问题解答 建立结构 初始化小孩数,开始位置,数小孩个数 初始化环链表(采用链表结构来解) 转到开始位置(一个循环) 处理未获胜的小孩 输出获胜者 返还结构数组空间 初始化 其中,初始化小孩数,开始位置,数小孩个数描述为: 键入小孩数、开始位置、数小孩个数 小孩数校验 开始位置校验 数小孩个数校验 初始化环链表 初始化环链表描述为: 分配结构数组 for 初始化结构数组(构成环链) 挂接下一个数组元素 小孩编号赋值 输出小孩编号 endfor 返回环链表 处理未获胜的小孩 处理未获胜的小孩描述为: while(小孩数多于一个) 数小孩(一个循环) 出列小孩 将小孩从环链中删除 endwhile 数小孩 数小孩描述为: for(从1到数小孩间隔数) 开始位置挪到下一个小孩 endfor Josephus问题的结构化分析方法,是将该问题按功能分解,然后按必要的顺序实现之。功能的划分并不严格,可按复杂程度分,对有些简单的功能不必划分出去,如输出小孩编号、小孩脱离链表等。 13.6 结构化方法的实现 P296 Josephus问题解法三 jose3.cpp 13.7 面向对象方法 在面向对象的分析和设计中,我们执行下面的步骤: (1)找出类; (2)描述类和类之间的联系; (3)用类来定义程序结构。 Josephus问题的名词表 Josephus问题 小孩 链表 开始位置 小孩数 每数若干个小孩的间隔 去掉一个小孩 描述胜利者 …… 其中,“开始位置”,“去掉一个小孩”
原创力文档


文档评论(0)