学科分类
目录
C++基础

面向对象的基本概念

面向对象方法中有几个基本概念需要初学者了解,当然,我们不可能通过对几句话的学习就能完全理解这些概念,在后续章节中我们会不断对这些概念进行讲解,以达到熟练掌握。

对象(object)

从一般意义上讲,对象是现实世界中实际存在的事物,它可以是有形的也可以是无形的,从一本书到一家图书馆,从单个整数到庞大的数据库等等都可以称为对象。对象是构成世界的一个独立单位,它由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)构成一个独立整体。从程序设计者来看,对象是一个程序模块,从用户来看,对象为他们提供所希望的行为。

对象既可以是具体的物理实体的对象,也可以是人为的概念,或者是任何有明确边界和意义的东西,比如一名员工、一家公司、贷款与借款等,都可以作为对象。

类(class)

我们都知道有一句话叫“物以类聚”,这个所谓的类也是我们要学习的类。从一个个具体的事物中把共同的特征抽取出来,形成一个一般的概念,这就是“归类”。即忽略事物的非本质特牲,只关注那些与当前目标有关的本质特征,从而找出事物的共性,把具有共同性质的事物划分为一类,得出一个抽象概念。例如昆虫、狮子、爬行动物,因为它们都能动所以归为动物类。

在面向对象的方法中,类是具有相同属性和行为的一组对象的集合,它提供一个抽象的描述,其内部包括属性和行为两个主要部分,它就像一个模具,可以用它铸造一个个具体的铸件。

抽象(abstract)

抽象是通过特定的实例抽取共同特征以后,形成概念的过程,例如苹果、香蕉、梨、葡萄等,抽取出它们共同特性就得出“水果”这一类,即它们都被归纳为水果这一类,那么得出水果概念的过程,就是一个抽象的过程。抽象化主要是为了使复杂度降低,它强调主要特征,忽略次要特征,以得到论域中较简单的概念,好让人们能控制其过程或以综合的角度来了解许多特定的事态。

封装(encapsulation)

封装是面向对象程序设计最重要的特征之一,封装就是隐藏,它将数据和数据处理过程封装成一个整体,以实现独立性很强的模块,避免了外界直接访问对象属性而造成耦合度过高及过度依赖,同时也阻止了外界对对象内部数据的修改而可能引发的不可预知错误。

封装是面向对象的核心思想,将对象的属性和行为封装起来,不需要让外界知道具体实现细节,这就是封装思想,例如,用户使用电脑,只需要使用手指敲键盘就可以了,无须知道电脑内部是如何工作的,即使用户可能碰巧知道电脑的工作原理,但在使用时并不完全依赖电脑工作原理这些细节。

继承(inheritance)

继承性主要描述的是类与类之间的关系,通过继承可以在无须编写原有类的情况下,对原有类的功能进行扩展。例如,有一个汽车类,该类中描述了汽车的普通特性和功能,而轿车的类中不仅应该包含汽车的特性和功能,还应该增加轿车特有的功能,这时可以让轿车类继承汽车类,在轿车类中单独添加轿车特性的方法就可以了。继承不仅增强了代码复用性,提高了开发效率,而且也为程序的修改补充提供了便利。

在软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是数据组织和分类行之有效的方法,它简化了对象、类的创建工作量,增强了代码的可重用性。

多态( polymorphism)

多态指同一个属性或行为在父类及其各派生类中具有不同的语义,面向对象的多态特性使得开发更科学、更符合人类的思维习惯,能有效的提高软件开发效率,缩短开发周期,提高软件可靠性。

C++中的多态分为静态多态和动态多态。静态多态是在编译时就能确定调用哪个函数,比如重载函数,根据参数不同编译器就确定调用哪个函数。

动态多态是由继承产生的,是指对象根据所接收的消息作出动作。同一消息被不同的对象接收可产生完全不同的行为,这种现象称为动态多态。多态是面向对象技术中的一个难点,对于很多初学者都难以理解。

我们以一个交通概念为例来进行讲解,假如在一个十字路口红灯亮起,那么汽车、飞机这两个对象看到红灯会做出不同的反应,汽车停车,飞机继续飞行,这就是多态性。不同的对象对同一个消息产生不同的行为。

后面这三个概念,即封装、继承、多态又是面向对象程序设计的三大特征。它们的简单关系如图1所示。

图1 面向对象程序设计特征

这三大特征适用于所有的面向对象语言,深入了解这些特征,是掌握面向对象程序设计思想的关键。面向对象的思想光靠上面的简单介绍是无法真正理解的,只有通过大量的实践去学习和理解才能将面向对象思想真正领悟。

点击此处
隐藏目录