C++的五大特性
在客观世界里,任何一个事物都可以看做一个对象(object),或者说我们的世界是由无数个对象组成的。对象可以是自然的物体,如天安号、诺亚方舟等,也可以是一些逻辑结构,如联合国、C++语言等,甚至可以是一道数学习题,一篇科研论文,明天的学习计划等。对象可大可小,这得看你想做什么事情。例如学校是一个对象,一个班级也可以是一个对象,一个学生也可以是一个对象。
任何一个对象会具备两个要素:一个是静态特性,我们把这种静态特性称为属性(attribute);另外一个是动态特性,我们称之为行为(behavior)。拿一个学生来说,他的姓名、性别、年龄等是在一段时间内都不会发生变化的,这便是他的静态特性,即为属性;而他会在不同时间里做不同的事情,如早晨起床,晚上睡觉等,这些就是他的动态属性,即行为。如果想控制这个同学的行为,我们可以告诉他一个消息(message),比如说放假了,那如果他不傻,则不会到学校去了。
一个对象也许会有多个属性和行为,而外界通过消息来控制行为,这也是我们现实生活中事情的一般模式。在C++中的一个对象中,属性主要通过数据来体现,而行为主要通过函数来体现。消息往往是调用此对象的公有成员(一般是公有函数),我们把可以受外界消息控制的公有成员叫做这个对象的对外接口。
使用面向对象程序设计去设计一个复杂的软件时,首要的问题是考虑这个软件系统由那些对象组成,然后考虑这些对象要有哪些属性和行为。知道了这些之后设计出对象的抽象——类。而有些类是经常用到的,于是就有了类库,每当要用到时在头文件里包含相应的类库即可。
2.封装与信息隐蔽
在C++中,可以通过对象成员属性的定义来实现对象的封装处理,即把他的部分数据和功能对外界屏蔽起来,使外界不用知道,甚至不能知道。比如一台录音机,它被看见的只是
外面的外壳,而里面的机械控制和电路板对使用者是不知道。使用者知道只是几个按键都有什么功能。
这样做有两大好处:一是大大降低人们使用对象的难度,使用者完全不用理会里面是怎样实现的。如对于录音机,使用者只需知道按下录音键后,录音机便开始录音。二是可以对知识产权进行保护,通过细致的设计,可以把想隐藏的隐藏起来,只留些接口给类的使用者,使用者无法对现有功能进行修改,也不能知道现有功能是如何实现的,从而实现信息隐蔽。对外的接口一般是函数名,这个在以后的学习中我们会详细的介绍。
3.抽象
在程序设计中,我们经常见到抽象这个词语,其实抽象的概念并不抽象,我们已经对抽象司空见惯了。比如说“人”这个词,我们骂人是会说“某某不是人”。也就是说无论张三、李四还是王五都可以称为人,人就是对张三、李四、王五的抽象。又如只要有中国国籍的人我们就能把他称为中国人,不管出生地在哪里,中国人这个词语就是通过抽象得到的。
抽象的过程就是寻找有关事物的共同点,抽象的作用就是表示同一类事物的本质。其实在语言中的其他地方我们早已体现了抽象的作用。如“int”是对所有整形数据的抽象。在面向对象的C++中,有一个最重要的抽象就是类,类是从想要的对象中抽象得到的。也就是说类是对象的抽象,而对象是类的特例。
4.继承和重用
继承和重用是C++的,也是面相对象的重要特性,它们能使面向对象程序设计在设计大型程序时,可以更加的高效。这就像是一个汽车厂想生产一款新型的汽车,一般不会从头开始设计,而是选择某一款汽车为基础,再增加一些新的功能,就研制出一款型的汽车。C++与C的不同之处有些方面也在于此。
如果在软件开发中已建立了一个名为“A”的类,又想建立一个名为“B”的类,而后者与前者基本相同,只不过是增加了一些属性或者功能(即行为)。这就是面向对象程序设计中的继承机制。举个例子,我们先设计一个 “Person” 类来表述人的特性,他的属性有姓名、年龄、性别等,如果我们还想设计一个“Student”类来表示学生的特性,我们只需在“Person”类的基础上再添加学号、班级等属性即可,这样便大大简化了程序设计的步骤。
可以看到,C++的继承机制可以方便的利用已有的分类建立一个新的分类,这样就可以重用已有软件部分甚至是一大部分,大大减少了编程的工作量。另外,我们不仅可以利用自己过去所建设的类,还可以利用别人建设的类或者是存放在类库里的类。这样便大大减少了软件的开发周期,对大型软件的开发有着重要的意义。
5.多态性
多态性在我们的日常生活中是经常见到的,比如对于考试结束这件事情,同学们则是放松去吃大餐,而老师们则是辛辛苦苦地改试卷,路旁的清洁工人则什么都不用做。像这种同一个消息发送个不同的对象,不同对象作出不同反应的现象,就是多态性。
在C++中,多态性表现在由继承而产生虽然相关但是不同的类中,这些类的对象对同一消息可能会做出不同反应。比如刚才的那个例子,学生、老师、清洁工人都继承了人的特性,但是他们对考试结束这一消息会有不同的反应。
多态性是面向对象程序设计的一个重要特性,它大大的增加了程序的灵活性。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。