“开-闭”原则 (Open-Closed principle, OCP)
一个软件实体应当对扩展开放,对修改关闭。
Software entities should be open for extension, but closed for modification.
在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。
“可变性的封装原则”从工程的角度讲解了如何实现“开-闭”原则。
“可变性的封装原则”意味着两点:
1.一种可变性不应当散落在代码的很多角落里,而应当被封装到一个对象里面。继承应当被看做是封装变化的方法,而不应当被认为是从一般的对象生成特殊的对象方法。
2.一种可变性不应当与另一种可变性混合在一起。所有的类图的继承结构一般不会超过两层,不然就意味着将两种不同的可变性混合在一起。
“开-闭”原则与其他原则的关系:
里氏代换原则是,任何基类可以出现的地方,子类一定可以出现。
里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体体现,所以里氏代换原则是对实现抽象化的具体步骤的规范。违反里氏代换原则的,也违背“开-闭”原则,反之不一定成立。
依赖倒转原则是,要依赖于抽象,不要依赖于实现。
“开-闭”原则是目标,依赖倒转原则是手段。
合成/聚合复用原则是,要尽量使用合成/聚合,而不是继承关系达到复用的目的。
合成/聚合复用原则与里氏代换原则相辅相成,两者都是实现“开-闭”原则的具体步骤的规范。
迪米特法则是,一个软件实体应当与尽可能少的其他实体发生相互作用。
一个遵守迪米特原则设计出来的系统在功能需要扩展时,会相对更容易地做到对修改的关闭。
接口隔离原则是,应当为客户端提供尽可能小的单独的接口,而不是提供大的总接口。
接口隔离原则与广义的迪米特法则都是对一个软件实体与其他的软件实体的通信的限制。遵循接口隔离原则,会使一个软件系统在功能扩展的过程当中,不会将修改的压力传递到其他的对象。
一个重构方法的讨论
“将条件转移语句改写成为多态性”是一条广为流传的代码重构做法。
这一做法本身并不能保证“开-闭”原则,应当以“开-闭”原则判断是否需要改写成多态。条件转移并不是错误,如果需要,完全可以选择使用条件转移。
如果一个条件转移语句确实封装了某种商务逻辑的可变性,那么将此种可变性封装起来就符合“开-闭”原则设计思想了。如果一个条件转移语句没有涉及重要的商务逻辑,或者不会随着时间的变化而变化,也不意味着任何的可扩展性,那么它就没有涉及任何有意义的可变性。这时候将这个条件转移语句改写成多态性就是一种没有意义的浪费。
抽象类应当拥有尽可能多的共同代码
在一个继承的等级结构中,共同的代码应当尽量向等级结构的上方移动。把重复的代码从子类里面移动到超类里面,可以提高代码的复用率。在代码发生改变时,设计师之需要修改一个地方。
抽象类应当拥有尽可能少的数据
与代码的移动方向相反,数据的移动方向是从抽象类到具体类,向等级结构的下方移动。一个对象的数据不论是否使用都会占用资源,所以应当放到等级结构的低端。
什么时候才应当使用继承复用
1.子类是超类的一个特殊种类,而不是超类的一个角色,Is-A才符合继承关系。
2.永远不会出现需要将子类换成另一个类的子类的情况。
3.子类具有扩展超类的责任,而不是具有置换掉(Override)和注销掉(Nullify)超类的责任。
4.只有在分类学角度上有意义时,才可以使用继承,不要从工具类继承。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/moon1128/archive/2005/01/07/243968.aspx
分享到:
相关推荐
总结来说,软件设计原则在嵌入式领域的应用,要求开发者在设计和实现时考虑系统的可维护性、可扩展性和复用性。通过合理应用开闭原则、单一职责原则、模块化、依赖倒置原则、设计模式以及代码结构的继承和抽象,可以...
【软件设计原则详解】 在软件开发领域,遵循一系列设计原则对于构建高质量、可维护和易于扩展的系统至关重要。以下是一些关键的软件设计原则,它们不仅适用于编程,还能应用于更广泛的生产活动和生活。 1. **Don’...
软件设计原则是指导开发者构建高质量、可维护和可扩展软件的核心概念。这些原则不仅提高了代码的灵活性,还降低了长期维护的成本。以下是一些主要的软件设计原则及其详细解释: 1. **面向对象的设计原则**: - 可...
软件设计的七大原则是软件设计的精髓所在,这七大原则分别是开闭原则、里氏代换原则、依赖倒置原则、接口隔离原则、合成/聚合复用原则、迪米特法则和抽象类原则。 一、 开闭原则(OCP) 开闭原则是指一个软件实体...
#### 第三章:软件设计原则 **设计原则的重要性:** 良好的设计原则对于构建高质量、可维护的软件至关重要。它们帮助开发者: - **优化软件架构:**确保系统结构合理,易于理解和扩展。 - **提高代码质量:**促进...
为了达到这样的设计目标,业界总结了一系列设计原则,这些原则被统称为“软件设计6原则”,它们分别是:单一责任原则(Single Responsibility Principle,简称SRP)、开放封闭原则(Open/Closed Principle,简称OCP...
软件开发设计原则 软件开发设计原则是指在软件开发过程中所遵循的一些基本原则,这些原则可以帮助开发者编写出更加灵活、可维护、可扩展的代码。这些原则包括单一职责原则、开放封闭原则、里氏替换原则、最少知识...
数据采集系统设计原则与基本方法 数据采集系统设计原则与基本方法是数据采集系统设计的基础,掌握这些原则和方法是设计高质量的数据采集系统的关键。本文将对数据采集系统设计的基本原则和方法进行详细的解释。 一...
而"界面设计原则之二_软件UI设计联盟_天无河_设计 UI CG 图标 标志.mht"、"界面设计原则-阿宇设计演绎.mht"以及"Windows界面设计标准 - The Zone of EIVS.mht"等资料,则提供了更深入的设计实例和具体平台的规范指南...
软件设计原则-面向对象设计七大原则.zip 面向对象和C语言完全不是一种思考问题的方式,面向对象是种哲学思想,只有明白了其核心思想,才能以不变应万变 只有吃透面向对象的七大设计原则,比如:依赖倒置原则,迪米特法则等...
软件设计的七大原则 软件设计的七大原则是软件设计的基本原则,旨在指导软件模块的开发和扩展。这些原则包括开闭原则、里氏代换原则、依赖倒置原则、接口隔离原则、合成/聚合复用原则、迪米特法则和抽象类原则。...
软件体系结构七大设计原则是构建高质量软件系统的基础,它们分别是:单一职责原则、开闭原则、里氏代换原则、依赖倒转原则、接口隔离原则、迪米特法则和合成聚合原则。这些原则旨在提高软件的可维护性、可扩展性和可...
### 软件工程中的软件设计原则与设计模式 #### 第一章:软件设计原则与设计模式简介 **软件设计原则介绍** 软件设计原则是指在软件开发过程中遵循的一系列基本规则和准则,这些原则旨在帮助开发者设计出结构良好...
(一)审美上令人愉悦:软件界面设计应该考虑到审美因素,通过图形设计原则制造感染力,提供有意义的对比,创建分组,对其界面元素和分组,提供 3D 外观等。 (二)清晰准确、易理解的语言文字:软件界面设计应该...
该包下的所有demo都是一个个的软件设计原则的案例实现 包含有: 1、开闭原则 2、里氏代换原则 3、依赖倒转原则 4、接口隔离原则 5、迪米特法则 6、合成复用原则 使用了一个个的demo案例,以通俗易懂的生活...
首先,软件设计原则是指导我们进行高效、可维护和扩展性良好的软件开发的基石。这些原则包括单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)和依赖倒置原则(DIP)。这些原则可以...
这个压缩包文件包含了多个与软件测试相关的学习资源,涵盖了测试培训、测试用例设计、测试用例设计原则和模板、软件测试报告编写、基本的软件测试方法以及测试管理等多个方面,旨在帮助新入职的测试工程师或希望提升...
### 软件工程中的软件设计原则与模式 #### 第一章:软件设计原则的重要性 在软件工程领域,软件设计原则对于构建高质量、高效率的软件系统至关重要。本章节将重点介绍软件设计原则的重要意义,并深入探讨几种核心...