面向对象设计原则(一)
一般来说OO设计大致分为类设计原则、包设计原则和包之间的耦合性原则。
下面罗列一些OO设计的原则,以后分开讲
类设计原则
1.单一职责原则(SRP)
一个类只做一件事,在设计中应该力保只有一个原因引起类变化。不要设计胖接口。
2.开放——封闭原则(OCP)
当需求变化的时候我们应该尽可能不去修改类,而是对其扩展。而这些类在设计之处也应该保证其是支持OCP的。
3.Liskov替换原则(LSP)
子类必须能够替换其基类。所有派生类的行为功能必须和客户程序对其基类所期望的保持一致,也就是要确保IS-A关系的关系。
4.依赖倒置原则(DIP)
很重要。抽象应该是被依赖的,实现细节应该依赖抽象。两者缺一不可,也不应该有孤立的实现细节。这是从结构化设计总结出来的,因为结构化设计的思想会导致实现细节依赖于抽象。
5.接口隔离原则(ISP)
对于客户来说,接口中所有的方法都应该是有用的。如果不能做到,就需要隔离接口。
包设计原则
1.重用发布等价原则(REP)
重用的粒度应该就是发布的粒度。重用主要是从用户的观点来看的。对用户来说,使用某个发布单位(组件,类,类群等),如果作者因为某种原因对其作了修改而发布了一个新的版本,用户会期望在升级为新版本之后,不会影响到原系统的正常运作。也就是说,对于一个可重用(能供其它用户或系统使用)的元素(组件,类,类群等),作者应该承诺新版本能够兼容旧版本。否则,用户将拒绝使用该元素。
2.共同重用原则(CRP)
一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。在大多数情况下,一个可重用抽象需要多个类来表达,该原则规定这些类应该在一个包中,而属于不同抽象的类不应该在一个包中。
3.共同封闭原则(CCP)
包中的所用类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对其他的包不造成任何影响。REP 和 CRP 关注的都是重用性, CCP 关注的是可维护性。对大多数的应用来说,可维护性的重要性是超过可重用性的。一个变化(包括需求上的,设计上的等等)可能会引起多个类的更改, CCP 要求我们把这些类放在一个包中,同时把那些不受影响的类放到其他的包中,因此一个包只有一个引起变化的原因,一个变化只对一个包产生影响,这样大大减少了重新发布的次数和重新发布对其他包的影响,从而提高了软件的可维护性。
包之间的耦合性原则
9.无环依赖原则(ADP)
类图不应该是环形的
10.稳定依赖原则(SDP)
依赖应该朝着稳定方向的。结合依赖倒置原则来说就是接口应该是稳定的。设计了一个不稳定的包,期望它能随变化容易地更改,可当它被一个稳定的包依赖后,它就再也不会易于更改了,这就使软件难于修改和变化。
11.稳定抽象原则(SAP)
包的抽象粒度应该和其稳定粒度是一致的。一个系统的高层构架和设计决策应该被放进稳定的包中,因为这些构架决策不应该经常改变,然而稳定包的不易更改的特点会使这些架构决策不灵活,显然只用稳定性来度量一个包是不够的,这些稳定的包也应该是抽象的。它应该包含抽象类,系统通过在其他包中实现该稳定包中的抽象类来进行扩展,而该稳定包无需修改,从而在保持稳定的同时也不失灵活性。
浙公网安备 33010602011771号