类的定义
回顾:对象 ■对象的构成: 一一组相关信息 ■存储在实例变量中 一处理该信息的一组方法 ■对象内的函数 对象的属性:实例变量和方法 2
2
回顾:对象 ■类决定了对象具有哪些信息和方法 一对象是类的实例 一通过类的构造器创建新对象 3
3
画圆 circ Circle(Point(50,50),40) circ: Circle center: Point radius: 40 50 X: draw() y:50 move(
Point 5050 x: y: circ: Circle40 center: radius: draw( ) move( )
回顾:对象 ■对象是一个类的实例 -类是数据类型(int,float,string)的推广 一实例/对象:是数据类型的具体化 以下通过一个实例来说明定义新类的用 处 5
5
编程实例:炮弹飞行模拟 给定发射角度、初始速度以及初始的高度,希 望计算出炮弹飞行的距离 程序规格 输入:发射角,初速度,初始高度 输出:射程 注: (1)采用微积分,可以直接导出炮弹位置的公式,但此 处我们不用微积分,而是只用一些基本常识,通过 一步一步迭代计算来解决 (2)不考虑风阻力,只考虑重力 6
6
编程实例:炮弹模拟 算法 输入模拟参数:角度,速度,高度,计算位置变化的时间间 隔 计算炮弹初始位置xpos,yPos 计算炮弹初始水平和垂直速度xvel,yvel 当炮弹还在飞行,循环: 更新一个时间间隔之后的xpos,ypos,yvel 输出xpos 7
7
编程实例:炮弹模拟(续) def main() angle input ("..(in degrees)" vel input("...(in meters/sec)") 才 ho input("...(in meters)") time input("...(in seconds)") velocity yvel=velocity*sin(theta) xpos,ypos =0.0,h0 theta ...d theta angel math.pi /180.0 xvel velocity cos(theta) xvel vel math.cos(theta) yvel vel math.sin(theta) whi1 e ypos>=0.0:#该条件允许h0=0.0 更新 print"Distance:号0.1 f meters."号(xpos) 8
8
编程实例:炮弹模拟(续) 算法核心部分:更新各值 xpos xpos xvel .time yvel new yvel -9.8 time ypos ypos time (yvelyvel new)/2 yvel yvel new 自由落体的速度计算公式选择向下方向为负) Vt=vo-9.8t y=vot-0.5gt2 10个变量,太多 可读性不够好 9
9
编程实例:炮弹模拟(续) 模块化设计:把程序分解成几个子函数 def main(): angle,vel,ho,time getInput() xpos,ypos =0,h0 xvel,yvel getxYComponents(vel, angle) while ypos >=0.0: xpos,ypos,yvel updatePos(time,xpos,ypos,xvel,yvel) print "Distance:$0.1f meters."$(xpos) 变量theta和yel newl呢? 这是自顶向下逐步求精带来的好处 10
10