面向对象与图形编程
面向对象与图形编程
数据与操作:传统观点 ·数据类型 -某种值的集合 -运算(操作)的集合 0 计算就是对数据进行操作 一数据与操作分离 -数据是被动的,操作是主动的 例如:string类型的值是'abc'等,对串的操 作有+,*,1en()等 Lu Chaojun,SJTU 2
Lu Chaojun, SJTU 2 数据与操作:传统观点 • 数据类型 – 某种值的集合 – 运算(操作)的集合 • 计算就是对数据进行操作 – 数据与操作分离 – 数据是被动的,操作是主动的 • 例如:string类型的值是’abc’等,对串的操 作有+, * ,len()等
数据与操作:面向对象观点 ·对象(Object):集数据与操作于一身. -对象知道一些信息 一对象能对那些信息进行处理 0 计算:向对象发出请求操作的消息 一主动的数据类型 面向对象(Object--Oriented:软件系统由各 种对象组成,对象之间通过消息进行交互 ·现代软件系统几乎都是OO设计和实现 Lu Chaojun,SJTU 3
Lu Chaojun, SJTU 3 数据与操作:面向对象观点 • 对象(Object):集数据与操作于一身. – 对象知道一些信息 – 对象能对那些信息进行处理 • 计算:向对象发出请求操作的消息. – 主动的数据类型 • 面向对象(Object-Oriented):软件系统由各 种对象组成,对象之间通过消息进行交互. • 现代软件系统几乎都是OO设计和实现. Lu Chaojun, SJTU
OO基本概念 。 类(class):描述同类对象的共性 -包含的数据 人任何类型的数据,甚至可以是对其他对象的引用. -能执行的操作(方法) · 对象(object):类的实例(instance) 同类的不同对象可有不同的数据值(实例变量),但能 执行的操作是一样的 。h 创建对象:使用类的构造器(constructor) (,,.) ·消息:请求对象执行它的方法 .(,,…) Lu Chaojun,SJTU 4
Lu Chaojun, SJTU 4 OO基本概念 • 类(class):描述同类对象的共性 – 包含的数据 ©任何类型的数据,甚至可以是对其他对象的引用. – 能执行的操作(方法) • 对象(object):类的实例(instance) – 同类的不同对象可有不同的数据值(实例变量),但能 执行的操作是一样的 • 创建对象:使用类的构造器(constructor). (,,…) • 消息:请求对象执行它的方法. .(,,…)
对象的方法 ·不同对象当然提供不同的操作 ·对象一般都提供读取它的实例变量值的 方法,统称为accessor. -例如Point>对象的getX(和getY(O,Line对象的 getP1O和getP20, ·对象一般也提供修改其实例变量的方法, 统称为nutator. -例如所有图形对象都有move(dx,dy)方法. Lu Chaojun,SJTU 5
对象的方法 • 不同对象当然提供不同的操作 • 对象一般都提供读取它的实例变量值的 方法,统称为accessor. – 例如Point对象的getX()和getY(), Line对象的 getP1()和getP2(). • 对象一般也提供修改其实例变量的方法, 统称为mutator. – 例如所有图形对象都有move(dx,dy)方法. Lu Chaojun, SJTU 5
图形编程 ·图形用户界面(GUI) o 图形编程框架 -Python的Tkinter -本书作者写的图形库:graphics.py 人放入合适文件夹 人import graphics或 from graphics import +后者可使引用库函数更方便 人开始编写图形程序 Lu Chaojun,SJTU 6
图形编程 • 图形用户界面(GUI) • 图形编程框架 – Python的Tkinter – 本书作者写的图形库:graphics.py ©放入合适文件夹 ©import graphics或 from graphics import * ª后者可使引用库函数更方便 ©开始编写图形程序 Lu Chaojun, SJTU 6
图形窗口 ·图形窗口:画图的地方 win graphics.Graphwin ( win=GraphWin() 人用from语句引入图形库时可写成这样 -创建Graph Win类的对象,并赋值给变量win. 试试:ype(GraphWin)和type(win)分别是什么 -通过给对象win发消息,让对象做事情.例如: win.close ( ·窗口是由像素组成的:默认大小200*200 ·画图:实际就是控制各像素的颜色 Lu Chaojun,SJTU 7
图形窗口 • 图形窗口:画图的地方 win = graphics.GraphWin() win = GraphWin() ©用from语句引入图形库时可写成这样 – 创建GraphWin类的对象,并赋值给变量win. ©试试: type(GraphWin)和type(win)分别是什么. – 通过给对象win发消息,让对象做事情.例如: win.close() • 窗口是由像素组成的:默认大小200*200 • 画图:实际就是控制各像素的颜色. Lu Chaojun, SJTU 7
点 ·点:图形窗口的一个像素,位置用坐标(x,y) 表示 ·坐标系统 -原点(0,0):左上角 一x轴:自左向右 一y轴:自顶向下 ·小测试:默认大小的图形窗口,右下角坐标 是? Lu Chaojun,SJTU 8
点 • 点:图形窗口的一个像素,位置用坐标(x,y) 表示. • 坐标系统 – 原点(0,0):左上角 – x轴:自左向右 – y轴:自顶向下 • 小测试:默认大小的图形窗口,右下角坐标 是? Lu Chaojun, SJTU 8
点(续) ·创建Point类的对象 Point(,) -例:p=Point(50,60) ·对Point>对象的操作 一求坐标 p.getx(),p.gety ( 一在窗口中画自己 p.draw (win) Lu Chaojun,SJTU 9
点(续) • 创建Point类的对象 Point(,) – 例: p = Point(50,60) • 对Point对象的操作 – 求坐标 p.getX(), p.getY() – 在窗口中画自己 p.draw(win) Lu Chaojun, SJTU 9
线段 ·创建Line类的对象 工ine(,) -例如 1 Line(Point (0,0),Point (100,100)) 0 对Line对象的操作 -在窗口中画自己 1.draw (win) Lu Chaojun,SJTU 10
线段 • 创建Line类的对象 Line(,) – 例如 l = Line(Point(0,0),Point(100,100)) • 对Line对象的操作 – 在窗口中画自己 l.draw(win) Lu Chaojun, SJTU 10