- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
面向对象思想和编程.ppt
编程案例:模拟炮弹飞行(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函数界面太复杂. * 编程案例:模拟炮弹飞行(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()) 所有复杂性都隐藏在类中了 * 编程案例:模拟炮弹飞行(6) 三个版本体现的思想变迁 * 类与模块化 复杂程序的模块化设计 功能分解:利用子程序(如函数)概念,以过程为中心设计功能模块 数据分解:利用类的概念,以数据为中心设计数据模块 功能模块不太适合复杂数据的处理 类模块独立性更高,可重用性更好 类定义可以提供给任何程序使用 很多OO语言都提供类库 * 例:学生信息处理系统 功能分解 课程注册模块,修改学生信息模块,成绩登录模块等 每个模块(函数)都需要了解”学生”数据的细节 数据分解 创建”学生”类S,隐藏数据和操作实现细节,使用者无需了解内部细节就能执行操作 其他数据模块包括”课程”类,”教师”类等 * 如何表示任意复杂的数据 数据的复杂性表现在 数量大:用集合体数据类型来表示 有内部深层结构:用类来表示 两种复杂性混合:用对象的集合来刻画 people = [p1, p2] for p in people: p.whatName() p.howOld(2013) * * * * 超类与子类* 子类 继承 覆写 多态 * * * 面向对象设计* OOD:对给定问题找出并定义一组有用的类的过程. 基于词性分析的一种方法 问题描述 描述中的名词(事物) 问题描述中的动词(对象行为) * * End * * * * * * * * Lu Chaojun, SJTU Lu Chaojun, SJTU 面向对象思想和编程 * * * 回顾 程序包括 数据 数据类型,数据结构 处理过程 算法 两种程序设计思想 面向过程:以操作为中心 面向对象:以数据为中心 * * * 数据与操作:面向过程观点 程序就是对数据进行一系列的操作 先表示数据:常量,变量 再来处理数据 x = 1 y = 2 z = x + y print z 特点:数据与操作分离 数据是被动的,操作是主动的 * * 以过程为中心 准备好数据之后,主要是进行数据处理过程的设计,即算法设计. 这种设计方法中,数据通常对整个处理过程都是公开的,不能隐藏数据. x = 1 y = 2 z = x + y w = x – y # 和上一行处理同样的数据x,y z = z * w print z * * 复杂处理过程的设计 模块化 def op1(a,b): return a * a - b * b ? def op2(a,b): return a ** b + b ** a ? x = 1 y = 2 z = 3 result1 = op1(x,y) result2 = op2(x,z) print result1 + result2 函数可以看作是更高 抽象级的操作,与普通 操作似乎并无本质差别. x = 1 y = 2 res = x + y print res 但函数有数据隐藏功能 * * 函数与数据隐藏 函数是功能黑箱 使用者需要的只是函数的功能,并不需要知晓它内部是如何实现功能的 函数内部处理的数据不对函数外部开放 一个函数不能直接访问另一个函数内部的数据 * * 小结:面向过程设计 数据与操作分离,以操作过程为中心 先表示数据 主要精力放在设计数据操作及其流程控制 对复杂程序采用自顶向下设计和模块化设计 将使用低级别操作的复杂过程设计成使用高级别操作的简单过程 不适合的应用:如GUI
本人在医药行业摸爬滚打10年,做过实验室QC,仪器公司售后技术支持工程师,擅长解答实验室仪器问题,现为一家制药企业仪器管理。
文档评论(0)