什么是程序设计中的高内聚、低耦合?

2024-03-28 06:20
文章标签 耦合 程序设计 内聚

本文主要是介绍什么是程序设计中的高内聚、低耦合?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

开发者经常遇到一些项目,比如一个真格量化中的策略,要求较高的模块独立性。模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单。我们有两个定性的度量标准——耦合性和内聚性。


    耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差,也就是说当我们改动一个模块时,有更大的概率也需要去改动其他的多个模块。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。

 

    耦合性分类(从低到高)可包括: 无直接耦合,数据耦合,标记耦合,控制耦合,外部耦合,公共耦合,内容耦合。

 

1 无直接耦合:两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。耦合度最弱,模块独立性最强。子模块无需知道对方的存在,子模块之间的联系,全部变成子模块和主模块之间的联系。

 

 

 

 

 

2 数据耦合: 指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言的值传递;

 

 

 

 

3 标记耦合: 指两个模块之间传递的是数据结构,如高级语言中的数组名、记录名、文件名等这些名字即标记,其实传递的是这个数据结构的地址;

 

 

 

4 控制耦合: 指一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某一功能;

 

5,外部耦合:一组模块都访问同一全局简单变量,而且不通过参数表传递该全局变量的信息,则称之为外部耦合,比如我们下单平仓时引用查持仓之后的仓位数据,仓位数据作为全局变量传递。外部耦合和公共耦合很像,区别就是一个是简单变量,一个是复杂数据结构。

 

 

 

 

 

6 公共耦合: 指通过一个公共数据环境相互作用的那些模块间的耦合。公共耦合的复杂程序随耦合模块的个数增加而增加。

 

 

 

 

 

 

7 内容耦合: 这是最高程度的耦合,也是最差的耦合。当一个模块直接使用另一个模块的内部数据,或通过非正常入口而转入另一个模块内部。

 

    内聚性又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。


    内聚性分类(从低到高): 偶然内聚,逻辑内聚,时间内聚,通信内聚,顺序内聚,功能内聚。

 

1 偶然内聚: 指一个模块内的各处理元素之间没有任何联系。

 

2 逻辑内聚: 指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。

 

3 时间内聚: 把需要同时执行的动作组合在一起形成的模块为时间内聚模块。

 

4 通信内聚: 指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据。

 

5 顺序内聚: 指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素输出就是下一功能元素的输入。

 

6 功能内聚: 这是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。与其他模块的耦合是最弱的。

 

    耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。

 

    有个例子很容易明白:比如我们有一个策略有15个函数,这个策略执行得非常好;然而一旦开发者修改其中一个函数,其他14个函数都需要做修改,这就是高耦合的后果。


开发者理解了这些概念,在编写设计概要、设计类或者模块的时候也应当考虑到“高内聚,低耦合”。

 

— — — — — — E N D — — — — — —

 

真格量化可访问:

https://quant.pobo.net.cn

真格量化微信公众号,长按关注:

遇到了技术问题?欢迎加入真格量化Python技术交流QQ群  726895887

 


 

往期文章:

Numpy处理tick级别数据技巧

真正赚钱的期权策略曲线是这样的

多品种历史波动率计算

如何实现全市场自动盯盘

AI是怎样看懂研报的

真格量化策略debug秘籍

真格量化对接实盘交易

常见高频交易策略简介

如何用撤单函数改进套利成交

Deque提高处理队列效率

策略编程选Python还是C++

如何用Python继承机制节约代码量

十大机器学习算法

如何调用策略附件数据

如何使用智能单

如何扫描全市场跨月价差

如何筛选策略最适合的品种

活用订单类型规避频繁撤单风险

真格量化回测撮合机制简介

如何调用外部数据

如何处理回测与实盘差别

如何利用趋势必然终结获利

常见量化策略介绍

期权交易“七宗罪”

波动率交易介绍

推高波动率的因素

波动率的预测之道

趋势交易面临挑战

如何构建知识图谱

机器学习就是现代统计学

AI技术在金融行业的应用

如何避免模型过拟合

低延迟交易介绍

架构设计中的编程范式

交易所视角下的套利指令撮合

距离概念与特征识别

气象风险与天气衍生品

设计量化策略的七个“大坑”

云计算在金融行业的应用

机器学习模型评估方法

真格量化制作期权HV-IV价差

另类数据介绍

TensorFlow中的Tensor是什么?

机器学习的经验之谈

用yfinance调用雅虎财经数据

容器技术如何改进交易系统

Python调用C++

如何选择数据库代理

统计套利揭秘

一个Call搅动市场?让我们温习一下波动率策略

如何用真格量化设计持仓排名跟踪策略

还不理解真格量化API设计?我们不妨参考一下CTP平台

理解同步、异步、阻塞与非阻塞

隐波相关系数和偏度——高维风险的守望者

Delta中性还不够?——看看如何设计Gamma中性期权策略

Python的多线程和多进程——从一个爬虫任务谈起

线程与进程的区别
皮尔逊相关系数与历史K线匹配

Python2和Python3的兼容写法
Python代码优化技巧

理解Python的上下文管理器

如何写出更好的Python代码?这是Python软件基金会的建议

评估程序化模型时我们容易忽视的指标

看看如何定位Python程序性能瓶颈

什么是Python的GIL

投资研究中的大数据分析趋势及应用

理解CTP中的回调函数

如何围绕隐含波动率设计期权交易策略                    

看看如何用Python进行英文文本的情感分析

算法交易的分类

Python编码的最佳实践总结

什么是波动率锥?如何用波动率锥设计期权策略?

期权的波动率策略与时间价值收集策略对比

期权用于套期保值和无风险套利

隐含波动率对期权策略的影响

卖出期权交易的风险管理原则和技巧

期权交易中的“大头针”风险

期权做市商策略简介

精细化您的交易——交易成本评估与交易执行策略

海外市场交易执行策略的实践

设计期权套期保值方案时应注意的问题

美式期权、欧式期权比较分析——定价与风险管理

构建您的AI时代武器库——常用的机器学习相关Python库

期权波动率“微笑曲线”之谜

运算任务愈发繁重,如何加速Python程序运行?

证券市场微观结构理论模型是什么

是瞬间成交还是漫长等待?——如何衡量市场流动性

波动率指数及其衍生品介绍

Python的异常处理技巧

Python中的阻塞、异步与协程

"香草"之外的更多选择——几种常见的路径依赖奇异期权

什么是CTP?——了解上期所CTP快速交易系统

了解季节性——以谷物和油籽为例

是前因还是后果?——在真格量化中进行格兰杰因果检验

Python导入模块的技巧

Python程序员常犯的十个错误

搜索数据泄露天机?——舆情指数与期货行情关联性分析思路

机器学习常见算法分类汇总

如何使用Data Pipeline 自动化数据处理工作?

CTP API的委托介绍和在真格量化中的订单流控制

高频交易对市场的影响

期货行情及其组织形式——以上期所为例

理解并行与并发

郑商所和大商所套利指令及在真格量化的实现

机器学习用于金融市场预测面临的挑战

高频交易中风险控制的常用措施

查询结果偏离预期?来了解CTP的报单函数及委托状态查询

Python中的ftplib模块

理解真格量化的Python编程范式

需要处理大量市场数据?来了解一下MySQL、HBase、ES的特点和应用场景

NumPy中的ndarray与Pandas的Series和DataFrame之间的区别与转换

Python中的scikit-learn机器学习功能库

这篇关于什么是程序设计中的高内聚、低耦合?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/854723

相关文章

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

C语言程序设计(选择结构程序设计)

一、关系运算符和关系表达式 1.1关系运算符及其优先次序 ①<(小于) ②<=(小于或等于) ③>(大于) ④>=(大于或等于 ) ⑤==(等于) ⑥!=(不等于) 说明: 前4个优先级相同,后2个优先级相同,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符 1.2关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符

智能工厂程序设计 之1 智能工厂都本俱的方面(Facet,Aspect和Respect)即智能依赖的基底Substrate 之1

Q1、昨天分别给出了三个智能工厂的 “面face”(里面inter-face,外面outer-face和表面surface) 以及每个“面face” 各自使用的“方”(StringProcessor,CaseFilter和ModeAdapter)  。今天我们将继续说说三个智能工厂的“方面” 。在展开之前先看一下三个单词:面向facing,取向oriented,朝向toword。理解这三个词 和

C语言程序设计 笔记代码梳理 重制版

前言 本篇以笔记为主的C语言详解,全篇一共十章内容,会持续更新基础内容,争取做到更详细。多一句没有,少一句不行!  形而上学者谓之道,形而下学者谓之器 形而上学者谓之道,形而下学者谓之器 第1章 C语言的流程 1.C程序经历的六个阶段 编辑(Edit)预处理(Preprocess)编译(Compile)汇编(Assemble)链接(Link)执行(Execute)  2.

ACM东北地区程序设计大赛

不得不说随着参赛级别的提高,题目真的是越来越难啊,不过队长真是给力啊,在我们三个共同努力之下拿下了地区赛三等奖,哈哈我们可是大一唯一一只获奖队,终于在这次比赛打败了田大神。。。大神是失手了,俺和他差距还是挺大的。。。队友陈彤马上要去服兵役了,他说这是我们送给他最好的离别礼物,希望那家伙在部队好好干,以后谁干揍我!!!东北地区赛结束后,今年已经估计没机会参加亚洲区比赛了,赶紧补高数和线数啊!!别挂了

pta-2024年秋面向对象程序设计实验一-java

文章申明:作者也为初学者,解答仅供参考,不一定是最优解; 一:7-1 sdut-sel-2 汽车超速罚款(选择结构) 答案: import java.util.Scanner;         public class Main { public static void main(String[] arg){         Scanner sc=new Scanner(System

C语言程序设计(算法的概念及其表示)

一、算法的概念 一个程序应包括两个方面的内容: 对数据的描述:数据结构 对操作的描述:算法 著名计算机科学家沃思提出一个公式: 数据结构 +算法 =程序 完整的程序设计应该是: 数据结构+算法+程序设计方法+语言工具 广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。 对同一个问题,可有不同的解题方法和步骤。为了有效地进行解题,不仅需要保证算法正确,还要考虑算

1--程序设计的灵魂—算法

一:算法 特定问题求解步骤的描述 在计算机中表现为指令的有限序列 算法是独立存在的一种解决问题的方法和思想 对于算法而言,语言不重要,重要的是思想 二:算法特性 输入:有0个或多个输入 输出:至少一个输出 有穷:有限步骤之后自动结束 确定:每一步都有确定的含义 可行:每一步可行 三:算法设计准则 正确性,可读性,健壮性,高性价比 程序=数据结构+算法 四:影

Linux程序设计读书笔记------入门

第一章 入门   1:什么是Unix Unix是Open Group管理的一个商标,它指的是遵循特定规范的计算机操作系统 2:什么是Linux Linux是一个可以自由发布的类Unix内核实现,他是一个操作系统的底层核心 3:Linux应用程序表现为两种特殊类型的文件:可执行文件和脚本文件 4:Linux文本编辑器:Vim,Emacs等 5:库文件   1:静态库:.a   2