- 1、本文档共39页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编程案例:模拟炮弹飞行(4) 模块化版本cball2.py 主程序(主函数)非常简洁,易理解. def main(): angle, v, h0, t = getInputs() xv, yv = getXY(v,angle) xpos = 0 ypos = h0 while ypos = 0: xpos,ypos,yv = update(t,xpos,ypos,xv,yv) print 射程: %0.1f 米. % (xpos) 将辅助性变量(theta和yv1)隐藏在辅助函数中. 仍然不够好:update函数界面太复杂. Lu Chaojun, SJTU * 编程案例:模拟炮弹飞行(5) 面向对象版本cball3.py 炮弹是现实实体,用xpos,ypos,xv和yv四个分离的数据来描述它是“只见树木不见森林”. OOP:将炮弹的信息和行为都封装在类中,并创建一个炮弹对象,程序会更加简洁易理解. def main(): angle, vel, h0, time = getInputs() cball = Projectile(angle, vel, h0) while cball.getY() = 0: cball.update(time) print 射程: %0.1f 米. % (cball.getX()) 所有复杂性都隐藏在类中了 Lu Chaojun, SJTU * 编程案例:模拟炮弹飞行(6) 三个版本体现的思想变迁 Lu Chaojun, SJTU * 类与模块化 复杂程序的模块化设计 功能分解:利用子程序(如函数)概念,以过程为中心设计功能模块 数据分解:利用类的概念,以数据为中心设计数据模块 功能模块不太适合复杂数据的处理 类模块独立性更高,可重用性更好 类定义可以提供给任何程序使用 很多OO语言都提供类库 Lu Chaojun, SJTU * 例:学生信息处理系统 功能分解 课程注册模块,修改学生信息模块,成绩登录模块等 每个模块(函数)都需要了解”学生”数据的细节 数据分解 创建”学生”类S,隐藏数据和操作实现细节,使用者无需了解内部细节就能执行操作 其他数据模块包括”课程”类,”教师”类等 Lu Chaojun, SJTU * 如何表示任意复杂的数据 数据的复杂性表现在 数量大:用集合体数据类型来表示 有内部深层结构:用类来表示 两种复杂性混合:用对象的集合来刻画 people = [p1, p2] for p in people: p.whatName() p.howOld(2013) Lu Chaojun, SJTU * Lu Chaojun, SJTU * Lu Chaojun, SJTU * * 超类与子类* 子类 继承 覆写 多态 Lu Chaojun, SJTU * Lu Chaojun, SJTU * * 面向对象设计* OOD:对给定问题找出并定义一组有用的类的过程. 基于词性分析的一种方法 问题描述 描述中的名词(事物) 问题描述中的动词(对象行为) Lu Chaojun, SJTU * Lu Chaojun, SJTU * End * * * * * * * * Lu Chaojun, SJTU Lu Chaojun, SJTU 面向对象思想和编程 Lu Chaojun, SJTU * Lu Chaojun, SJTU * * 回顾 程序包括 数据 数据类型,数据结构 处理过程 算法 两种程序设计思想 面向过程:以操作为中心 面向对象:以数据为中心 Lu Chaojun, SJTU * Lu Chaojun, SJTU * * 数据与操作:面向过程观点 程序就是对数据进行一系列的操作 先表示数据:常量,变量 再来操作数据 x = 1 y = 2 z = x + y print z 特点:数据与操作分离 数据是被动的,操作是主动的 Lu Chaojun, SJTU * Lu Chaojun, SJTU * 以过程为中心 准备好数据之后,主要是进行数据处理过程的设计,即算法设计. 这种设计方法中,数据通常对整个处理过程都是公开的,不能隐藏数据. x = 1 y = 2 z = x + y w = x – y # 和上一行处理同样的数据x,y z = z * w print z Lu Chaojun, SJTU Lu Chaojun, SJTU * Lu Chaojun, SJTU * 复杂处理过程的设计 模块化 def op1(a,b): return a * a - b * b ?
文档评论(0)