面向对象的一些理解
昨晚给同事培训,当时就有人提出了,什么是面向对象,希望我能给出自己的理解,于是记录之。
面向过程VS面向对象
首先谈谈面向过程
现在很多语言都说是面向对象的了,可是我估计很多人用这门语言来做开发的时候,只会面向过程,为啥呢,因为面向过程,更加符合我们的思维方式,一步一步的来进行写代码,写方法,实现业务逻辑(流程化的思维方式)。
现在大家很多时候,对于面向对象的理解,就四个词:封装,继承,多态,抽象。一具体的问,这四个词是啥意思,大家都能讲出来,因为几乎所有语言的面试题,都会对这四个词语是啥意思,进行解释一下。而实际工作中,大家根本就没怎么注意。比如下面说的一些情况:
1、写一个类,一上来就是对所有字段get,set方法。
为啥不建议这么做呢,这样做,完全没有封装性可言了,因为你有一些可能不需要对外暴露的Setter方法,你也暴露了。还有一些时候,可能改了某个字段要一起更新其他字段的,你也做不到了。
2、大家现在几乎用的都是贫血模型开发方式。实体和数据分开的类。
这个貌似很多公司都这样,这样确实简洁,也挺好的,这一点不强求,不过这点就是违反了面向对象。所以有人推崇DDD,也有人反对DDD。
3、现在很多人都喜欢,把一堆产量,都放到一个大而全的类中。
面向过程没有过时,面向对象并不是把面向过程淘汰了,而是这两者可以互存。
再谈面向对象
面向对象,他是一种自底向上的思维方式,它和我们平时的思维模式不太一样,简单一句话,就是碰到问题:你要倒着想。碰到一个需求,你要倒着来做,先把原型,功能手册,用户使用过程中的注意点,列出来,然后再来划分具体模块,然后再来设计模块和模块之间的关系,最后落实到代码中。面向对象比面向过程要难一点,从它的思维方式就可以知道,并且你还要设计模块,设计类,正确的设计类和类与类之间的关系,这里就很需要功夫了,这里就真的需要了解设计原则,设计模式,代码重构,并且还要遵循一定的规范,我觉得中高级程序员就应该要具备这样的能力。
总结
面向对象适合那些复杂的程序,业务逻辑流程都比较复杂的,并且开发人数也众多,并且上线之后,可能需要10个人团队以上在维护的,我建议可以考虑用面向对象的方式来设计程序。1、大家都要有模块化的概念,2、命名要规范,分层要合理,3、代码结构要良好,4、尽量避免高度耦合。其中最重要的就是模块化把,把代码分模块化搞好,到时候修改,维护都方便,并且不用担心影响到其他模块,重构的时候,也可以按照模块化进行重构。
面向过程适合比较简单,人少开发,并且能确定这个项目就那样了的,不需要投入太多的维护成本的,我都觉得用面向过程挺好的。
最后感谢大家的阅读,欢迎评论区讨论。