面向对象世界

217 阅读3分钟

欢迎订阅公众号 数据分析那些事儿

1 大师说

面向对象就是继承、封装、多态、复用等具体的技术吗?实际上它们只是采用面向对象方法认识和描述这个世界所采用的工具,它们都是表征而不是本征。

我对面向对象编程的目标从来就不是复用。相反,对我来说,对象提供了一种处理复杂性问题的方式。这个问题可以追溯倒亚里士多德:您把这个世界视为过程还是对象?在面向对象兴起之前,编程以过程为中心。然而,系统已经到了超越其处理能力的复杂性极点。有了对象,我们能够通过提升抽象级别来构建更大的、更复杂的系统——我认为这才是面向对象编程运动的真正胜利。

2 面向过程的困难

面向对象的困难,本质上是因为面向过程将世界看成是过程化的,一个个紧密相连的小系统,构成这个系统的各个部分之间有着密不可分的因果关系。这种分析方法在需求复杂度较低的时候非常管用。

然而现实世界的系统是非常复杂的,构成一个系统的因素太多,要把所有可能的因素都考虑到,把所有因素的因果关系都考虑清楚,再把这个过程模拟出来实在是太困难了!

这个世界本质是由对象组成的,平时看上去相互无关的独立对象在不同的驱动力和规则下体现出不同的运动过程,然后这些过程便展现出了我们这个生动的世界。

3 面向对象的那些概念

对象内部就是一个黑匣子,什么也看不到,这称为封装;对象可以结合在一起形成新的对象,结合后的对象具有前两者特性的总和,称为聚合;对象可以繁育,产下的孩子可以拥有父辈全部的本领,称为继承;多个对象可能长着相同的脸,但同样的这张脸背后确是不同的对象,它们有着不同的行为,这就是多态

对象是“短视”的,它不知道也无法理解所处的宏观环境,只知道与它有着联系的身边的一小群伙伴,这称为依赖;并与小伙伴间保持着信息交流的关系,这称为耦合;同时,对象爱那个也是自私的,即便在伙伴之间,每个对象爱那个也仍然顽固的保护着自己的领地,这称为类属性,只允许其他人通过它打开的小小窗口,进行交流,这称为方法

然而对象也喜欢群居,并且总是“物以类聚,人以群分”。这些群居的对象有着一些相似的性质,它们依靠这些相似的性质来组成一个部落。对象们寻找相似性质并组成部落的过程称为抽象,它们组成的部落称为;部落里的每一个成员既有共同的性质又有自己的个性,我们只有把特有的个性赋给部落成员才能区分它们并使它们活动起来,这称为实例化