在做面向对象程序设计时,我们通常会在为如何设计一个类而烦恼。这里简单介绍面向对象编程的几个原则,根据这些原则去设计类以及类与类之间的关系,从而使得程序满足高可维护、可复用等条件。
面向对象编程与面向过程编程的理解:(纯属个人理解)
面向过程编程:好比做一件事,自始至终都是一个人在做。如:研发一个软件开发项目,从业务调研,UI设计,前端设计,后台设计等等都是由一个人完成,各部分的衔接非常紧密。
面向对象编程:也是做一件事,但是这件事是由一个团队完成,每个人负责不同的部分,若业务需要更改,那么只需调整相关部分即可。
面向过程编程 好比是在 面对对象编程 中仅使用一个对象来完成所有业务的编程。
一、单一职责原则:
在设计一个类,要充分考虑到这个类拥有特征(属性)和功能(方法)。当然,也不在这个类中添加额外的方法,否则会出现对象“权责不明”的情况,对于程序开发、维护都十分不利。
如:设计一个模型User,该包含name和pwd属性,以及对应的get和set方法;不要添加otherMethod这种与对象无关的方法,使得程序的可复用性和可维护性偏弱。
优点:使面向对象程序设计结构清晰,有利于提高开发效率、减小维护成本。
二、开放 - 封闭原则:
开放:对程序的扩展是开放的。可以创建自己的类(这些类可以继承已有的类或实现已有的接口)来完成所需的业务逻辑;
封闭:对程序的更改是封闭的。在做开发时,尽可能的不去的更改已有的类,如在使用框架时,不能更改框架的源码(框架重构除外)。
优点:使程序可扩展性强、维护成本减小等。
三、依赖倒置原则:
在做MVC模式开发中,通常来说,Controller层会直接依赖于Service层,Service层直接依赖于Dao层,这种编程方式称为“依赖实现编程”。这种编程方式有一个很大的缺点,那就是耦合性太强。
将MVC各层进行抽象,Controller抽象层与Service抽象层建立关系,Service抽象层与Dao抽象层建立关系,而具体的MVC各层之间并无直接联系,这种编程方式称为“依赖抽象编程”。这种编程方式解决了“依赖实现编程”强耦合性的缺点。
从“依赖实现编程”到“依赖抽象编程”的转变,既是 依赖倒置原则。
优点:遵循了开放 - 封闭原则;减小了高层与底层之间的耦合度。
四、里氏代换原则:
简单理解就是面向对象编程中的继承。用《大话设计模式》中的一句话说,就是:子类型必须能够替换掉它们的父类型。
五、迪米特法则:
如果两个类没有直接联系,那么它们之间没有必要发生直接的相互作用。如果非要它们之间发生某种联系,则可以通过第三个类来建立关系。
优点:避免不相关的类之间的耦合。
六、合成/聚合复用原则:
尽量使用合成/聚合,尽量不要使用类继承。聚合,集体与个体的关系,好比人群是由一个一个的人聚在一起形成的;组合,部分与个体的关系,好比一个人是由头、手、脚等各部分组成的。
优点:保持了每个类的封装性;类和类继承层次会保持较小规模。
结语:单一职责原则、开放 - 封闭原则、依赖倒置原则是最为常用的原则,做面向对象程序设计时尽量遵循这几大原则。
(本人为初学者,技术尚浅,若有写错的地方,还望赐教。)