当前位置: 代码迷 >> Java Web开发 >> 面向对象的懂得
  详细解决方案

面向对象的懂得

热度:10293   发布时间:2013-02-25 21:15:01.0
面向对象的理解
在很多次面试的时候,面试的考官都要问:你对面向对象的理解。对这一问题该如何回答啊。

------解决方案--------------------------------------------------------
我的思路是:
回答时从面向对象的三大特征回答。(下面引用网上朋友整理)

包括三个特征:继承、封装、多态。 

类的继承性是指从已有的一个类来extends子类,子类具有了父类的所有特征,同时,子类也可以有新的特性。比如:人是一个类,男人具有了人类的所有的特性,比如思考,比如劳动。同时,男人也有新的特性,比如男人会长胡子。 

类的封装是指类把所有的操作都封闭起来,仅仅提供接口出来让其他人使用,使用的人没有必要懂得类里面的操作,只需要懂得操作接口就可以了。比如开汽车,我们只需要懂得方向盘、刹车、油门等等的使用就可以了,没有必要知道刹车是如何构成的封闭好的操作。同时,封装也提高了程序的可替换性。比如两个汽车公司实现刹车的方式不一样,但是,只要我们学会了使用刹车,那么,开两个汽车公司的车就都没有问题了,我们不需要考虑他们怎样实现刹车这门技术的。 

类的多态性是一个对象的某项功能可以处理不同类型的问题,或者一个子类可以将父类的某个功能替换成新的功能,具体到编程的方面来说实现类的多态有override和overload,也就是覆写和重载。 

同时面向对象还有一个很重要的概念:抽象。抽象就是一个事物的本质。当然对于本质,不同的角度却会有不同的理解。男人,在和女人一起的时候,它的本质是人。在和所有的生物一起的时候,它的本质是动物。(虽然哲学家都说事物的本质只有一个,但是,我仍然坚持我的观点) 



------解决方案--------------------------------------------------------
楼上的说的好好....
------解决方案--------------------------------------------------------
嘿嘿,我也来说两句
可以先从面向过程来说起,我们在大学的时候学了c语言,一种面向过程的语言实现,在思考问题的时候,着重强烈解决问题的步骤。
而面向对象语言的实现,包括java,.net ,vb,现在php也有了一定程度的支持,甚至javascript,其思考问题的方式不是传统的步骤解决问题的步骤,而是先构造对象,比如妈妈做饭,其可以构造妈妈这个对象,有mother,这个私有属性,和 doCookie()这个做饭方法。

面向对象的理解,个人认为分为<1>代码级的面向对像,在这里可以用面向对象的3个基本概念来回答,比如封装(封装的理解个人认为主要有两个方面,1是可以在访问之前做数据权限控制,2另外default,protect,public也是一种封装,并且权限的公开要特别小心,因为越是公有就越危险,任何公开的属性或方法对使用这个方法、属性、类的人(客户)都是一种承诺,不可轻易变动),继承是让子类继承父类的方法或属性,子类与父类是一种is的关系(在这里可以讲讲委托,因为java是单继承(c++是多继承),在使用的时候尽量使用委托,如何区分使用继承和委托,最基本的判断标准是继承是is的关系,而委托是has的关系),多态是java程序在动态运行期间的一种表现行为,配合java的反射机制可以很好设计出很有优秀的程序,比如调度程序等.
<2>系统分层甚至更高的架构级的面向对象,如果说代码级的面向对象是一种细粒度的面向对象,那么系统分层甚至更高的架构级的面向对象则是一种粗粒度的面向对象,现在我们有了很多的框架,比如展示层的struts,jsf等,持久层框架hiberate等,他们都负责自己这一层所做的事情,业务逻辑你就负责业务逻辑,DAO你就负责数据访问,不要业务逻辑里面有数据库访问的代码,所以这要就action层调用service,action里不要出现什么if之类的判断(当然一点当不出现,可能不太可能,自己心理要有数),servcie调用dao,所以spring框架就出来了,负责这类的事情,并且提出很多优良的理念.在比如大家都知道现在增值业务市场竞争激烈,为了业务的新需求,中国移动不得不对自己的系统进行改良,我看过很多移动公司很多的系统架构设计,所以可以很清晰的看到,每次改良基本上是将原来好多的功能抽取出来单独弄出来,放到另外一个模块。这个模块你就负责这一块的功能,不是你的工作,就交给其他模块.
嘿嘿...............