知 识 要 点
面向对象、类、对象、事件、方法
程序设计分为面向过程程序设计和面向对象程序设计。

面向过程程序设计:用户为了实现具体的编程任务,使用程序语言的语句直接设计每一个(求解)过程的程序设计方法。例如:前述方法。
面向对象程序设计(Object Oriented Programming,OOP):利用程序语言的类(系统提供,或用户定义),创建相应的对象,实现相应的程序设计。
面向对象程序设计与面向过程程序设计的区别:设计人员在进行面向对象程序设计时,不再是单纯地从代码的第一行直到最后一行进行繁琐的逐句编程,而是考虑如何利用类创建对象,再利用对象来简化程序设计,提供代码的可重用性,而不需要考虑类和对象本身的具体程序设计问题。
对象(实例):由数据及能对其实施的操作所构成的封装体
类:类描述了对象的特征(数据和操作)
面向对象程序设计:以数据为中心的程序设计方式,隐藏数据细节,更接近自然思考方式。
面向过程程序设计:以功能为中心的程序设计方式,需要数据细节。

一、OOP特性
类和对象的封装性、继承性和多态性等。从而使OOP具有易理解性、可重用性、可扩展性、隐藏性、高安全性和易管理维护等优点。
抽象(Abstraction)与封装(Encapsulation)
抽象是指对现实世界问题和实体的本质表现;问题分解成数据和数据上的操作
封装是将程序具体的实现细节进行隐藏的一种机制
抽象是抽取现实问题和实体的本质,封装是将这些本质包装起来进行内部实现
例6.1 创建一个窗口win,窗口内含一个按钮bt和一个标签lb;定义按钮的单击事件click,单击按钮之后,在标签中显示“Happy You!”,同时弹出一个信息窗口,信息窗口的内容为“Welcome…”。
#pro0601.py
import tkinter
import tkinter.messagebox
win=tkinter.Tk()
win.title('欢迎')
win.geometry('300x200+260+160')
def click():
lb.config(text='Happy You!')
tkinter.messagebox.showinfo(title='信息',message='Welcome...')
bt=tkinter.Button(win,text='单击',width=20,command=click)
bt.place(x=80,y=60)
lb=tkinter.Label(win,text='单击按钮试试...')
lb.place(x=110,y=110)
win.mainloop

思考:单击“单击”按钮之后,使按钮的标题显示为“测试结束!”,且使按钮无效。
提示:在click函数体内,添加如下语句:
bt.config(text='测试结束!')
bt.config(state='disabled')
在图6.1中,单击“单击”按钮之后,弹出的窗口如图6.2和图6.3所示。
根据例6.1的设计过程和运行结果,不难看出,利用14行语句就完成了满足要求的程序设计。这就是使用OOP的优势。
如果使用面向过程的程序设计方法,来完成该例的任务,则可能需要几百行语句。
OOP的过程:利用类创建对象,确定对象的属性,设置发生的事件,设计处理方法等。
即:类 → 对象 → 属性 → 事件 → 方法。
封装性
封装:把对象的属性、事件和方法封装起来组合在一起构成类。封装意味着类和对象应具有明确的功能,并且提供与其它类和对象的接口。
封装性:让用户忽略类和对象复杂的内部细节,使用户集中精力使用类和对象的属性、事件和方法。
封装后的类和对象的代码将处于隐藏和保护状态,从而使得程序更加安全和稳定。
在例6.1中,使用了模块 tkinter中封装的三个类 。即:
窗口类Tk()、按钮类Button()和标签类Label()等。
不难看出,封装使对象可以像一个可拆卸的部件,在程序之间调用,从而减少程序的复杂性。
同一个类的所有对象使用相同的数据结构、属性、事件和方法,但每个对象都拥有各自的数据。定义一个类就相当于在程序中加入了一个新的数据类型,并且要求编译程序将它视为程序语言的内部数据类型。
编译程序将它视为程序语言的内部数据类型。
继承性
继承性:在系统提供的基本类(即:基类)的基础上,建立用户自己的派生类(子类),子类将继承基类的所有属性、事件和方法,同时又可以继续建立自己新的派生类属性、事件和方法。
利用继承性可以避免相同内容的重复出现,且能够节省大量的时间和存储空间。通过继承可以从一个类派生出另一个新的派生类,而派生类,又可以派生出它的派生类,如此下去可以建立一个复杂的类的层状结构,给复杂程序设计带来了方便。
因此,继承性有三个主要优点:
(1)允许建立类的层状结构(树状结构)。
(2)派生类可以继承基类的属性、事件和方法。
(3)派生类可以添加自己的属性、事件和方法,且一旦建立将永久有效(持久性)。
多态性
多态性:不同类和对象中的属性、事件和方法,可以提供相同的名字,且同名的属性、事件和方法所指的内容可以不同。
在调用同名的属性、事件和方法时,既可以使对象具有不同的性质和功能,也可以使对象具有相同的性质和功能。即:不同的类和对象,可以使用同名的属性、事件和方法。
多态是创建类时一种极为有效的手段。多态可以使用户对具有相同功能的属性、事件和方法,采用统一标准进行命名。
例如:在例6.1中,按钮类Button()和标签类Label,均定义了width和height属性,分别代表按钮的宽和高、标签的宽和高。
注意:二者的长度单位在不同环境下可能会不一样。

