- 全国计算机等级考试教程:二级公共基础与C语言
- 董琴 邵洪成 陈瑾 孙久 严长虹
- 2660字
- 2021-03-31 07:36:35
1.2.3 面向对象的程序设计
1.面向对象方法的优点
(1)与人类习惯的思维方法一致
传统的程序设计方法是面向过程的,其核心方法是以算法为核心。面向对象的设计方法与传统的面向过程的方法有本质不同,这种方法的基本原理是,使用现实世界的概念抽象地思考问题,从而自然地解决问题。
(2)稳定性好
面向对象方法基于构造问题领域的对象模型,以对象为中心构造软件系统。以对象为中心构造的软件系统也是比较稳定的。而传统的软件开发方法以算法为核心,开发过程基于功能分析和功能分解。用传统方法所建立起来的软件系统的结构紧密地依赖于系统所要完成的功能,当功能需求发生变化时将引起软件结构的整体修改。事实上,用户需求变化大部分是针对功能的,因此,这样的软件系统是不稳定的。
(3)可重用性好
软件重用是指在不同的软件开发过程中重复使用相同或相似软件元素的过程。重用是提高软件生产效率的最主要的方法。
传统的软件重用技术是利用标准函数库,也就是试图用标准函数库中的函数作为“预制件”来建造新的软件系统。但是,标准函数缺乏必要的“柔性”,不能适应不同应用场合的不同需要,并不是理想的可重用的软件成分。实际的库函数往往仅提供最基本、最常用的功能,在开发一个新的软件系统时,通常多数函数是开发者自己编写的,甚至绝大多数函数都是新编的。
(4)易于开发大型软件产品
当开发大型软件产品时,组织开发人员的方法不恰当往往是出现问题的主要原因。用面向对象方法开发软件时,可以把一个大型产品看作一系列本质上相互独立的小产品来处理,这不仅降低了开发的技术难度,而且也使得对开发工作的管理变得更容易。
(5)可维护性好
对用面向对象的方法开发的软件进行维护,往往是通过从已有类派生出一些新类来实现。因此,维护后的测试和调试工作也主要围绕这些新派生出来的类进行。类是独立性很强的模块,向类的实例发消息即可运行它,观察它是否能正确地完成相应的工作,因此对类的测试通常比较容易实现。
2.面向对象方法的基本概念
(1)对象
对象可以用来表示客观世界中的任何实体,也就是说,应用领域中有意义的、与所要解决的问题有关系的任何事物都可以作为对象。
面向对象的程序设计方法中涉及的对象是系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,它由一组表示其静态特征的属性和它可执行的一组操作组成。
例如,一辆汽车是一个对象,它包含了汽车的属性(如颜色、型号、载质量等)及其操作(如启动、刹车等)。一个窗口是一个对象,它包含了窗口的属性(如大小、颜色、位置等)及其操作(如打开、关闭等)。
客观世界中的实体通常都既具有静态的属性,又具有动态的行为,因此,面向对象方法学中的对象是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。对象可以做的操作表示它的动态行为,在面向对象分析和面向对象设计中,通常把对象的操作也称为方法或服务。
属性即对象所包含的信息,它在设计对象时确定,一般只能通过执行对象的操作来改变。如对象Person的属性有姓名、年龄、性别、身高、体重等。不同对象的同一属性可以具有相同或不同的属性值。如张三的年龄为19,李四的年龄为20。张三、李四是两个不同的对象,他们共同的属性“年龄”的值不同。要注意的是,属性值应该指的是纯粹的数据值,而不能指对象。
操作描述了对象执行的功能,若通过消息传递,还可以为其他对象使用。操作的过程对外是封闭的,即用户只能看到这一操作实施后的结果。这相当于事先已经设计好的各种过程,只需要调用就可以了,用户不必去关心这一过程是如何编写的。事实上,这个过程已经封装在对象中,用户也看不到。对象的这一特性,即是对象的封装性。
(2)对象的基本特点
①标识唯一性:指对象是可区分的,并且由对象的内在本质来区分,而不是通过描述来区分。
②分类性:指可以将具有相同属性和操作的对象抽象成类。
③多态性:指同一个操作可以是不同对象的行为。
④封装性:从外面看只能看到对象的外部特性,即只需知道数据的取值范围和可以对该数据施加的操作,根本无须知道数据的具体结构以及实现操作的算法。对象的内部,即处理能力的实行和内部状态,对外是不可见的。从外面不能直接使用对象的处理能力,也不能直接修改其内部状态,对象的内部状态只能由其自身改变。
⑤模块独立性好:对象是面向对象的软件的基本模块,它是由数据及可以对这些数据施加的操作所组成的统一体,而且对象是以数据为中心的,操作围绕对其数据所需做的处理来设置,没有无关的操作。从模块的独立性考虑,对象内部各种元素彼此结合得很紧密,内聚性强。
3.类和实例
类是具有共同属性、共同方法的对象的集合。所以,类是对象的抽象,它描述了属于该对象类型的所有对象的性质,而一个对象则是其对应类的一个实例。
4.消息
面向对象的世界是通过对象与对象间彼此的相互合作来推动的,对象间的这种相互合作需要一个机制协助进行,这样的机制称为“消息”。消息是一个实例与另一个实例之间传递的信息,它请求对象执行某一处理或回答某一要求的信息,它统一了数据流和控制流。
通常,一个消息由接收消息的对象的名称、消息标识符(也称为消息名)、零个或多个参数三部分组成。
5.继承
继承是面向对象的方法的一个主要特征。继承是使用已有的类定义作为基础建立新类的定义技术。已有的类可当作基类来引用,则新类相应地可当作派生类来引用。
广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们。
继承具有传递性,如果类C继承类B,类B继承类A,则类C继承类A。因此,一个类实际上继承了它上层的全部基类的特性,也就是说,属于某类的对象除了具有该类所定义的特性外,还具有该类上层全部基类定义的特性。
继承分为单继承与多重继承。单继承是指,一个类只允许有一个父类,即类等级为树形结构。多重继承是指,一个类允许有多个父类。多重继承的类可以组合多个父类的性质构成所需要的性质。因此,功能更强,使用更方便;但是,使用多重继承时要注意避免二义性。继承性的优点是,相似的对象可以共享程序代码和数据结构,从而大大减少了程序中的冗余信息,提高软件的可重用性,便于软件修改维护。另外,继承性使得用户在开发新的应用系统时不必完全从零开始,可以继承原有的相似系统的功能或者从类库中选取需要的类,再派生出新的类以实现所需要的功能。
6.多态性
对象根据所接受的消息而做出动作,同样的消息被不同的对象接受时可导致完全不同的行动,该现象称为多态性。在面向对象的软件技术中,多态性是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。