OOP的四大特性的意义与缺陷

封装

封装也叫作信息隐藏或者数据访问保护。

意义一:限制修改

如果我们对类中属性的访问不做限制,属性可以随意被以各种奇葩的方式修改,这会导致:

  • 修改逻辑可能散落在项目中的各个角落,代码实现得五花八门。
  • 破坏某些不能被修改的数据。

封装的好处:

  • 修改数据的代码集中在一个类中,通过搜索函数名即可得知哪里修改了数据。
  • 保护那些不可以被修改的数据。

意义二:降低调用方心智成本

除此之外,类仅仅通过有限的方法暴露必要的操作,也能提高类的易用性。如果我们把类属性都暴露给类的调用者,调用者想要正确地操作这些属性,就势必要对业务细节有足够的了解。而这对于调用者来说也是一种负担。相反,如果我们将属性封装起来,暴露少许的几个必要的方法给调用者使用,调用者就不需要了解太多背后的业务细节,用错的概率就减少很多。这就好比,如果一个冰箱有很多按钮,你就要研究很长时间,还不一定能操作正确。相反,如果只有几个必要的按钮,比如开、停、调节温度,你一眼就能知道该如何来操作,而且操作出错的概率也会降低很多。

抽象

抽象隐藏了方法的具体实现,从更高的维度去定义一组对象的共同特征,一般用接口实现抽象。

意义一:降低代码的耦合性

面向接口编程类似于面向“协议”编程,代码是松散非耦合的。

意义二:提高可测试性

Mock 工具都是依赖接口生成 Mock 类的,没有 Mock 的话,测试业务代码可谓寸步难行。

滥用的后果:增加心智成本,影响写代码心情

有些人在实现代码的时候,无论如何也要定义接口,导致项目里面一大堆接口,看吐了。对某个类的改动常常意味着需要同步修改其接口,增加无谓的工作量。

说实在的,如果几乎用不到上述的两个接口的优势,那么是没必要定义接口的。

继承

意义:复用代码

滥用的后果:过度使用继承,继承层次过深过复杂,就会导致代码可读性、可维护性变差。

继承能不用就不用。

继承大多可以用组合模式替代、用单例模式替代。

如果非要用的话,答应我,最多一层继承。

多态

多态指的是:子类可以替换父类,实现可以替代接口。

多态一般和抽象结合使用。


原文链接:OOP的四大特性的意义与缺陷

Buy me a coffee~
室长 支付宝支付宝
室长 微信微信
0%