6.1 理解面向对象程序设计
面向对象技术是一种将数据抽象和信息隐藏的技术,它使软件的开发更加简单化,符合了人们的思维习惯,同时又降低了软件的复杂性,提高了软件的生产效率,因此得到了广泛的应用。
6.1.1 什么是对象
对象(object)是面向对象技术的核心。读者可以把我们所生活的真实世界看成是由许多大小不同的对象所组成的。对象是指现实世界中的对象在计算机中的抽象表示,即仿照现实对象而建立的。
(1)对象可以是有生命的个体,比如一个人(图3-1)或一只鸟(图3-2)。
图3-1 人
图3-2 鸟
(2)对象也可以是无生命的个体,比如一辆汽车(图3-3)或一台计算机(图3-4)。
图3-3 汽车
图3-4 计算机
(3)对象还可以是一件抽象的概念,如天气的变化(图3-5)或鼠标(图3-6)所产生的事件。
图3-5 天气
图3-6 鼠标
对象是类的实例化。对象的特征分为静态特征和动态特征两种。静态特征是指对象的外观、性质、属性等。动态特征是指对象具有的功能、行为等。客观事物是错综复杂的,但人们总是从某一目的出发,运用抽象分析的能力,从众多的特征中抽取最具代表性、最能反映对象本质的若干特征加以详细研究。
人们将对象的静态特征抽象为属性,用数据来描述,在Python语言中称之为变量:将对象的动态特征抽象为行为,用一组代码来表示,完成对数据的操作,在Python语言中称之为方法(method)。一个对象由一组属性和一系列对属性进行操作的方法构成。
在计算机语言中也存在对象,可以定义为相关变量和方法的软件集。对象主要由下面两部分组成。
(1)一组包含各种类型数据的属性。
(2)允许对属性中的数据进行操作的相关方法。
在Python中,对象包括内置对象、自定义对象等多种类型,使用这些对象可大大简化Python程序的设计,并提供直观、模块化的方式进行程序开发。
6.1.2 面向对象的特征
面向对象方法(Object-Oriented Method)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO(Object-Oriented)方法。Object Oriented是建立在“对象”概念基础上的方法学。对象是由数据和允许的操作组成的封装体,与客观实体有直接对应关系,而一个对象类定义了具有相似性质的一组对象。继承性是将具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象,就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。
面向对象方法作为一种新型的独具优越性的新方法,正引起全世界越来越广泛的关注和高度的重视,它被誉为“研究高技术的好方法”,更是当前计算机界关心的重点。
所有的面向对象的编程设计语言都具有3个特性,即封装、继承和多态。
Python有完整的面向对象(Object-Oriented Programming, OOP)特性,面向对象程序设计提升了数据的抽象度和信息的隐藏、封装及模块化。
下列是面向对象程序的主要特性。
(1)封装(encapsulation)。数据仅能通过一组接口函数来存取,经过封装的数据能够确保信息的隐秘性。
(2)继承(inheritance)。通过继承的特性,派生类(derived class)继承了其基类(base class)的成员变量(data member)与类方法(class method)。派生类也叫作次类(subclass),或是子类(child class)。基类也叫作父类(parent class)。
(3)多态(polymorphism)。多态允许一个函数,有许多种不同的接口。依照调用函数时使用的参数,类知道使用哪一种接口。Python使用动态类型(dynamic typing)与后期绑定(late binding)来做到多态的功能。
6.1.3 什么是类
具有相同属性及相同行为的一组对象称为类(class)。广义地讲,具有共同性质的事物的集合称为类。在面向对象程序设计中,类是一个独立的单位,它有一个类名,其内部包括成员变量,用于描述对象的属性;还包括类的成员方法,用于描述对象的行为。
类是一个抽象的概念,要利用类的方式来解决问题,必须用类创建一个实例化的对象,然后通过对象去访问类的成员变量,去调用类的成员方法来实现程序的功能。就如同“手机”本身是一个抽象的概念,只有使用了一部具体的手机,才能感受到手机的功能。
类(class)是封装的数据以及操作这些数据的接口函数所组成的一群对象的集合。类可以说是创建对象时所用的模板(template)。
每一个类都有它自己的命名空间,所有的设置与函数定义都在此命名空间内发生。