面向对象设计7大原则-中英双语(表格)-程序员必背
- 软件的可维护性(Maintainability)和可复用性(Reusability)是衡量软件质量的两个重要属性;
- 可维护性:软件能够被理解、改正、适应、扩展的难易程度;
- 可复用性:软件能够被重复使用的难易程度;
- 面向对象设计的目标在于支持可维护性复用,一方面需要实现设计方案或者源代码的复用,另一方面需要确保系统能够易于扩展和修改,具有良好的可维护性;
- 面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含在很多设计模式中,它们是从许多设计方案中总结出的指导性原则;
- 面向对象设计原则是学习设计模式的基础,每一个设计模式都符合一个或者多个面向对象设计原则,面向对象设计原则是用于评价一个设计模式的使用效果的重要指标;
设计原则名称 |
定义Definition |
使用频率 |
单一职责原则SRP Single Responsibility Principle |
定义一:一个对象应该只包含单一的职责,而且该职责被完整的封装到一个类中;Every object should have a single responsibility,and that responsibility should be entirely encapsulated by the class; 定义二:就一个类而言,应该只有一个引起它变化的原因; There should never be more than one reason for a class to change; |
★★★★ |
开闭原则OCP Open Closed Principe |
软件实体应该对扩展开放,对修改关闭; Software entities should be open for extension,but closed for modification; 在不修改源代码的情况下,实现功能扩展; |
★★★★★ |
里氏替换原则LSP Liskov Substitution Principle |
所有引用基类的地方必须能够透明的使用其子类对象; Functions that use pointer or references to base classes must be able to use objects of derived classes without knowing it; 引用基类(抽象类、接口)使程序更容易扩展; 芭芭拉·利斯科夫(Barbara Liskov),美国计算机科学家,2008年图灵奖得主,2004年约翰·冯诺依曼奖得主。 |
★★★★★ |
依赖倒置原则DIP Dependency Inversion Principle |
高层模块不应依赖低层模块,他们都应该依赖抽象;抽象不应该依赖细节,细节应该依赖抽象; High level modules should not depend upon low level modules,both should depend upon abstractions;Abstractions should not depend upon details,details should depend upon abstractions; 针对抽象进行编程,而将具体类的对象通过依赖注入的方式注入到所依赖的对象; |
★★★★★ |
接口隔离原则ISP Interface Separation Principle |
客户端不应该依赖那些它不需要的接口; Clients should not be forced to depend upon interfaces that they do not use; 用小的专用接口替换大的通用接口; |
★★ |
合成复用原则CRP Composite Reuse Principle |
优先使用对象组合,而不是继承,来达到目的; Favor composition of objects over inheritance as a reuse mechanism; 通过组合或聚合对已有对象进行的复用称为“黑箱”复用,相对继承关系而言,耦合度相对较低; |
★★★★ |
迪米特法则LOD Law of Demeter |
每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位; Each unit should have only limited knowledge about other units:only units “closed” related to current unit; 迪米特法则来自1987年美国东北大学一个“Demeter”研究项目;迪米特法则也叫最少知识原则(Least Knowledge Principle,LKP); |
★★★ |