面向对象和面向过程-2
哪些代码设计看似是面向对象,实际是面向过程的?
滥用 getter、setter 方法
定义完类的属性后顺手就写了,或直接用IDE生成非常不推荐,它违反了面向对象编程的封装特性,面向对象编程风格退化成了面向过程编程风格。
滥用全局变量和全局方法
面向过程语言如C,全局的到处可见。
在面向对象编程中,常见的全局变量有单例类对象、静态成员变量、常量等,常见的全局方法有静态方法。
在面向对象编程中,常见的全局变量有单例类对象、静态成员变量、常量等,常见的全局方法有静态方法。
全局变量和全局方法中,Constants 类和 Utils 类最常用到。
把程序中所有用到的常量,都集中地放到这个 Constants 类中。不过,定义一个如此大而全的 Constants 类,并不是一种很好的设计思路。
首先,这样的设计会影响代码的可维护性。
其次,这样的设计还会增加代码的编译时间。
最后,这样的设计还会影响代码的复用性。
改进 Constants 类的设计有两种思路可以借鉴
第一种是将 Constants 类拆解为功能更加单一的多个类
第二种是并不单独地设计 Constants常量类,而是哪个类用到了某个常量,我们就把这个常量定义到这个类中。
只包含静态方法不包含任何属性的 Utils 类,是彻彻底底的面向过程的编程风格。它在软件开发中还是挺有用的,能解决代码复用问题。所以,这里并不是说完全不能用 Utils 类,而是说,要尽量避免滥用,不要不加思考地随意去定义 Utils 类。
细化一下,针对不同的功能,设计不同的 Utils 类,比如 FileUtils、IOUtils、StringUtils、UrlUtils 等,不要设计一个过于大而全的 Utils 类。
定义数据和方法分离的类
如果你是基于 MVC 三层结构做 Web方面的后端开发,这样的代码你可能天天都在写。
面向过程编程风格恰恰符合人的这种流程化思维方式。而面向对象编程风格正好相反。它是一种自底向上的思考方式。它不是先去按照执行流程来分解任务,而是将任务翻译成一个一个的小的模块(也就是类),设计类之间的交互,最后按照流程将类组装起来,完成整个任务。这样的思考路径比较适合复杂程序的开发,但并不是特别符合人类的思考习惯。
除此之外,面向对象编程要比面向过程编程难一些。在面向对象编程中,类的设计还是挺需要技巧,挺需要一定设计经验的。你要去思考如何封装合适的数据和方法到一个类里,如何设计类之间的关系,如何设计类之间的交互等等诸多设计问题。
所以,基于这两点原因,很多工程师在开发的过程,更倾向于用不太需要动脑子的方式去实现需求,也就不由自主地就将代码写成面向过程风格的了。
如果我们开发的是微小程序,或者是一个数据处理相关的代码,以算法为主,数据为辅,那脚本式的面向过程的编程风格就更适合一些。
并非完全对立的。
不管使用面向过程还是面向对象哪种风格来写代码,我们最终的目的还是写出易维护、易读、易复用、易扩展的高质量代码。