CPP学习之——C与CPP的不同(1.3)

一 引言

很多初学者认为C++仅仅是C语言的扩充和补充,如果这么想,那就大错特错了。C++与C语言最大的不同是在解决问题时思维方式的不同, C++采用面向对象思维,而C语言则采取面向结构思维。

二 面向结构思维

面向结构思维的宗旨就是讲一个大程序拆分成一个个很小的结构,这里有必要说明一下结构。

2.1 结构是什么呢?

  • 结构就是实现一个或多个功能的代码块,比如说计算"1+1=?",加入算出等于2,那么就是实现了一个功能
  • 而这个实现"1+1=2"的代码块就可以看做是一个结构,或者叫做方法。
  • 面向结构思维就是要将一个大程序划分成若干个很小的结构,每个结构都完成了一个或多个功能,所有结构集合起来就可以完成一个大功能。

2.2 结构思维的弊端

这样的编程思想在80年代前期还是可以的,但是到了80年代后期,它的弊端就暴露出来了。

2.3 结构思维弊端体现

2.3.1 可维护性上

  • 首先是程序的可维护性方面,由于结构化编程仅仅是将大程序细化成若干个小程序,而并没有考虑数据的安全性问题,比如说数据还是属于整个程序的,这样就导致某个地方对数据的修改,会对整个程序造成难以预料的影响。
  • 举个例子,某个游戏将怪物的生命值设定为100,而这种怪物在游戏中的数量为30个,由于生命值是属于整个程序的,而不是某个具体的怪物的,所以主角每砍怪物一下,30个怪物的声明都会下降10点,而主角杀死一个怪物以后,30个怪物都会死亡,这显然是不合理的。

2.3.2 可重用性上

  • 其次是程序的可重用性,由于结构化编程并没有将相关的数据和结构看做一个整体,所以无法利用已有的代码来创造新的代码。
  • 打个比方,某游戏公司用结构化的方式创造一个怪物,这个怪物是由若干结构和若干数据组成的,游戏公司希望在它的基础上在创造一个新的怪物,这个新的怪物仅仅是比旧的怪物多了一个功能——跳跃,看上去要实现这个怪物似乎很简单,但是由于结构化编程并没有将怪物看做是一个整体,所以他们需要重新编写这个新怪物

三 面向对象思维

3.1 面向对象优势体现

3.3.1 封装上

  • 随着软件工程的发展,软件越来越大,数据越来越多,面向结构所带来的的问题也越来越多,越来越严重,曾一度导致"软件危机",面向对象就是为了解决"软件危机"而创造的,面向对象思想增加了大量的编程理念,它有能力将一个大程序拆分成若干个对象,每个对象中再封装部分数据和实现功能的方法,一个对象想要访问另一个对象的数据,必须争得改对象的同意,而该对象中数据的改变也不会影响到其他对象,从而解决了数据的安全性问题;
  • 另一方面,面向对象允许将具有相同特征的对象划分为一类,而同一类的对象又可以继续向下派生,父生子,子生孙,代码不经修改即可重复利用,从而实现了代码的重用。
  • 拿游戏做个比方,游戏中的30个怪物可以看做是30个对象,每个对象都拥有一个生命值,这样即使其中一个怪物的生命发生变化,也不会影响到其他的怪物。同时,由于对象是一个整体,所以,我们要创造一个新怪物时,只需要在原来的怪物身上增加新功能即可,而不许用重写该代码。

3.3.2 多态

  • 面向对象的另一个优点是支持多态性,多态是什么呢?
  • 多态性是指不同的对象采取相同的方法会导致不同的行为或结果。
  • 比如:我们要模拟一个足球游戏,不同的足球运动员代表不同的对象,而相同的方法则指的是射门这同一动作,由于运动员技术水平不同,所以技术好的运动员进球的概率要高些,而技术差的运动员踢飞的概率要高些。