别闹了,又是面向对象编程,忽悠谁呢?

关于编程方法,貌似不少,什么面向过程、面向数据、面向切面、面向服务等,搞的面向对象好像不怎么流行了。即便是这样,可是在面试或者跟人讨论的时候总喜欢拿面向对象来说事,甚至有人拿这个作为评判程序员水平的一个标准,其实都是在瞎胡闹,优秀的代码又怎么会被这些概念所束缚?而是一看到代码你都忘了所谓的模式,忘了所谓的编程方法,只有深深的被折服。

别闹了,又是面向对象编程,忽悠谁呢?

如此优秀的代码见到的不多,所以还是跟大家说一说,到底什么是面向对象?先看名词解释:

OOA,Object Oriented Analysis:面向对象的分析
OOD,Object Oriented Design:面向对象的设计
OOP,Object Oriented Programming:面向对象的编程

面向对象的分析:其实拿到需求,分析完需求之后,首先不是去设计,更不是去编程。而是面对这个需求审视问题的视角以及确定将要抽象的级别,首先确定需求中涉及到多少类对象,以及抽象出每个对象所需的属性,抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。
面向对象的设计:确立了对象的种类以及抽象的级别,那么接下来就要建立对象模型呀,设计接口呀,确立之间的关联协作关系啊,这样首先出一个清晰的设计图出来,大家一看一目了然,产品经理一般看不懂你系统的代码,但他可以看懂你的设计,而程序员可能对需求理解的不是很深入,但加上设计,他就知道自己具体要做什么。
面向对象的编程:需求有了,设计有了,卧槽,终于轮到编码人员了,可要大显神威了。什么继承啊,多态啊,封装啊,劳资都要用上,绝逼要高大上的把需求实现出来。
继承多态封装:
封装:好比一个手机,我并不知道里面有什么东西,但我只要清楚手机有什么功能即可。
继承:好比父子关系,儿子继承自父亲,父亲身上的很多特质,儿子或许也有。
多态:好比一个父亲有多个儿子,虽然他们爹都一样,但各个儿子有不同的特征。

其实好的封装,不光可以屏蔽繁杂的细节,让接口调用人员省心,而且也是让代码降低耦合性,提高内聚性的一个过程。封装保证了模块具有较好的独立性,使得程序维护修改较为容易。对应用程序的修改仅限于类的内部,因而可以将应用程序修改带来的影响减少到最低限度。

继承可以大大提高复用度,假如我们要实现一个菜单、一个列表、一个表单等,这些都有一些相同的属性及方法,比如增删改查这些操作,每个都重头写类似了,一旦后续有更改,每个都需要改,而这个时候我们做一个类Component,让这些类都继承自Component,那这些增删改查的东西只写一次就够了,改也只改一个地方。

而多态则可以在保证现有代码复用性的基础上,让每个子类丰富多彩,就好比,每个人都有OOXX的行为,但每个人的姿势以及持续的时间都不一样,这个就看自己灵活发挥了,和祖先赋予给我们的这个功能本身无关。

如果要想在JS里实现这些,首先必须理解Function和Object以及prototype,不然你会疯掉的。

其实说了这么多,归根到底就一句话,提高代码的复用性和可扩展性,如果有一天你说:卧槽,我并不知道什么面向对象,也不知道什么面向切面、面向过程,但我的代码就可以做到Write less, do more,也可以做到High Scalability,甚至是Write once, run anywhere,那么恭喜你已臻至化境。

相关阅读