谈谈你对面向对象的理解

Question:请你谈一下面向对象?

        Answer

      面向对象是相对于面向过程而言的。面向过程语言是一种基于功能分析的、以算法为中心的程序设计方法;而面向对象是一种基于结构分析的、以数据为中心的程序设计思想。早在面向过程语言时代,有一句话说:程序=算法+数据结构。而现在在面向对象语言时代,这句话变为:程序= 对象+消息。对象:万物皆对象; 消息:指对象之间的相互通信。在面向对象语言中有一个有很重要东西,叫做类。从面向过程的角度看,类就是一个特殊的数据结构,它就好像是我们C语言中的结构体;从面向对象的角度看,类就是具有相同属性和方法的对象的集合。

 

面向对象有三大特性:封装、继承、多态。

所谓封装,就是指隐藏对象的实现细节,给外界提供公共的方法来访问。这一点,我个人认为和面向过程语言有本质的区别。在C语言中,我们必须在乎每一个实现细节,去关注每一个过程; 而自从从在面向对象语言中提出了封装这个概念后,我们就可以不必要去关心每一个对象的实现细节,  我们只要关注我们所要实现的功能就行,然后根据给我们提供好的接口,我们去面向接口编程就行了。面向对象的封装思想,我认为应用的最好、最成功的地方,就是在微软的.NET技术上.微软把很多经常用到的功能都封装在一个控件里,作为我们用户不必去在意到底这个控件是用什么实现的,它内部到底是怎么样的?我们只需要关心我们需要实现的功能就行, 然后根据控件给我们提供的属性和方法去操作这些控件,实现我们想要的功能就行了。

 

面向对象第二个特征,继承。我认为面向对象的继承和生物学的继承很相似。子类可以继承父类的公共属性和方法,子类永远没法继承到父类的私有属性和方法。这一点还区别于生物学的继承,生物学中子类可以同时继承父亲和母亲。但是在java|C#|C++等面向对象语言中,是不允许多重继承的,但可以多层继承。为了弥补不能多重继承这点,在java和c#语言中都提出了接口这一概念。接口就是一种规范。它同样不会有实现细节,而只是给那些要实现这个接口的类一个规范和约束,约束那些实现这些接口的类,要实现我提供的功能,就必须实现我的所有方法, 要不你就声明为抽象类。

 

面向对象第三大特征,多态。多态,就是同一个实现接口,对不同的实例而执行不同的操作。这一点,我记得在上高中生物的时候学过遗传学,我觉得这里的多态就是遗传学的变异。  同一个物种的后代由于基因突变或自然环境等影响,而造成不同的个体差异。而我们这里的多态也一样,同属一个基类的不同派生类也可以有自己不同于其他类的属性和方法。除了这封装、继承、多态这三点基本特征外,面向对象还有一个很重要的概念,叫抽象。抽象就是把提取事物的本质东西,而忽视非本质的东西。对应于抽象这一概念,java和c#中都有一个类叫做抽象类。抽象类中可以给出方法的实现细节,同接口一样如果你要实现我这个抽象类就必须实现我的所有方法,要不你就声明你为抽象类。如果不允许抽象类中有方法的实现细节,这就变成了接口。

   总之,面向对象就是万物皆对象,把客观事物当成一个对象来处理的程序设计思想。是一种区别于POP、SOA、面向组件

    等其他程序设计思想,是一种基于结构分析的,以数据为中心的程序设计思想。


你可能感兴趣的:(谈谈你对面向对象的理解)