backbone(-2) 理解面向对象

来源:互联网 发布:网络测网速 编辑:程序博客网 时间:2024/06/06 03:19

什么是OO

        我一直以为自己很好的掌握了OO,所以大胆地在面试时不从程序的角度来解释OO。但事实是我只是对已经知晓的理论作了一种形而上学的概括,在理论的应用时并没有得心应手,所以在我变成web前端程序员之后,真正开始用框架来开发丰富页面之前,非常有必要梳理自己的认知。

        OO抽象出的对象是以实体属性为基础,对象管理自己内部的变化并针对这些变化改变自己的呈现,对象之间完全是隔离的,只有数据在对象之间跑动。对象就像细胞一样,被细胞膜封装,细胞间隙液则是数据流的一种,细胞液中没有直接控制细胞行为的武器,只有各种化学元素,细胞对这些化学元素的反应是封闭在细胞内部、由细胞本身提供的。细胞之间的通讯则完全依赖数据流的变化(数据流包含所有外部刺激:光、温度、体液中的物质集成信息、辐射、震动……)


为什么我们难以运用OO

       朱元璋是出了名的控制狂,但他的思想很朴素,他实际是想用面向对象的方法制造出一套行政制度,于是设定了各种文书,行政单位之间通过文书来驱动,行政单位政务相对完整独立——这是面向对象手段中典型的数据驱动方式……但结果是这套制度让官员崩溃了,要做的事太多,数据流根本没有办法流畅,朱老大在把人当机器使呢。

       为什么把人当机器使就会出问题呢?因为人不可能和机器一样稳定,true和false通过与门肯定能得出false,备胎和女神结合却不一定会生出自己的孩子……涉及到人的地方,对象本身的功能不见得有用,因此控制A对象的方法不一定在A对象内部,而是在B对象身上,人的江湖都是这样。

       我最近读的一本书叫《三体》,三体人思维是透明的,不能理解人类使用欺诈的方式。就像我们在接触面向对象之前一直适应的是面向过程,业务驱动数据,过程是主体。忽然之间让我们转变思维,以对象封装数据,业务被切割成碎片分散到各个对象中,用控制数据流来组合对象形成业务——在一定程度上这是和人类世界动作的相反方式。

        虽然我们在一开始接触的时候就记住了解了面向对象,但是如果没有体会到面向对象的好处之前,业务驱动仍然是我们大脑中default,而爽之前一定要痛一次的,这是第一次的普遍规则,所以你痛过了吗?反正我是痛过了……


运用OO

         有人问我面向对象的三大特性是什么,我总会一愣,因为我知道三大特性,但是我怀疑它——因为我觉得OO的特性就是一个:封闭孤立性,黑盒子般的封闭。实现这一特性的思想是抽象封装的思想,多态和继承只是方便设计时使用的手段。
      所以如何运用OO,就是如何封闭对象,把对象封闭成细胞那样拥有自己的生态系统。
      所以在接受到一个需求,无论它是复杂还是简单,如何将它抽象分解成独立的一个个无耦合平面层次的对象,就是运用OO。如何使用这些对象,或者对这些基础对象进行贯通联结形成高一层次的对象,则是重新形成业务的过程。
       一个系统中的业务或多或少都存在重复的子业务或业务片段,OO使用对业务合并同类项的方式抽取因子级对象,至少有以下好处:
  • 1.极大减化了重复代码,提高了代码的重用性。
  • 2.对象的呈现变化由自己控制,分散了整体业务的关注点,减化了业务的复杂度。
  • 3.高扩展维护性,因子对象提供的是基础功能,它们与具体的业务不耦合,因此可以随便组合,因子的添加变化呈现高度可分离性。
0 0
原创粉丝点击