`

软件设计之扩展开放,修改关闭原则( 转)

 
阅读更多


 

Software entities (classes, modules, function, etc.) should be open for extension, but closed for modification.

软件实体(模块,类,方法等)应该对扩展开放,对修改关闭。


开闭原则(OCP:Open-Closed Principle)是指在进行面向对象设计(OOD:Object Oriented Design)中,设计类或其他程序单位时,应该遵循:- 对扩展开放(open)对修改关闭(closed)的设计原则。

开闭原则是判断面向对象设计是否正确的最基本的原理之一。

根据开闭原则,在设计一个软件系统模块(类,方法)的时候,应该可以在不修改原有的模块(修改关闭)的基础上,能扩展其功能(扩展开放)。
- 扩展开放:某模块的功能是可扩展的,则该模块是扩展开放的。软件系统的功能上的可扩展性要求模块是扩展开放的。
- 修改关闭:某模块被其他模块调用,如果该模块的源代码不允许修改,则该模块修改关闭的。软件系统的功能上的稳定性,持续性要求是修改关闭的。

这也是系统设计需要遵循开闭原则的原因
1)稳定性。开闭原则要求扩展功能不修改原来的代码,这可以让软件系统在变化中保持稳定。
2)扩展性。开闭原则要求对扩展开放,通过扩展提供新的或改变原有的功能,让软件系统具有灵活的可扩展性。
遵循开闭原则的系统设计,可以让软件系统可复用,并且易于维护。


开闭原则的实现方法
为了满足开闭原则的 对修改关闭(closed for modification) 原则以及扩展开放(open for extension) 原则,应该对软件系统中的不变的部分加以抽象,在面向对象的设计中,
- 可以把这些不变的部分加以抽象成不变的接口,这些不变的接口可以应对未来的扩展;
- 接口的最小功能设计原则。根据这个原则,原有的接口要么可以应对未来的扩展;不足的部分可以通过定义新的接口来实现;
- 模块之间的调用通过抽象接口进行,这样即使实现层发生变化,也无需修改调用方的代码。

接口可以被复用,但接口的实现却不一定能被复用。接口是稳定的,关闭的,但接口的实现是可变的,开放的。可以通过对接口的不同实现以及类的继承行为等为系统增加新的或改变系统原来的功能,实现软件系统的柔软扩展。

简单地说,软件系统是否有良好的接口(抽象)设计是判断软件系统是否满足开闭原则的一种重要的判断基准。现在多把开闭原则等同于面向接口的软件设计。

开闭原则的相对性
软件系统的构建是一个需要不断重构的过程,在这个过程中,模块的功能抽象,模块与模块间的关系,都不会从一开始就非常清晰明了,所以构建100%满足开闭原则的软件系统是相当困难的,这就是开闭原则的相对性。但在设计过程中,通过对模块功能的抽象(接口定义),模块之间的关系的抽象(通过接口调用),抽象与实现的分离(面向接口的程序设计)等,可以尽量接近满足开闭原则。
  • 大小: 88.6 KB
分享到:
评论

相关推荐

    软件设计的七大原则.doc

    开闭原则是指一个软件实体应当对扩展开放,对修改关闭。客户的需求是不稳定的,通过扩展已有的软件系统而不是通过修改软件系统来满足客户的需求,这样的软件系统就满足开-闭原则,即软件系统要有一定的灵活性和适应...

    软件设计6原则

    开放封闭原则强调软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。这意味着在设计和实现一个系统时,应该允许其在不修改现有代码的基础上进行扩展。这有利于系统保持稳定,同时又具有足够的灵活性来适应...

    设计模式之里氏转换原则

    - 开闭原则(Open-Closed Principle, OCP):类应该对扩展开放,对修改关闭。LSP是OCP的一个具体体现,通过合理的继承和抽象,可以在不修改原有代码的基础上增加新功能。 - 接口隔离原则(Interface Segregation ...

    软件开发设计原则软件开发设计原则

    - 一个软件实体(类、模块、函数等)应该是对扩展开放,对修改关闭。这意味着当需要新增功能时,应尽量通过扩展已有代码,而不是修改已有的代码来实现。 3. **里氏替换原则(Liskov Substitution Principle, LSP)...

    软件设计的七大原则

    开闭原则是指一个软件实体应当对扩展开放,对修改关闭。客户的需求是不稳定的,通过扩展已有的软件系统而不是通过修改软件系统来满足客户的需求,这样的软件系统就满足开-闭原则,即软件系统要有一定的灵活性和适应...

    设计模式——6大软件设计原则(demo案例实现,附带解析,快速掌握软件设计原则的精髓)

    对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。 该包下的所有demo都是一个个的软件设计原则的案例实现 包含有...

    软件工程与软件系统设计原则.pptx

    - **开闭原则(Open/Closed Principle):**软件实体应该是对扩展开放的,但对修改关闭。 - **里氏替换原则(Liskov Substitution Principle):**子类应该能够替换它们的基类。 - **接口隔离原则(Interface ...

    软件体系结构七大设计原则

    **开闭原则**是说软件实体(如类、模块、函数等)应该对扩展开放,对修改关闭。这意味着在新增功能时,不应修改已有的代码,而是通过添加新的代码来实现。开闭原则可以通过引入抽象来实现,使得模块间的调用不直接...

    软件设计模式(java版)习题答案.pdf

    1. 开闭原则(OCP):它要求软件实体应当对扩展开放,对修改关闭。 2. 里氏替换原则(LSP):它要求继承必须确保超类所拥有的性质在子类中仍然成立。 3. 依赖倒置原则(DIP):它要求软件设计要面向接口编程,不要...

    软件设计师之道ppt

    “开闭原则”(OCP),即软件实体应对扩展开放,对修改关闭,保证系统的灵活性;“里氏替换原则”(LSP),子类型必须能够替换其基类型而不影响程序的正确性;以及“依赖倒置原则”(DIP)和“接口隔离原则”(ISP)...

    软件设计与体系结构练习大连海事大学分享.pdf

    开放-封闭原则是软件设计的基本原则之一,它指出软件实体(类、模块、函数等)应当对扩展开放,对修改关闭。 里氏代换原则是软件设计的基本原则之一,它指出子类可以扩展父类的功能,而不改变父类的接口。 依赖...

    16丨理论二:如何做到“对扩展开放、修改关闭”?扩展和修改各指什么?1

    开闭原则(Open Closed Principle,OCP)是面向对象设计中的一个重要原则,它指出软件实体(如模块、类、函数等)应当对扩展开放,对修改关闭。这意味着在不改变原有代码的基础上,可以通过增加新代码来实现功能的...

    第二十六讲:基础一开放封闭原则

    在软件设计领域,开放封闭原则(Open-Closed Principle,OCP)是面向对象设计的五大原则之一,由Bertrand Meyer在1988年提出。这一原则旨在指导我们如何构建可扩展且易于维护的软件系统。简单来说,OCP 告诉我们,...

    OOD设计基本原则整理.doc

    开-闭原则是 OOD 设计的核心原则之一,该原则强调一个软件实体应当对扩展开放,对修改关闭。也就是说,在设计一个软件实体的时候,应当使这个软件实体可以在不修改或少修改的前提下通过扩展来实现变化。 该原则的...

    设计模式6大原则.zip

    **开闭原则(OCP)**:软件实体(如类、模块、函数等)应对扩展开放,对修改关闭。这意味着当需求变更时,我们应尽量通过扩展已有代码来实现,而不是修改已有的代码,这样可以保护原有代码不被破坏。 **里氏替换...

    软件工程中的软件设计原则与模式.pptx

    - **开放封闭原则(Open/Closed Principle, OCP)**:软件实体应当对扩展开放,对修改关闭。 - **里氏替换原则(Liskov Substitution Principle, LSP)**:子类型必须能够替换掉它们的基类型。 - **依赖倒置原则...

    基于Java设计模式的软件架构设计.zip

    开闭原则对扩展开放,对修改关闭。 依赖倒置原则高层模块不应依赖底层模块,二者应依赖其抽象。 单一职责原则一个类只负责一项职责。 接口隔离原则使用多个专门的接口,不使用单一的总接口。

    软件工程与软件系统可扩展性评估.pptx

    - **开闭原则**:软件实体(如类、模块、函数等)应该对扩展开放,对修改关闭。 - **里氏替换原则**:子类可以替换它们的基类,并且不影响程序的正确性。 **工厂模式**: - **特点**:提供了一种创建对象的最佳方式...

Global site tag (gtag.js) - Google Analytics