面向对象的设计(OOD)原则了解一下

简介: 面向对象的设计(OOD)原则了解一下

对于一个研发工程师,一定要有一个好的设计思维。

熟悉面向对象的原则,能有利于设计,又有利于测试。如果不成熟的设计,也能实现一些理想的功能,但是对于异常情况的模拟测试很难实现,不能实现产品化。


单一职责(SRP)


定义


每个类或者模块都应该有一个单一职责,并且该职责应由这个类或模块完全封装起来。


职责的变化:

职责的界定会根据类的试用场景界定,当场景变化时需要对类职责进行重新划分。也可以说职责是对于需求的满足,职责层次性来源于需求层次性。


如果一个类承担过多的职责,就等于将这些职责都耦合在一起,任何一个职责的变化都可能造成一个类的变化,也可能引起其他职责的变化。这种耦合导致系统的脆弱性。


软件工程中耦合(Coupling)表示两个子系统(或类)之间的关联程度,当一个子系统(或类)发生变化时对另一个子系统(或类)的影响很小,则称它们是松散耦合的;反之,如果变化的影响很大时,则称它们是紧密耦合的。


开闭原则(OCP)


定义


软件中的实体(类、模板、函数等)应该对扩展是开放的,但是对于修改是封闭的,即开放-封闭原则。

为了使我们的代码有更高的兼容性?(不知道用的词对不对)就是新增一个新的需求的时候,我们不用对已编写的代码进行修改,只用新增一部分代码就可以满足新的需求。


OCP实现的关键在于“抽象”,面向抽象编程。

我们将可变化的点进行“抽象”,“抽象”的变化用“具体实现”来体现,这样就表现的是对“抽象”封闭,对“实现”开放。

修改(How to do)

扩展(What to do)

严格的符合OCP是非常困难的,对于一些之前预测好的变化没有发生过,就称为过度设计。

我们只对当前业务频繁变化的点进行抽象就行,不能抽象所有业务。


里氏替换原则(LSP)


定义

子类必须能完全替换父类,在使用者层次上,子类不能有多于父类的职责。


子类一定不能对父类的行为进行限制


基于正方形是特殊矩形假设将正方形定位为矩形的子类的行为就违反了以上原则,正方形设置长和宽行为限制了矩形的行为设置长和宽的行为(正方形长、宽必须相等)


接口隔离原则 (ISP)


定义


ISP 承认存在一些对象,他们确实不需要内聚的接口,但是 ISP 建议客户程序不应该看到他们作为一个单一的类存在。相反,客户程序看到的应该是多个具有内聚接口的抽象基类。


多个特定客户端接口要好于一个宽泛用途的接口。

一个对外提供的接口尽量只提供一个职责。


依赖翻转原则(DIP)


定义


高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口

抽象接口不应该依赖于具体实现。而具体实现则应该依赖于抽象接口


翻转体现在两个点:

1.翻转上下级严格的关系:

上层模块不用依赖于低层模块,也可以依赖于上层抽象接口。

2.翻转接口所有权和定义权:

是上层根据具体的业务定义接口,低层根据业务实现接口定义。而不是低层现有能力抽象为接口供低层使用。从业务驱动的角度这种方式更加合理。


相关文章
|
8月前
|
设计模式 算法 Java
深入理解面向对象设计的深层原则与思维
软件设计原则是指在软件开发过程中,通过一系列指导性的原则来指导设计决策和编码实践。这些原则旨在提高软件系统的质量,使其具有可维护性、可扩展性、可重用性和可测试性。几个重要性:可维护性、可扩展性、可重用性、可测试性和降低系统复杂度。软件设计原则是提高软件系统质量和可维护性的基石。遵循这些原则可以使得代码更加清晰、灵活和可靠,提高开发效率和软件质量,减少后期维护成本。同时,它们也为团队合作和团队成员共同理解代码提供了共同的规范和指导。
163 2
深入理解面向对象设计的深层原则与思维
|
设计模式 SQL 开发框架
【Java设计模式 面向对象设计思想】八 面向对象设计思想小结
【Java设计模式 面向对象设计思想】八 面向对象设计思想小结
85 0
|
程序员 测试技术
面向对象设计五个基本原则
只有聪明人才能看见的简介~( ̄▽ ̄~)~
112 0
面向对象的设计的7大原则
面向对象的设计的7大原则
240 0
|
设计模式
【设计模式】软件设计七大原则 ( 迪米特原则 | 代码示例 )
【设计模式】软件设计七大原则 ( 迪米特原则 | 代码示例 )
131 0
|
Java
简述一下面向对象的”六原则一法则”
单一职责原则:一个类只做它该做的事情。(单一职责原则想表达的就是”高内聚”,写代码最终极的原则只有六个字”高内聚、低耦合”,就如同葵花宝典或辟邪剑谱的中心思想就八个字”欲练此功必先自宫”,所谓的高内聚就是一个代码模块只完成一项功能,在面向对象中,如果只让一个类完成它该做的事,而不涉及与它无关的领域就是践行了高内聚的原则,这个类就只有单一职责。
1108 0
|
编解码 Java 前端开发
面向对象七大原则
1. 单一职责原则(Single Responsibility Principle) 每一个类应该专注于做一件事情。2. 里氏替换原则(Liskov Substitution Principle) 超类存在的地方,子类是可以替换的。
871 0

热门文章

最新文章