Question:请你谈一下面向对象?java
Answer:算法
面向对象是相对于面向过程而言的。面向过程语言是一种基于功能分析的、以算法为中心的程序设计方法;而面向对象是一种基于结构分析的、以数据为中心的程序设计思想。早在面向过程语言时代,有一句话说:程序=算法+数据结构。而如今在面向对象语言时代,这句话变为:程序= 对象+消息。对象:万物皆对象; 消息:指对象之间的相互通讯。在面向对象语言中有一个有很重要东西,叫作类。从面向过程的角度看,类就是一个特殊的数据结构,它就好像是咱们C语言中的结构体;从面向对象的角度看,类就是具备相同属性和方法的对象的集合。编程
面向对象有三大特性:封装、继承、多态。c#
所谓封装,就是指隐藏对象的实现细节,给外界提供公共的方法来访问。这一点,我我的认为和面向过程语言有本质的区别。在C语言中,咱们必须在意每个实现细节,去关注每个过程; 而自从从在面向对象语言中提出了封装这个概念后,咱们就能够没必要要去关心每个对象的实现细节, 咱们只要关注咱们所要实现的功能就行,而后根据给咱们提供好的接口,咱们去面向接口编程就好了。面向对象的封装思想,我认为应用的最好、最成功的地方,就是在微软的.NET技术上.微软把不少常常用到的功能都封装在一个控件里,做为咱们用户没必要去在乎到底这个控件是用什么实现的,它内部究竟是怎么样的?咱们只须要关心咱们须要实现的功能就行, 而后根据控件给咱们提供的属性和方法去操做这些控件,实现咱们想要的功能就好了。数据结构
面向对象第二个特征,继承。我认为面向对象的继承和生物学的继承很类似。子类能够继承父类的公共属性和方法,子类永远无法继承到父类的私有属性和方法。这一点还区别于生物学的继承,生物学中子类能够同时继承父亲和母亲。可是在java|C#|C++等面向对象语言中,是不容许多重继承的,但能够多层继承。为了弥补不能多重继承这点,在java和c#语言中都提出了接口这一律念。接口就是一种规范。它一样不会有实现细节,而只是给那些要实现这个接口的类一个规范和约束,约束那些实现这些接口的类,要实现我提供的功能,就必须实现个人全部方法, 要不你就声明为抽象类。spa
面向对象第三大特征,多态。多态,就是同一个实现接口,对不一样的实例而执行不一样的操做。这一点,我记得在上高中生物的时候学过遗传学,我以为这里的多态就是遗传学的变异。 同一个物种的后代因为基因突变或天然环境等影响,而形成不一样的个体差别。而咱们这里的多态也同样,同属一个基类的不一样派生类也能够有本身不一样于其余类的属性和方法。除了这封装、继承、多态这三点基本特征外,面向对象还有一个很重要的概念,叫抽象。抽象就是把提取事物的本质东西,而忽视非本质的东西。对应于抽象这一律念,java和c#中都有一个类叫作抽象类。抽象类中能够给出方法的实现细节,同接口同样若是你要实现我这个抽象类就必须实现个人全部方法,要不你就声明你为抽象类。若是不容许抽象类中有方法的实现细节,这就变成了接口。设计
总之,面向对象就是万物皆对象,把客观事物当成一个对象来处理的程序设计思想。是一种区别于POP、SOA、面向组件orm
等其余程序设计思想,是一种基于结构分析的,以数据为中心的程序设计思想。对象