高质量编程的金玉良言——迪米特法则

迪米特法则:

如果两个类不必彼此间直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

迪米特法则的根本目的是为了降低类与类之间的藕合度。因为一个类的藕合程度越弱,那么当这个类内部发生修改时,就不会波及到该类的使用者们。

降低藕合的方法:

尽量使一个类中能私有的成员私有化,只给外界提供简单的接口即可。

“高内聚低耦合”的含义:

内聚就是一个模块内各个元素彼此结合的紧密程度,高内聚就是一个模块内各个元素彼此结合的紧密程度高。

所谓高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。

耦合:一个软件结构内不同模块之间互连程度的度量(耦合性也叫块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差,模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传递的信息。)

对于低耦合,粗浅的理解是:一个完整的系统,模块与模块之间,尽可能的使其独立存在。也就是说,让每个模块,尽可能的独立完成某个特定的子功能。模块与模块之间的接口,尽量的少而简单。如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。这样有利于修改和组合。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-15 07:53:33

高质量编程的金玉良言——迪米特法则的相关文章

高质量编程的金玉良言——依赖倒转原则

生活中的例子: 电脑的品牌有很多,但电脑中的所有部件都有标准的接口,不同的厂家都是按照标准去生产各个部件,这些部件的内部实现不同,但接口都是一样的,这样的话,如果我的联想电脑的内存条坏了,我随便买一根内存条插上都能使用. 之所以我们的电脑能使用任何厂家生产的内存条,是因为这些电脑生产厂家都是"面向接口"生产,而在软件世界中,面向接口编程就是依赖倒转. 依赖倒转的官方定义: 1.高层模块不应该依赖于低层模块,他们都应该依赖于抽象: 2.抽象不应该依赖于细节.细节应该依赖于抽象. 大白话讲

高质量编程的金玉良言——单一职责原则

"单一职责原则"的官方定义: 就一个类而言,应该仅有一个引起它变化的原因. 大白话讲: 在设计类的时候,应该要让每一个类仅有一个职责,每一个类只做一类事情,这就是单一职责原则. "每一个类只做一类事情"的好处: 如果一个类承担的职责过多,就等于把这些职责藕合在一起,一个职责的变化可能会削弱或抑制这个类完成其他职责的能力. 这种藕合会导致脆弱的设计,当变化发生时,设计会遭到意想不到的破坏. 在程序设计时,我们需要在类的职责分离上多加思考,做到单一职责,这样你的代码才是

《C++/C高质量编程指南》笔记

复习: C/C++高质量编程指南: [规则1-2-1]为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块. [规则1-2-2]用 #include <filename.h> 格式来引用标准库的头文件(编译器将从标准库目录开始搜索). [规则1-2-3]用 #include “filename.h” 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索). [建议1-2-1]头文件中只存放“声明”而不存放“定义” [规则2-2-1]一行代码只做一件事情

c++高质量编程手册

怡化主管强烈要求我读这本书.... 笔记尚未完成,持续更新呗.. 第1章 高质量软件开发之道 1.1 软件质量基本概念 1.1.1 如何理解软件的质量:功能性和非公能性 1.1.2 提高软件质量的基本方法: 一次性编出高质量的程序 1.1.3 "零缺陷"理念 1.2 细说软件质量属性 1.2.1 正确性: 需求范围内的需求 1.2.2 健壮性  需求外的扩展需求 1容错  2恢复 1.2.3 可靠性  你平均无故障时间衡量 1.2.4 性能  时间-空间效率 优化数据结构,算法,代码来

C++高质量编程笔记

/* * 函数介绍: * 输入参数: * 输出参数: * 返回值 : */ void Function(float x, float y, float z) { - } if (-) { - while (-) { - } // end of while - } // end of if 版权和版本的声明位于H和CPP的开头(参见示例 1-1),主要内容有: ( 1)版权信息. ( 2)文件名称,标识符,摘要. ( 3)当前版本号,作者/修改者,完成日期. ( 4)版本历史信息. 头文件里面的内

高质量编程讲座 设计自定义异常指南

1避免使用深的异常层次结构.2一定要从 System.Exception 或其他常见基本异常之一派生异常.3异常类名称一定要以后缀 Exception 结尾.4应使异常可序列化. 异常必须可序列化才能跨越应用程序域和远程处理边界正确工作.5一定要在所有异常上都提供(至少是这样)下列常见构造函数. 确保参数的名称和类型与在下面的代码示例中使用的那些相同.public class NewException : BaseException, ISerializable{public NewExcept

指针参数的传递(节选 C++/C 高质量编程 林锐)

指针参数是如何传递内存的 如果函数的参数是一个指针,不要指望用该指针去申请动态内存.示例7-4-1中,Test函数的语句GetMemory(str, 200)并没有使str获得期望的内存,str依旧是NULL,为什么? void GetMemory(char *p, int num) { p = (char *)malloc(sizeof(char) * num); } void Test(void) { char *str = NULL; GetMemory(str, 100);    //

C++函数的重载,覆盖和隐藏(——高质量编程)

函数重载概念 只有C++才有重载的概念,C语言没有. 靠行参列表的不同来区别不同的重载函数, 若是全局函数和成员函数同名时,不算重载,因为它们的作用域不同,所以成员函数会将全局函数给隐藏(遮蔽)了. 成员函数的重载,覆盖和隐藏 重载发生在相同的作用域中,而覆盖则发生在不同的作用域中 重载: 相同的作用域 函数的名字相同 函数的形参列表,顺序,类型,个数不同 virtual可有可无 覆盖: 作用域不同,属于不同的类中 函数的名字相同 形参列表相同 基类必须是虚函数

高质量编程指南备忘

//// * & 仅靠变量名 //// 不可for循环内修改循环变量 //// 太深的嵌套可以用goto跳出 ////眼力 char *GetStr() { char p[] = ""; //生命周期 return p; } char *GetStr() { char *p = ""; //静态存储 只读 return p; } //// 如果p是NULL,那么free多次ok:否则错误. //// delete 数组不要忘了[] 类中调用同成员函数名的全局