为什么说C++不是完全面向对象的语言

来源:互联网 发布:sqlserver sql文件 编辑:程序博客网 时间:2024/05/22 16:05
1) main函数不在任何类里面,因为这点,所以做不到完全面向对象,下面其他的都是可以解决的
2)基本的数据类型也不是对象(从这点上看JAVA也不是完全面向对象的)
3)友元会破坏封装性
4)支持独立的函数,数据,即过程化编程
其实所谓的完全面向对象,是一些人想出来的卖点,并没有太大的实际意义,难道把main包含进class这种语言就强大了?

C++支持面向过程、基于对象、和面向对象三种模式 

所谓基于对象是指:我们采用对象封装技术,将数据和操作捆绑在一起,但是并没有合理地使用多态、继承等面向对象技术进行软件设计。很多以前从事C程序开发的人,当他采用面向对象的编程语言(如C++)进行开发时,写出来的程序却是基于对象的。或者说他们是采用面向对象的语言编写面向过程的程序!


纯粹面向对象:

  (1)   所有东西都是对象。可将对象想象成一种新型变量;它保存着数据,但可要求它对自身进行操作。理论上讲,可从要解决的问题身上提出所有概念性的组件,然后在程序中将其表达为一个对象。
  (2)   程序是一大堆对象的组合;通过消息传递,各对象知道自己该做些什么。为了向对象发出请求,需向那个对象“发送一条消息”。更具体地讲,可将消息想象为一个调用请求,它调用的是从属于目标对象的一个子例程或函数。  
  (3)   每个对象都有自己的存储空间,可容纳其他对象。或者说,通过封装现有对象,可制作出新型对象。所以,尽管对象的概念非常简单,但在程序中却可达到任意高的复杂程度。  
  (4)   每个对象都有一种类型。根据语法,每个对象都是某个“类”的一个“实例”。其中,“类”(Class)是“类型”(Type)的同义词。一个类最重要的特征就是“能将什么消息发给它?”。
  (5)   同一类所有对象都能接收相同的消息。这实际是别有含义的一种说法,大家不久便能理解。由于类型为“圆”(Circle)的一个对象也属于类型为“形状”(Shape)的一个对象,所以一个圆完全能接收形状消息。这意味着可让程序代码统一指挥“形状”,令其自动控制所有符合“形状”描述的对象,其中自然包括“圆”。这一特性称为对象的“可替换性”,是OOP最重要的概念之一。   

面向对象其实是现实世界模型的自然延伸。现实世界中任何实体都可以看作是对象。对象之间通过消息相互作用。
如果说传统的过程式编程语言是以过程为中心以算法为驱动的话,面向对象的编程语言则是以对象为中心以消息为驱动。

用公式表示:
过程式编程语言为:程序=算法+数据;
面向对象编程语言为:程序=对象+消息。


原创粉丝点击