面向对象的本质
Posted feng9exe
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象的本质相关的知识,希望对你有一定的参考价值。
经典解释是:使用了对象就叫基于对象,基于对象的基础上增加了继承从而变成了面向对象。
基于对象的最大特点就是封装,至于private,protected,public,并不是基于对象语言的必须要求。同时应该注意到的是,封装对于应用本身并没有提供太大的帮助;换句话说封装仅仅改变了方法的表达形式,除了析构函数能够提供一些资源安全上的保证,当然java没有析构函数。比如某些网络应用,包装了socket,然而必须的accept,listen,connect,read,write还是需要你自己去调用,只不过调用方式有所变化而已;更麻烦的是处理错误,可能的错误你必须完全接管,那就需要对问题本身有很深入的了解。基于对象让你不容易犯错误,但是不能改变对问题本身的理解。
于是出现了面向对象。继承,多态只是它的特点而已,一种表象。而关键优越性在于它可以改变对问题的认识。比如处处可见的画图的例子,p.Draw(),就能画出一个形状,都是Draw()方法,但是可以根据p的不同,动态选择。无可否认,这个是多态性的优越性的例子。然而继承又如何呢,可以这样说,如果不使用多态,继承就没有意义了。因为没有多态,继承事实上导致了较高层次的包装而已,与基于对象相同,它不能改变对问题本身的理解。很多时候继承被包裹所代替,COM的对象重用,就是典型的包裹,不过它叫聚集而已。类层次越深管理越困难。
面向对象提供了极大的灵活性,然而作为一个概念,外延太丰富,反而不容易把握。看看JFC的文档,实在太灵活了,感觉上这样那样几个东西拼合起来,窗口就可以做成了。事实却不是如此,你必须去了解layer,了解listener,了解很多东西,然后按照固定的规则进行拼装才能达到效果。简单说,看看javadoc的JFC文档,很难学会如何去实现一个可用的窗口应用。这一点明显比不上VB,其实这就和使用面向对象方法是为了接口易用性这一个基本原则背离了。外延被扩大化到难以接受的规模,这是使用面向对象方法很容易犯的毛病。而设计模式提供了一些方法缓和这些矛盾,比如用静态函数创建对象,私有构造,使得对象不能被任意创建,这就大大压缩了这些对象的外延。简单看看MessageDigest,可能在内部有md2,md4,md5,sha1的类供我创建对象,但是这些我都不让你看到,你只要知道一个MessageDigest就足够了,免得产生误会。
万物皆对象!
封装:封装就是指利用抽象数据类型将数据和基于数据的操作封装在一起
https://bbs.csdn.net/wap/topics/50019051
以上是关于面向对象的本质的主要内容,如果未能解决你的问题,请参考以下文章