面向对象编程的几个原则

来源:互联网 发布:手机淘宝怎么看旺旺id 编辑:程序博客网 时间:2024/04/29 09:26

面向对象编程时一般都要注意几个原则:

1、开闭法则(OCP):设计的类要对修改关闭,对扩展开放。设计一个模块的时候尽量做到在这个模块在不被修改的情况下扩展其功能,也就是说在不改变源代码的情况下,改变这个模块的功能。

如何做到开闭法则呢?

        解决这个问题的关键在于抽象化。在面向对象的程序设计语言如C++,可以设计一个抽象层,这个抽象层是一个接口或是一个抽象类。在这个抽象层中,设计师尽可能的将所有可能遇到的扩展做一个定义,这样就不会再修改抽象层,这就是“闭”;同时,从抽象层派生的实现类可以改变系统的行为,这就是“开”的体现。

2、里氏代换法则(LSP):派生类可以用其基类代替,在基类使用的地方可以用派生类代替。LSP是OCP的补充,继承是解决OCP的关键,而判断一个继承质量是否高效,就要用LSP判断。基类与子类的继承关系就是抽象化的具体体现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

3、依赖反转法则(DIP):客户端依赖抽象而不依赖具体。要依赖于抽象,不要依赖于实现。看上去依赖倒转原则与“开-闭”原则有很大的相似指出,实际上,它们之间的关系是目标和手段之间的关系。“开-闭”原则是目标,而达到这一目标的手段是依赖倒转原则。

4、合成/聚合复用原则(CARP)
要尽量使用合成/聚合,而不是集成关系达到复用的目的。显然,合成/聚合复用原则使与里氏代换原则相辅相成的,两者又都是对实现“开-闭”原则具体步骤的规范。前者要求设计师首先考虑合成/聚合关系,后者要求在使用集成关系时,必须确定这个关系是符合一定条件的。

5、迪米特法则(LoD)
一个软件实体应当与尽可能少的其他实体发生相互作用。当一个系统面临功能扩展的时候,其中会有一些模块,它们需要修改的压力比其他一些模块要大。最后的结果可能是这些模块需要修改或者不需要修改。但是不论是哪种情况,如果这些模块是相对孤立的,那么它们就不会将修改的压力传递给其他的模块。

6、接口隔离原则(ISP)
应当为客户端提供尽可能小的单独的接口,而不要提供大的总接口。显然,接口隔离原则与广义的迪米特法则都是对一个软件实体与其他的软件实体的通信限制。广义的迪米特法则要求尽可能的限制通信的宽度和深度。接口隔离原则所限制的是通信的宽度,也就是说,通信应当尽可能地窄。显然,遵守接口隔离原则与迪米特法则,会使一个软件系统在功能扩展地过程种,不会将修改地压力传递到其他的对象。

 

原创粉丝点击