面向对象设计原则

来源:互联网 发布:linux xargs cat命令 编辑:程序博客网 时间:2024/06/16 22:33

在学习设计模式之前我们先来了解面向对象设计的一些基本原则,每一种设计模式都符合其中一种或者是多种原则,通过使用这些原则来提高软件的可维护性和可复用性。

一般来说可维护性低的软件设计,通常都由以下几个原因造成:

(1)  过于僵硬:很难在原有的系统中添加新的功能,添加新的功能将会涉及到多个模块,造成系统改动过大。

(2)  过于脆弱:与过于僵硬同时存在一旦修改系统某个功能,可能会导致在看上去没有多大关联的另一个地方发生故障。

(3)  复用率低:复用是指一个软件的组成部分可以在同一个项目的不同地方或者在不同的项目中重复使用,而复用率低的一个表现就是程序员重复编写一些已有的程序代码。

(4)  黏度过高:对系统进行改动时,有时可以保存系统原有的设计意图与设计框架,有时可以破坏原有的设计和框架。前者对系统的扩展有利,应该尽量按照前者来改动。如果说后者比前者更容易则称之为黏度过高,黏度过高将导致程序员使用错误的代码维护方案,原因会在后面解释。

那么一个好的系统设计应该是怎样的呢,我觉得应该具备以下三点

(1)  可扩展性:容易将新的功能添加到原有的系统中,与“过于僵硬”相对应。

(2)  灵活性:代码在被修改时不会波及到很多的现有模块,与“过于脆弱”相对应。

(3)  可插入性:能够很方便的将一个类抽取出去,同时将另一个有相同接口的类添加进来,与“黏度过高”相对应。

现在了解一下这些原则

单一职责原则:在系统中一个类只负责一个功能领域中的相应职责,也就是说仅有一个引起它变化的原因,说的通俗点就是一个类不能太累了,它只要做一件事就可以了。

开闭原则:软件实体应该对扩展开放,对修改关闭。当软件的需求改变时,我们应该保证系统原有的设计和框架是稳定的,那样我们在对系统进行扩展时就不用修改原代码。

李氏代换原则:能够用基类(父类)的地方都能用子类,把父类设计为抽象类或接口,子类继承或实现父类,新增功能时不用修改原有子类的代码,就只要添加新的子类即可。

依赖倒转原则:要针对接口编程,不要针对实现编程。一个具体类里的方法应当只有其父类里的方法,不要再有新的方法。

接口隔离原则:接口不要太大,只要使用接口的客户端知道与之相关的方法即可。如果接口里方法过多,那么实现类必须声明所有方法,而这里面有些方法可能不是我要的。

合成复用原则:尽量使用对象组合,而不是继承来达到复用的目的。

迪米特法则:不要跟”陌生人“说话,一个模块被修改时要尽量少的影响到其它模块。