软件维护与迪米特法则

深入理解迪米特法则:代码实践解析 公共接口(Public Interface)是对象提供给外部访问其功能的编程结构。它是对象和外界交互的唯一合法途径,确保了对象内部的封装性。接口定义了对象的方法签名,包括方法名称、参数类型、返回类型等。在面向对象编程中,公共接口的作用主要体现在以下几点:封装性:通过接口,对象能够隐藏其内部实现细节,只暴露必要的操作给外界。灵活性:接口定义的抽象方法允许对象具有实现的自由度,增加代码的灵活性。可维护性。 阅读详情
    最近在维护公司的一个旧项目的时候,发现有些BUG改了又改,子生孙,孙又生子的。公司里只要接触过这个项目的同事都觉得非常的痛苦。一个对象的状态被七八个地方修改,经常是这边改成这样,那边又改成这样,这边对了,那边又错了。几经思考,我认为这是违反了迪米特法则导致的。
    迪米特法则(Law of Demeter)又叫最少知识原则(Least Knowledge Principle 简写LKP)就是说,一个对象应当对其它对象有尽可能少的了解,也叫做不要和陌生人说话。朋友越多,当然就越好了,在家靠父母,在外靠朋友嘛。为什么在面向对象设计里反而成了不好的事情呢?其实这是了对象不受到其它对象太多的影响。就像革命时期情报员只能单线联系一样,如果其中一个被敌人发现了,其他人不会马上全部都暴露出来。系统里的对象改了某个方法或者被删除了,它只会影响到与它有关联的对象。如果一个对象知道得太多其它的对象,只要其中的某一个对象有改变那它肯定就会受到影响。它知道的对象越多,可能受到影响就会越多。虽然在现代的语言里(C#、Java等)可以使用接口来隔离变化,但是如果连接口都需要改变的时候,依然还是会受到的影响。遵守
迪米特法则可以使对象本身受到其它对象的影响降低到最少。
【最全】ISTQB- FL模拟题(含答案) 汇总收集的所有ISTQB基础级考题和答案 阅读详情

相关推荐

Halcon 3D点云匹配实战:从预处理到模板创建的完整流程(附代码)

本文详细介绍了Halcon在3D点云匹配中的实战应用,涵盖从预处理到模板创建的完整流程。通过代码示例和实用技巧,帮助开发者掌握点云采样、降噪、三角化等关键技术,并优化匹配参数以提高精度和效率。适用于工业检测、机器人引导等领域。

weixin_33670786的博客 433

设计模式六大设计原则(五):最少知识原则

一、定义 一个对象应该对其他对象有最少的了解。 在介绍具体含义之前先解释下什么是朋友类: 出现在成员变量、方法的输入输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类。 最少知识原则的包含的具体含义: 只和朋友交流。类与类之间的关系是建立在类间的,而不是方法间,因此一个方法...

chuobenggu7592的博客 383

【自然语言处理(NLP)实战】LSTM网络实现中文文本情感分析(手把手与教学超详细)

在当今数字化时代,人们在社交媒体、评论平台以及各类在线交流中产生了海量的文本数据。这些数据蕴含着丰富的情感信息,从而成为了深入理解用户态度、市场趋势,甚至社会情绪的宝贵资源。自然语言处理(NLP)的发展为我们提供了强大的工具,使得对文本情感进行分析成为可能。在这个领域中,长短时记忆网络(LSTM)凭借其能够捕捉文本序列中长距离依赖关系的能力,成为了情感分析任务中的一项重要技术。通过详细的步骤和示例代码,深入了解如何处理中文文本数据、构建LSTM模型、进行训练和评估。

halo的博客 2万+

java与模式笔记(2)——软件设计的目标,可维护性和复用性

  我们在平时购买电器的时候很少很少去考虑电器本身的维护,然而软件设计却恰恰需要,即使是在开发的过程中也是重复着维护的过程。面对维护的时候我们遇到了很多困难,从一个个的小的变化致使后来的系统濒临崩溃。至少我现在在作的这个老人介护系统就是这么一个状态,每次修改都感觉是伤筋动骨的,即使是一个非常小的修改,牵涉非常多的所谓的“朋友程序”。造成这样的现状的原因无非是以下几点: 过于僵硬。一个

Jimmybly Lee 的专栏 1130

驯服电源尖峰:从BUCK/BOOST环路剖析到高di/dt噪声的实战抑制

本文深入探讨了电源系统中高di/dt噪声的产生机制及抑制方法,通过BUCK/BOOST电路的环路分析,揭示了电流路径不连续导致的电压尖峰问题。文章提供了实用的PCB布局技巧和噪声抑制策略,包括最短回路原则、铺铜优化和过孔阵列战术,帮助工程师有效降低EMI噪声,提升电源系统的稳定性。

weixin_29587015的博客 275

开关电源环路补偿--开关电源进阶知识补充1

笔记 一 . 做开关电源环路补偿时候为了使得环路更加稳定。 1 .-- > 希望开关电源的相位裕量在45° 以上, 2. – > 希望开关电源的增益裕量在10db 以上 3. – > 希望开关电源增益曲线在过0db 时候以20db /dec 斜率下降(体现1个极点) 4. – > 希望开关电源补偿之后的带宽达到开关频率的是1/5 ~1/10,用以原理开关电源的开关噪音。 左边图示电源瞬态拉载和释放负载的时候输出电压存在明显的振铃,说明这个目前的环路相位裕量(phase m

qq_29776365的博客 1万+

设计模式6大原则(5)-得墨忒耳

迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其它对象有尽可能少的了解,不和陌生人说话。英文简写为: LoD. 迪米特法则能够简单说成:talk only to your immediate friends。对于面向OOD来说,又被解释为以下几种方式:一个软件实...

weixin_30279751的博客 76

【Android逆向工程】第18章:Ollvm 混淆与对抗

本章介绍了Ollvm混淆技术及其对抗方法。Ollvm是基于LLVM的开源代码混淆工具,主要实现控制流平坦化、虚假控制流和指令替换三种混淆技术。控制流平坦化通过状态变量和switch-case结构隐藏真实控制流,将原本清晰的逻辑拆分为多个状态块。混淆后的代码在静态分析中难以理解,但可通过动态追踪执行路径、符号执行等方法来还原原始逻辑。本章还提供了混淆代码示例和对抗策略,帮助理解Ollvm的工作原理及其防御方法。

w987333120的博客 213

迪米特法则(LoD)

一个软件实体尽当尽可能少的与其他软件实体发生相互作用。          LoD表述:1.只与你直接的朋友通信;2.不要跟“陌生人”说话;3.每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。          想象一下,如果你现在有件事情非常重要,需要托关系才能办成,正好你的朋友的朋友可以帮你办成此事,但是你跟他确是陌生人,你是自己直接找呢?还是你托你的朋...

zengchuanfan的博客 206

【SpringBoot 4.x 第2节】夯爆了,学习 Spring Boot 4.x 前,需要具备哪些 Java 基础?

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。 本专栏面向 有一点 Java 基础,但没有系统学过 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,最终带你从第一个 Hello API 一路完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 4570

SAP 实施:Waterfall vs. Agile —— 一场“结构性矛盾“的深刻比较先说结论:在 SAP 世界里,这从来不是“谁更好“的宗教问题,而是“你的项目 DNA 是什么“的战略选择。​

SAP 实施:Waterfall vs. Agile —— 一场"结构性矛盾"的深刻比较 先说结论:在 SAP 世界里,这从来不是"谁更好"的宗教问题,而是"你的项目 DNA 是什么"的战略选择。​ SAP 早已用 SAP Activate​ 给出了官方态度——它不是纯 Agile,也不是回头去搞旧 Waterfall,而是一个带质量门的混合架构。 1. 先回到本质:两者解决的是不同维度的风险 维度 Waterfall(传统 ASAP 路线)​ Agile(SCRUM/Kanban 式迭代)​

金牌架构师 336

设计模式-最少知识原则

当你正在设计一个系统,不管是任何对象,你都要注意它所交互的类有哪些,并注意它和这些类是如何交互的。 最少知识原则希望我们在设计中,不要让太多的类耦合在一起,以免修改系统中的一部分,会影响到其他部分。如果许多类之间相互依赖,那么这个系统就会变成一个易碎的系统,它需要花很多成本维护,也会因为太复杂而不容易被其他人了解。 下面看一句不太好的代码:(从气象站取得温度计对象,然后再从温度计对象去的温度)

gghh2015的博客 722

MATLAB算法实战应用案例精讲-【数模应用】梯度提升决策树(GDBT)(附python代码)

GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法。近些年更因为被用于搜索排序的机器学习模型而引起大家关注。.........

qq_36130719的博客 2078

设计模式之迪米特法则

教师可以通过课程对象的方法间接获取与课程相关的学生信息,而不是直接与学生对象进行交互。- “直接的朋友”是指当前对象本身、通过方法参数传入的对象、当前对象所创建的对象、当前对象的实例变量所引用的对象等。- 一个对象不应该过度依赖其他对象的内部细节,应该通过有限的接口与其他对象进行交互,以降低对象之间的耦合度。- 提高软件的可维护性和可扩展性:当一个模块发生变化时,对其他模块的影响较小,降低了修改代码带来的风险。定义:一个对象应该对其他对象有尽可能少的了解,只与直接的朋友通信。

alankuo的专栏 383

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

学习设计模式之禅——6大设计原则

一年前就拥有秦小波写的《设计模式之禅》,由于时间和项目经验原因,一直都没有仔细阅读,最近抽时间学习。 里面首先介绍的是程序设计的6大原则。 1、单一职责原则(Single Responsibility Principle 简称是SRP),接口、类、方法尽量做到单一。 2、里氏替换原则(If for each object o1 of type S there is an object o...

897371388 172

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

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

Java设计原则整理

Java设计原则整理 1.单一职责原则 ( SRP,Single Responsibility Principle ) 一个类,应该只有一个引起它变化的原因,类变化的原因就是职责。 一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力,如果一个类承担的职责过多,就等于把这些职责耦合在一起了。 这种耦合会导致脆弱的设计,当发生职责变化时,设计会遭受到意想不到的破坏。而如果想...

andayoung 261

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

(49)C#设计原则

使用 使用设计模式的根本原因是适应变化,提高代码复用率,是软件更具有可维护性和可扩展性。并且,在进行设计的时候,也需要遵循以下几个原则:单一职责原则、开放封闭原则、里氏替换原则、依赖导致原则、接口隔离原则、合成复用原则和迪米特法则。 单一职责原则 就一个类而言,应该只有一个引起它变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会影响到其他的职责,另外,把多个职责...

编程菜鸟0604的博客 521

设计模式学习笔记——迪米特法则

迪米特法则是针对类之间的低耦合而提出的,它要求一个类应该对自己需要耦合或者调用的类知道的最少,即被耦合或调用的类的内部如何复杂,跟本类没有一点关系,本类就知道你提供给我多少public方法,本类就调用这些方法,其他的你不要让我知道。 这个法则有以下基层含义: 1、只和朋友类交流 什么是朋友类呢?即和自己相耦合的类。既然相耦合,那么肯定是这两个耦合的类之间要存在交互,那些不存在交互的,却耦合到

成长的足迹 1450

程序员必备知识之面向对象七大设计原则

如果我们能站在巨人的肩膀上眺望远方,为啥还要自己去艰难的翻越一座又一座的高山呢。面向对象设计原则就是前辈们在实战中给我们总结下来的宝贵经验和财富。我们可以基于这些经验,编写出很优秀的面向对象程序。在我将近5年的编程工作中,我发现,面向对象设计原则每个人好像都知道一点,每一个人好像都会点,但是写出来的代码依然是我行我素。野路子频出。很多编程不按照原则来,一股脑的瞎干,写出的程序给到后面人维护的时候,迎来的是一堆埋怨和骂声,以及无休止的一次又一次的重构,重构后发现还是和上一次代码一样的货色。

知识应该共享,创造才应收费 412

设计模式六大原则

1.单一职责原则 定义:不要存在多于一个导致类变更的原因 问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。 解决方案:遵循单一职责原则。分别建立两个类T1、T2,使T1完成职责P1功能,T2完成职责P2功能。这样,当修改类T1时,不会使职责P2发生故障风险;同理,当修改T2时,也不会使...

weixin_30332241的博客 62

软件设计的七大原则

1.开闭原则 定义:软件实体应当对扩展开放,对修改关闭 软件实体包含一下几个部分:1.项目中划出的模块 2.类与接口 3.方法 目的:降低维护带来的风险。 2.依赖倒置原则 定义:高层模块不应该依赖底层模块,两者都应该依赖其抽象,抽象不应该依赖细节,细节应该依赖抽象。其核心思想是要面向接口编程,不想面向实现编程。 目的:更利于代码结构的升级和扩展。 3.里氏替换原则 定义:继承必须确保超类所有拥有的性质在子类中依然成立 定义解释:不要破环继承体系,子类重写方法功能发生改变,不应该..

qq_47279029的博客 223

设计模式学习- 迪米特法则

迪米特法则定义: 一个对象应该对其他对象有最少的了解,通俗的说,就是一个类应该对外暴露尽量少的公共接口,如有必要,可以把对象之间的耦合度降到最低。迪米特法则的优点: 1.一个类暴露的公用接口越少,那么后期修改时涉及的面就越小,由于修改造成的风险也会降到最低。 2.类之间解耦了,独立性也会相应的提升。那么类的复用率就会大大提高。 迪米特法则的缺点: 因为要求耦合度很低,那么可能要调用一...

qq117361093的专栏 148

Java设计模式:外观模式(Facade Pattern)与最少知识原则

外观模式定义 外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。 UML类图 OO原则 最少知识原则(等同于 最少知道原则):只和你的密友谈话。 优缺点 虽然这个原则减少了对象之间的依赖,这样就减少了软件的维护成本。 但也会导致更多的“包装”被制造出来,以处理与其它组件的沟通,这样可能会导致复杂度和开发时间的增加,并

D.D.U的博客 517

“最少知识”原则

前言:在学习适配器模式与外观模式时,我们会接触到这个原则。 1. 什么是最少知识原则? 最少知识(least knowledge)原则:只和你的密友谈话。 什么意思呢?就是告诉我们要减少对象之间的交互,只留下几个“密友”。 所以,当你设计一个系统时,不管是任何对象,你都要注意它所交互的类有哪些,并注意它和这些类是如何交互的。 这个原则希望我们能够在设计中,减少类耦

Jalen备忘录 1910

软考高级之系统架构师之软件工程

设计原则、耦合、内聚、系统建模、静态分析、软件质量、软件设计、用户界面设计、软件重用、SDE、软件需求、生命周期、软件维护、逆向工程、复杂度、McCabe、软件工具

lonelymanontheway的博客 1082

学习设计模式 - 六大基本原则之迪米特法则

  设计模式总共有六大基本原则,统称为SOLID (稳定)原则,分别是S-单一职责原则(Single Responsibility Principle), O-开闭原则(Open closed Principle),L-里氏替换原则(Liskov Substitution Principle),L-迪米特法则(Law of Demeter),I-接口隔离原则(Interface Segregati...

weixin_30718391的博客 125
上一篇: 推荐一个建模工具Visual Paradigm
下一篇: 溺水的程序员
jun_ly
博客等级 码龄22年 4粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值