面向对象论



面向对象按我的理解,最关键在于多态这点。
而多态最关键最本质的实现,就是接口。

而接口的作用就是隐藏细节,这样可以不修改接口的情况下进行一些变动。
因此,面向对象的作用和做要目的是便于修改,某种层度上和c++的宏是差不多的东西。当然宏的局限性很大,远没有面向对象的机制成熟。

在说面向对象的时候,习惯于什么封装,继承,多态这些实现方法,而不去考虑他的目的是什么,这样写代码就会很累,明明是一个函数能搞定的事情,非要做成一个类,这里面代码量就提升了。

某种层度上,面向对象也是不断发展中的,对象不是凭空出现,硬生生的一个函数转到一个类,而是需要屏蔽某些细节,预见到修改的可能,才用类来实现,这个并不是为了编写无畏的代码,恰恰在没有这种编写方式的情况下,会出现更多冗余的,难以修改的代码。

这是一点。 但是仅凭这点是无法解释什么时候用面向对象方式,什么时候只是通过函数作用的方式。因为用函数可以做到用面向对象方式能做到的任何工作,这其中主要在于考虑项目的规模,和结构的复杂性等因素,什么方法能更加简便,代价更小,这种方法就值得支持,面向对象思想和过程性思想有些区别,过程性将所有东西看作一个整体内的各个局部;面向对象是各个等价的个体;所以过程性注重整体的协作性;面向对象注重个体的独立性,最好就是这个东西以后可以放到其他地方重复使用。

因此,当你这个项目有很严密的交互性,和一套标准的实现方法,流程,那么用局部观点来写程序也未尝不可,最多就是在某些局部运用一些面向对象零件。比如游戏,编译器等,操作系统等这些方面,就经常使用面向过程的方法。面向对象也不是一个绝对的概念,而是一个相对的,面向对象并不是用类包装就是,而是“用多少个类,怎样包装”。比如将面向过程整个放进一个类,这就是面向对象了么?然后将每个函数都放进一个类,总共有9999个类,这就是面向对象了么?到底9999个类更面向对象,还是一个类更面向对象呢?因此关键是怎样划分对象的方法,才是面向对象。因此也可以得出,面向过程是面向对象一个特例的结论,也就是一个类的情况。这种情况真的很多么?如果是用面向对象的语言的角度来说,确实很少,但是也要考虑到面向对象语言本身具备一定的封装和局部化能力,不需要借助类也可以保持部分和整体的清晰度,比如一个面向对象的语言,一个类都要放在一个文件里面,但是面向过程的语言就可以将函数划分,放到另外的一些文件。就c语言来说,每个源文件对应了一个目标文件,这种划分是有特别意义的,等同于类的划分作用。

因为面向对象语言本身没有面向过程语言对局部构建的所有能力,因此面向过程实际上相当于n个类的情况。也就是说,要用面向对象语言,只有通过划分几个类,才有能力去做到完全的面向过程。从这里也可以看出,面向对象还是面向过程,并不是完全的对立,面向过程并不是“最失败的面向对象”的情况,最失败的面向对象可能比面向过程更不”面向对象“。

局部化设计思想,也需要考虑划分局部这个问题,等同于类的抽象,要抽象多少个类是面向对象,要划分多少个局部是面向过程,这其中并没有太多的差别。真正的差异在于面向对象的抽象是基于独立个体这个考虑的,但是其实也并不是很多对象能够做到重用。

就好象数据结构的目的,是为了方便描述问题,面向对象的类的实现,也应该具备方便描述这点。所谓方便,主要是对客户端来说的,方便使用。当然最方便的就是一句"服务器.给我做好()",但是这样你这个客户端没有意义了。因此客户端应该处于服务端更高层次,却又不至于完全没有业务。




  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值