设计模式-OOD的设计原则(3)-"依赖倒转原则"

软件设计 OOA和OOD的作用及说明 “Object Oriented Analyzing 面向对象分析   Object Oriented Design 面向对象设计   Object Oriented Programming 面向对象编程(或者有的就叫面向对象程序设计,我理解为编码实现)” 这里只讲了OOA和OOD,OOP的东西稍后再找。 1.OOA OOA的主要工作是软件的需求,对要解决的问题进行分 阅读详情
  "开-闭"原则是我们OOD的目标,达到这一目标的主要机制就是"依赖倒转原则".这个原则的内容是:要依赖于抽象,不要依赖于具体.
      对于抽象层次来说,它是一个系统的本质的概括,是系统的商务逻辑和宏观的,战略性的决定,是必然性的体现;具体的层次则是与实现有关的算法和逻辑,一些战术性的决定,带有相当大的偶然性.传统的过程性系统设计办法倾向于使高层次的模块依赖于低层次的模块;抽象层次依赖于具体层次.这实际上就是微观决定宏观,战术决定战略,偶然决定必然.依赖倒转原则就是要把这种错误的依赖关系倒转过来.
      许多的建构设计模型,例如COM,CORBA,JavaBean,EJB等,它们背后的基本原则就是DIP.
      对于软件设计的两个目标,复用和可维护性来说,传统的设计侧重于具体层次模块的复用和可维护,比如算法,数据结构,函数库等等.但是,对系统的抽象是比较稳定的,它的复用是很重要的,同时,抽象层次的可维护性也应当是一个重点.就是说DIP也导致复用和可维护性的"倒转".
       我们现在来看看依赖有几种,依赖也就是耦合,分为下面三种
  • 零耦合(Nil Coupling)关系,两个类没有依赖关系,那就是零耦合.
  • 具体耦合(Concrete Coupling)关系,两个具体的类之间有依赖关系,那么就是具体耦合关系,如果一个具体类直接引用另外一个具体类,就会发生这种关系.
  • 抽象耦合(Abstract Coupling)关系.这种关系发生在一个具体类和一个抽象类之间,这样就使必须发生关系的类之间保持最大的灵活性.

      DIP要求客户端依赖于抽象耦合,抽象不应当依赖于细节,细节应当依赖于抽象(Abstractions should not depend upon details. Details should depend upon abstractions),这个原则的另外一个表述就是"四人团"强调的那个:要针对接口编程,不要对实现编程.(Program to an interface, not an implementation),程序在需要引用一个对象时,应当尽可能的使用抽象类型作为变量的静态类型,这就是针对接口编程的含义. DIP是达到"开-闭"原则的途径.

      要做到DIP,用抽象方式耦合是关键.由于一个抽象耦合总要涉及具体类从抽象类继承.并且需要保证在任何引用到某类的地方都可以改换成其子类,因此,LSP是DIP的基础.DIP是OOD的核心原则,设计模式的研究和应用都是用它作为指导原则的.DIP虽然强大,但是也很难实现.另外,DIP是假定所有的具体类都会变化,这也不是全对,有些具体类就相当稳定.使用这个类的客户端就完全可以依赖这个具体类而不用再弄一个抽象类.

 
OOAD设计原则精细版详细讲解 软件开发中,比较经典的开发步骤: 一、瀑布模型 1.可行性分析 2.需求分析 3.软件设计 4.编码 5.测试 6.交付产品 7.维护 弊端:瀑布模型存在比较严重的问题需求如果要发生变更只能在极早期越往后走,代价越大 二、迭代+瀑布模型 1.计划驱动----文档为主 2.敏捷开发—客户交流为主 需求分析、软件分析,编程 都有两种方式:面向对象,面向过程 采用面向对象的思维方式进行:分析需求(OOA... 阅读详情

相关推荐

设计原则详解

设计模式原则详解...

大家的关注点赞,就是我持续更新的动力。 489

OOA/OOD/OOP

OOA   Object-Oriented Analysis:面向对象分析方法   是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题。OOA与结构化分析有较大的区别。OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析。   OOA(面向对象的分析)模型由5个层次(主题层、对象类层、结构层、属性层和...

weixin_30947043的博客 2043

41页PPT | 华为业务流程架构全景视图:全业务域L1-L3级流程全案

TBD、收集和生成线索、验证机会点、TBD、管理销售授权、管理销售项目、管理销售项目群、管理合同要素/模板、验证和分发线索、标前引导、管理开票和回款、客户网络评估、管理销售评审、TBD、管理交付项目群、管理合同文档、管理结构化合同信息、跟踪和培育线索、制定并提交标书、管理合同/PO变更、客户网络规划、管理销售决策。:4.1 管理技术、服务请求、4.2管理备件、服务交付、4.3管理非技术、服务请求、4.4管理客户、投诉。:管理Idea、产生Idea、激发兴趣与协作、孵化、原型和验证、确认Idea与商业化。

zuoan1993的博客 4550

依赖倒转原则

依赖倒转原则(依赖倒置原则):抽象不应该依赖细节,细节应该依赖抽象,针对接口编程,不要对实现编程。 依赖倒转原则:A高层模块不应该依赖低层模块。两个都应该依赖抽象。 B抽象不应该依赖细节。细节应该依赖抽象。 里氏代换原则: 一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出来父类对象和子类对象的区别。也就是说,在软件...

csdn_subaodong的博客 383

算法策略 | MACD跨周期短线交易策略开发(股指+商品双版)

量化策略开发,高质量社群,交易思路分享等相关内容

松鼠宽客的博客 2539

解决fetch_california_housing数据集403错误的三种实用方法

本文针对机器学习初学者加载fetch_california_housing数据集时常见的HTTPError 403: Forbidden错误,提供了三种经过实测的解决方案。详细介绍了手动下载与本地替换、修改源码下载路径以及配置网络访问策略的具体步骤,帮助用户根据自身网络环境和开发场景选择最佳方法,确保数据集顺利加载。

weixin_29074295的博客 550

04依赖倒转原则

基本介绍 依赖倒转原则是指: 1、 高层模块不应该依赖低层模块,二者都应该依赖其抽象 2、 抽象不应该依赖细节,细节应该依赖抽象 3、 依赖倒转的中心思想是面向接口编程 4、 依赖倒转原则是基于这样的设计理念: 相对于细节的多变性,抽象的东西要稳定的多,以抽象为基础搭建的框架比以细节的框架要稳定的多。在JAVA中,抽象指的是接口或者抽象类,细节就是具体的实现类。 5、 使用接口或抽象类的目的是指定...

枨曦的博客 1494

别再死记硬背菜单了!用Workbench搞定你的第一个ANSYS结构分析(附模型文件)

本文为零基础用户提供使用ANSYS Workbench完成第一个结构分析的完整指南。通过悬臂梁案例详细讲解从几何导入、材料定义、网格划分到边界条件设置的全流程,帮助初学者快速掌握有限元分析的基本操作,并附赠实用模型文件。

weixin_34233974的博客 307

面向对象设计(OOD)七大原则

这篇文章我会不停的维护它,它将会越来越长,但它是关于我在面向对象中的一些学习的思考心得。希望对自己对各位都能有用处。     开篇前,说明一下写这篇文章的原因。原因是因为设计模式。因为设计模式里的各种模式,都是建立在这些原则之上的。好比盖房子需要夯实的地基,或者比作数学论证中的使用到的公理。你不能说为什么盖房子一定要建立在地基之上,也不能说为什么两点一直线,三点一面这些公理为什么就这么牛逼的

hello_haozi的专栏 5816

TwinCAT3入门教程3——PLC程序变量定义和硬件IO关联

目录 1、IO输入输出变量定义和硬件关联 1.1 IO输入 1.2 IO输出 1.3 PLC变量和IO模块关联 1.4 测试IO输出点 2、伺服变量关联 1、IO输入输出变量定义和硬件关联 1.1 IO输入 添加全局变量IO_Global 变量定义 (*==========================================IO输入===============================================================*)

panjinliang066333的博客 1万+

Qwen大模型参数解析

Qwen系列模型的参数主要分为(决定模型结构)和(控制生成行为)两类。由于该系列已迭代多个版本,参数设计也在不断演进,我会结合最新版本为你进行分层梳理。

yeyiboy的博客 167

【面向对象设计】OOD原则

不同的设计模式对应不同的需求,而设计原则则是面向对象设计不变的定律。设计模式遵循这些基本的原则,设计原则又由设计模式来实现,二者相辅相成。在面向对象程序设计中遵守这些原则可以使我们的代码更灵活,更易于复用和拓展。

Cherie 1835

实战案例—encrypt靶场(AES固定key篇)

AES是一种对称密钥加密方法,意味着加密和解密时使用相同的密钥。AES加密存在三种形式:AES-128、AES-192和AES-256,它们分别对应于三种不同的密钥长度——128位(即16字节)、192位(即24字节)和256位(即32字节)。通常情况下,密钥的长度越长,提供的安全性就越高,但相应地,加解密过程所需的时间也会增加。默认情况下,采用的是AES-128,其提供的安全性对于大多数应用来说已经足够充分。

zhouzhou_98的博客 498

设计模式六大原则(三)依赖倒转原则

<br />10.3.3  依赖倒转原则(Dependence Inversion Principle)<br />开闭原则的主要机制就是依赖倒转原则,这个原则的内容是:要依赖于抽象,不要依赖于具体,即要针对接口编程,不针对实现编程。<br />依赖也就是耦合,共分为下面3种。<br />零耦合(Nil Coupling)关系:两个类没有依赖关系。<br />具体耦合(Concrete Coupling)关系:两个具体的类之间有依赖关系,如果一个具体类直接引用另外一个具体类,就是这种关系。<br />抽象耦

高兴的地方 1182

如何在多 GPU 配置上运行 Unsloth:数据并行或模型并行

当工作负载受限于内存(模型或批次无法放入单张显卡)、或受限于计算且计算与通信比率较高时(即每块 GPU 的额外计算量超过同步参数的开销,如在 DDP 中,或超过传递激活值的开销,如在模型并行中),多 GPU 配置才开始显现优势。在松散连接的显卡上(尤其是 PCIe 版本的 H100 或 A100),额外的设备间数据传输会导致性能显著低于单 GPU 运行。让我们厘清概念,明确说明如何通过模型并行(将模型拆分到多个 GPU)或数据并行(在每个 GPU 上复制模型)来跨多 GPU 运行 Unsloth。

人工智能领域专家 647

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

OOD的设计原则

Barbara Liskov:若对每个类型S的对象o1,都存在一个类型T的对象o2,使得在所有针对T编写的程序P中,用o1替换o2后,程序P的行为功能不变,则S是T的子类型。 通俗一点的解释:子类型能够完全替换父类型,而不会让调用父类型的客户程序从行为上有任何改变。 一个经典的违反Liskov替换原则的例子是正方形与矩形之间的关系。这样的例子在谈对象设计的原则时,已经啰

bug世界 1123

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

OOD设计原则之开篇词

        在我想记录些什么的时候,首先想到的就是这些OOD的原则。坦白的说,我自己对这些原则的理解也只能算是一知半解。自己做OOD也算有些年头了,但是在实际项目中,真正按这些原则所要求的那样去设计,我自知还没有达到那个高度。而这些原则就像是这几年年一直大热的设计模式一样,并不能拿来就用,“拼装”出合格的设计或代码;也不能拿着这些做标尺,一个个去检查那些设计和代码。但是,这些原则之所以能成立,

Brookes的专栏 2342

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

面向对象设计原则

使用该接口的客户端仅需知道与之相关的方法即可,即使用多个专门的接口来取代一个统一的接口。,即在设计中什么可能会发生变化,应使之成为抽象层而封装,而不是什么会导致设计改变才封装。,即在系统中应该尽量多使用组合和聚合关联关系,尽量少使用甚至不使用继承关系。,即在软件中如果能够使用基类对象,那么一定能够使用其子类对象。所有引用基类(父类)的地方必须能透明地使用其子类的对象。一旦一个接口太大,则需要将它分割成一些更细小的接口。类的职责要单一,不能将太多的职责放在一个类中。找到一个系统的可变因素,将之封装起来。

Resurgence03的博客 258

【设计模式】面向对象的七大设计原则

设计模式的定义 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 一、开放封闭原则OCP 开放封闭原则(Open-Closed Principle,OCP)是面向对象的可复用设计(Object Oriented Design或OOD)的基石。其他设计原则(里氏

幽林孤狼 594

面向对象设计的设计原则

在设计面向对象的程序的时,模式不是一定要套的,但是有一些原则最好是遵守。这些原则共有七个,包括:开闭原则、里氏代换原则、依赖倒转原则、合成/聚合复用原则、迪米特法则、接口隔离原则,单一职责原则。

superbeck的专栏 3956

设计模式的一般原则

  介绍设计模式遵循的一般原则设计模式遵循的一般原则:1.开-闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开发,对修改关闭.说的是,再设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展.换言之,应当可以在不必修改源代码的情况下改变这个模块的行为,在保持系统一定稳定性的基础上,对系统进行扩展。这是面向对象设计(OOD)的基石,也是最重要的原则。2

Ponent的专栏 1219

终于有人将23种设计模式与七大设计原则整理明白了!!!

????‍????作者:Java学术趴 ????仓库:Github、Gitee ✏️博客:优快云、掘金、InfoQ、云+社区 ????公众号:Java学术趴 ????特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 ????版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号Java学术趴联系小编。 ☠️每日毒鸡汤:朝圣的路上我们坚持自己的道。 ????大家好!我是你们的老朋友Java学术趴,最近花了差不多两周的时间研究了一下23种设

智码未来:AI与Java全栈的跨界对话 2257
上一篇: 设计模式-OOD的设计原则(5)-"合成聚合复用原则"
下一篇: C++异常中的堆栈跟踪
zhy05
博客等级 码龄21年 21粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值