python程序设计课程课件.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《python程序设计课程课件.pptx》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- python 程序设计 课程 课件
- 资源描述:
-
1、面向对象思想和编程面向对象思想和编程2 2 2回顾回顾 程序包括程序包括 数据数据数据类型数据类型,数据结构数据结构 处理过程处理过程算法算法 两种程序设计思想两种程序设计思想 面向过程面向过程:以操作为中心以操作为中心 面向对象面向对象:以数据为中心以数据为中心3 3 3数据与操作数据与操作:面向过程观点面向过程观点 程序就是对数据进行一系列的操作程序就是对数据进行一系列的操作 先表示数据先表示数据:常量常量,变量变量 再来处理数据再来处理数据x = 1y = 2z = x + yprint z 特点特点:数据与操作分离数据与操作分离 数据是被动的数据是被动的,操作是主动的操作是主动的4 4
2、以过程为中心以过程为中心 准备好数据之后准备好数据之后,主要是进行数据处理过主要是进行数据处理过程的设计程的设计,即算法设计即算法设计. 这种设计方法中这种设计方法中,数据通常对整个处理过数据通常对整个处理过程都是公开的程都是公开的,不能隐藏数据不能隐藏数据.x = 1y = 2z = x + yw = x y # 和上一行处理同样的数据和上一行处理同样的数据x,yz = z * w print z5 5复杂处理过程的设计复杂处理过程的设计 模块化模块化def op1(a,b): return a * a - b * b def op2(a,b): return a * b + b * a x
3、 = 1y = 2z = 3result1 = op1(x,y)result2 = op2(x,z)print result1 + result2 函数函数可以看作是更高可以看作是更高抽象级的操作抽象级的操作,与普通与普通操作似乎并无本质差别操作似乎并无本质差别.x = 1y = 2res = x + yprint res但函数有数据隐藏功能但函数有数据隐藏功能6 6函数与数据隐藏函数与数据隐藏 函数是功能黑箱函数是功能黑箱 使用者需要的只是函数的功能使用者需要的只是函数的功能,并不需要知并不需要知晓它内部是如何实现功能的晓它内部是如何实现功能的 函数内部处理的数据不对函数外部开放函数内部处理
4、的数据不对函数外部开放一个函数不能直接访问另一个函数内部的数据一个函数不能直接访问另一个函数内部的数据7 7小结小结:面向过程设计面向过程设计 数据与操作分离数据与操作分离,以操作过程为中心以操作过程为中心 先表示数据先表示数据 主要精力放在设计数据操作及其流程控制主要精力放在设计数据操作及其流程控制 对复杂程序采用自顶向下设计和模块化设计对复杂程序采用自顶向下设计和模块化设计将使用低级别操作的复杂过程设计成使用高级将使用低级别操作的复杂过程设计成使用高级别操作的简单过程别操作的简单过程 不适合的应用不适合的应用:如如GUI程序程序 没有明确的执行流程没有明确的执行流程,由不可预知的事件驱由不
5、可预知的事件驱动处理过程动处理过程8 8数据与操作数据与操作:面向对象观点面向对象观点 数据与操作不可分离数据与操作不可分离 数据类型概念已经提示我们数据类型概念已经提示我们:特定数据值和特定数据值和特定操作是不可分割的两件事情特定操作是不可分割的两件事情Q:请问请问x+y是什么意思是什么意思?A:+对不同类型的对不同类型的x,y值有不同意义值有不同意义. 既然如此既然如此,何不将特定数据值何不将特定数据值与特定操作捆绑在一起与特定操作捆绑在一起,形成一形成一种新型种新型数据数据? 由此产生了对象概念由此产生了对象概念9 9对象对象 对象对象(Object):集数据与操作于一身集数据与操作于一
6、身. 对象拥有特定数据对象拥有特定数据 对象能对其数据进行特定操作对象能对其数据进行特定操作 计算计算:向对象发操作请求消息向对象发操作请求消息. 对象是主动的对象是主动的,自己掌控对其数据的操作自己掌控对其数据的操作 对象将自己能执行的操作对外公开对象将自己能执行的操作对外公开 面向对象面向对象(Object-Oriented):软件系统由各软件系统由各种对象组成种对象组成,对象之间通过消息进行交互对象之间通过消息进行交互.1010对象例子对象例子 人人 数据数据:姓名姓名,出生日期出生日期,身高身高,体重体重,. 操作操作:计算年龄计算年龄,判断体重是否标准判断体重是否标准,. 电视机电视
7、机 数据数据:型号型号,厂商厂商,尺寸尺寸,频道数频道数,. 操作操作:开机开机,关机关机,调频道调频道,调音量调音量,. 室内环境室内环境 数据数据:温度温度,湿度湿度,容积容积,. 操作操作:调节温度调节温度,调节湿度调节湿度,换算容积换算容积单位单位1111面向过程面向过程vs面向对象编程面向对象编程 假设一个问题涉及数据假设一个问题涉及数据X和和Y,对对X要进行要进行的操作为的操作为f(),g(),对对Y的操作为的操作为h() 面向过程设计和面向对象得到的程序分别形面向过程设计和面向对象得到的程序分别形如如X = .Y = .f(X)g(X)h(Y)Xf()g()Yh()请求X执行f(
8、)请求X执行g()请求Y执行h()121212复杂数据的表示复杂数据的表示 简单数据可以用现成的数据类型表示简单数据可以用现成的数据类型表示 每个数据类型都包括每个数据类型都包括 定义一个值的集合定义一个值的集合:如如int 定义一些对值的运算定义一些对值的运算(操作操作):如如+,-,*,/ 复杂数据如何表示复杂数据如何表示? 拆成简单数据拆成简单数据例如例如学生学生拆成拆成name,age,addr等简单数据等简单数据 定义新类型定义新类型例如定义类型例如定义类型S,其值是由其值是由name,age,addr等构成等构成的整体的整体131313自定义类型的值和操作自定义类型的值和操作 分离
9、分离 融为一体融为一体141414从类型到类从类型到类 类是类型概念的发展类是类型概念的发展 对象是广义的对象是广义的数据值数据值 对象所属的数据类型就是对象所属的数据类型就是类类 用于描述复杂数据的静态和动态行为用于描述复杂数据的静态和动态行为 类类(class):描述相似对象的共性描述相似对象的共性.包括包括 数据数据 操作操作:方法方法(method) 对象是类的对象是类的实例实例151515类与抽象类与抽象 类是对现实事物的抽象类是对现实事物的抽象 数据抽象数据抽象例如例如:从具体学生抽象出姓名从具体学生抽象出姓名,年龄年龄,地址等数据地址等数据 行为抽象行为抽象例如例如:从学生日常行
10、为抽象出选课从学生日常行为抽象出选课,加入社团等操加入社团等操作作 于是产生了类于是产生了类Student的定义的定义 抽象可以在多个层次上进行抽象可以在多个层次上进行 例如例如:学生学生-人人-动物动物-生物生物161616封装封装 封装封装:数据和操作结合成一个程序单元数据和操作结合成一个程序单元,对对外部隐藏内部实现细节外部隐藏内部实现细节. 不允许用户直接操作类中被隐藏的信息不允许用户直接操作类中被隐藏的信息 用户也无需了解隐藏的信息就能使用该类用户也无需了解隐藏的信息就能使用该类 类对外公开方法名称和调用格式类对外公开方法名称和调用格式,即界面即界面. 外界向对象发消息外界向对象发消
11、息(方法名及参数方法名及参数) 对象响应消息对象响应消息,执行相应方法执行相应方法 外界只能按对象允许的方式来处理对象数据外界只能按对象允许的方式来处理对象数据171717封装的好处封装的好处 安全安全:对象自己的方法处理自己的数据对象自己的方法处理自己的数据 易用易用:使用者无需了解内部实现细节使用者无需了解内部实现细节 易维护易维护:实现者修改内部实现不会影响使实现者修改内部实现不会影响使用者用者 标准化标准化:同类甚至不同类的对象对使用者同类甚至不同类的对象对使用者都呈现同样的操作界面都呈现同样的操作界面类的定义类的定义 类定义类定义class : 方法定义同函数定义方法定义同函数定义d
12、ef (): .方法是依附于类的函数方法是依附于类的函数,普通函数则是独立的普通函数则是独立的.方法的第一个参数是专用的方法的第一个参数是专用的,习惯用名字习惯用名字self.具体含义见后具体含义见后.只能通过向对象发消息来调用方法只能通过向对象发消息来调用方法.18实例变量实例变量(1) 回忆回忆:对象是数据和操作的结合对象是数据和操作的结合. 类定义中类定义中,方法对应于操作方法对应于操作.数据呢数据呢? 对象的数据以实例变量形式定义对象的数据以实例变量形式定义. 实例变量实例变量self. 在方法中定义在方法中定义self. = 主要出现在主要出现在_init_()方法中方法中19实例变
13、量实例变量(2) 每个类实例每个类实例(对象对象)具有自己的实例变量副具有自己的实例变量副本本,用来存储该对象自己的数据用来存储该对象自己的数据. 对实例变量的访问对实例变量的访问:. 实例变量与函数局部变量不同实例变量与函数局部变量不同! 同一个类的各个方法都可以访问实例变量同一个类的各个方法都可以访问实例变量. 类的方法中也可以定义局部变量类的方法中也可以定义局部变量,不能被其不能被其他方法访问他方法访问.20212121例例:类定义类定义 类类Person(可单独保存为模块可单独保存为模块person.py)class Person: def _init_(self,n,y): self
14、.name = n self.year = y def whatName(self): print My name is,self.name def howOld(self,y): age = y self.year if age 0: print My age in,y,is,age else: print I was born in,self.year 实例创建实例创建(1) 类与实例类与实例:抽象与具体抽象与具体. 人人是类是类,张三张三是人的实例是人的实例 一个类可以创建任意多个实例一个类可以创建任意多个实例各实例具有相同的行为各实例具有相同的行为:由方法决定由方法决定但具有不同的数据
15、但具有不同的数据:由实例变量决定由实例变量决定 实例创建实例创建 = () 这里这里相当于一个函数相当于一个函数,称为构造器称为构造器,用用来构造实例来构造实例.22实例创建实例创建(2) 创建时对实例进行初始化创建时对实例进行初始化 用构造器创建实例时用构造器创建实例时,系统会自动调用系统会自动调用_init_方法方法通常在此方法中执行一些初始化操作通常在此方法中执行一些初始化操作_init_所需的参数由构造器提供所需的参数由构造器提供. 例如例如: from person import Person p1 = Person(Lucy,2005) 23例例:实例创建实例创建(1) 创建一个创
16、建一个Person实例实例 from person import Person p1 = Person(Lucy,2005) 24例例:实例创建实例创建(2) 创建两个创建两个Person实例实例 from person import Person p1 = Person(Lucy,2005) p2 = Person(Tom,1990) 25方法调用方法调用 类似函数调用类似函数调用,但需指明实例但需指明实例(对象对象).() 就是与形参就是与形参self对应的实参对应的实参. 例如例如 p1.whatName()My name is Lucy p2.whatName()My name is
17、Tom p2.howOld(2013)My age in 2013 is 23 26方法调用图示方法调用图示 p1.whatName() p2.howOld(2013)27编程案例编程案例:模拟炮弹飞行模拟炮弹飞行(1) 程序规格程序规格 输入输入:炮弹的发射角度炮弹的发射角度,初速和高度初速和高度 输出输出:炮弹的射程炮弹的射程 解决方法解决方法:模拟炮弹飞行过程模拟炮弹飞行过程,即计算每一即计算每一时刻炮弹的位置时刻炮弹的位置. 连续运动的离散化连续运动的离散化时间时间:t, t+ t, t+2 t, t+3 t, .轨迹轨迹: (xt,yt), (xt+ t,yt+ t), .28编程案
18、例编程案例:模拟炮弹飞行模拟炮弹飞行(2) 算法算法:输入角度输入角度angle(度度),初速初速v(米米/秒秒),高度高度h0(米米),间隔间隔t(秒秒)将将angle换算成弧度单位的换算成弧度单位的thetaxv = v * cos(theta)yv = v * sin(theta)初始位置初始位置(xpos,ypos) = (0,h0)当炮弹还未落地当炮弹还未落地(即即ypos = 0.0): 更新炮弹位置更新炮弹位置(xpos,ypos) 更新更新yv 输出输出xpos 29编程案例编程案例:模拟炮弹飞行模拟炮弹飞行(3) 核心代码核心代码:位置更新位置更新 水平方向水平方向xpos
19、= xpos + xv * t 垂直方向垂直方向yv1 = yv - 9.8 * typos = ypos + (yv + yv1) / 2.0 * t30from math import pi, sin, cosdef main(): angle = input(Enter the launch angle: ) vel = input(Enter the initial velocity: ) h0 = input(Enter the initial height : ) time = input(Enter the time interval : ) radians = (angle *
20、 pi)/180.0 xpos = 0 ypos = h0 xvel = vel * cos(radians) yvel = vel * sin(radians) while ypos = 0: xpos = xpos + time * xvel yvel1 = yvel - 9.8 * time ypos = ypos + time * (yvel + yvel1)/2.0 yvel = yvel1 print nDistance traveled: %0.1f meters. % (xpos)main()这个版本是流水帐式的,没有章法结构.程序不长,倒有10个变量,为理解程序需要跟踪这10
21、个数据的变化.编程案例编程案例:模拟炮弹飞行模拟炮弹飞行(4) 模块化版本模块化版本cball2.py 主程序主程序(主函数主函数)非常简洁非常简洁,易理解易理解.def main():angle, v, h0, t = getInputs()xv, yv = getXY(v,angle)xpos = 0ypos = h0while ypos = 0:xpos,ypos,yv = update(t,xpos,ypos,xv,yv)print 射程射程: %0.1f 米米. % (xpos) 将辅助性变量将辅助性变量(theta和和yv1)隐藏在辅助函数中隐藏在辅助函数中. 仍然不够好仍然不够好
22、:update函数界面太复杂函数界面太复杂.32编程案例编程案例:模拟炮弹飞行模拟炮弹飞行(5) 面向对象版本面向对象版本cball3.py炮弹是现实实体炮弹是现实实体, ,用用xpos,ypos,xv和和yv四个分离的数四个分离的数据来描述它是据来描述它是“只见树木不见森林只见树木不见森林”. . OOP:将炮弹的信息和行为都封装在类中将炮弹的信息和行为都封装在类中,并创建一并创建一个炮弹对象个炮弹对象,程序会更加简洁易理解程序会更加简洁易理解.def main(): angle, vel, h0, time = getInputs() cball = Projectile(angle, v
23、el, h0) while cball.getY() = 0: cball.update(time) print 射程射程: %0.1f 米米. % (cball.getX()所有复杂性都隐藏在类中了所有复杂性都隐藏在类中了33from math import pi, sin, cosclass Projectile:def _init_(self, angle, velocity, height): self.xpos = 0.0 self.ypos = height theta = pi * angle / 180.0 self.xvel = velocity * cos(theta) s
24、elf.yvel = velocity * sin(theta)def update(self, time):self.xpos = self.xpos + time * self.xvel yvel1 = self.yvel - 9.8 * time self.ypos = self.ypos + time * (self.yvel + yvel1) / 2.0 self.yvel = yvel1def getY(self): return self.yposdef getX(self): return self.xpos编程案例编程案例:模拟炮弹飞行模拟炮弹飞行(6) 三个版本体现的思想变
25、迁三个版本体现的思想变迁35类与模块化类与模块化 复杂程序的模块化设计复杂程序的模块化设计 功能分解功能分解:利用子程序利用子程序(如函数如函数)概念概念,以过程以过程为中心设计功能模块为中心设计功能模块 数据分解数据分解:利用类的概念利用类的概念,以数据为中心设计以数据为中心设计数据模块数据模块 功能模块不太适合复杂数据的处理功能模块不太适合复杂数据的处理 类模块独立性更高类模块独立性更高,可重用性更好可重用性更好 类定义可以提供给任何程序使用类定义可以提供给任何程序使用 很多很多OO语言都提供类库语言都提供类库36例例:学生信息处理系统学生信息处理系统 功能分解功能分解 课程注册模块课程注
展开阅读全文