当前位置: 首页 > news >正文

系统结构设计原则、聚合与耦合

目录

一、系统结构设计原则

1、分解-协调原则

2、自顶向下的原则

3、信息隐蔽、抽象的原则

4、一致性原则

5、明确性原则

6、模块的扇入系统和扇出系数要合理

7、模块的规模适当

8、考点:系统结构设计原则的具体项目

二、聚合与耦合(重点)

1、聚合与耦合是衡量模块独立性的标准

2、聚合是衡量模块内各个元素的精密程度

3、耦合是衡量模块之间的紧密程度

4、考点

(1)七种聚合的排列顺序、七种耦合的排列顺序

(2)七种聚合的概念理解、七种耦合的概念理解

5、聚合

(1)偶然聚合

(2)逻辑聚合

(3)时间聚合

(4)过程聚合

(5)通信聚合

(6)顺序聚合

(7)功能聚合

6、耦合

(1)非直接耦合

(2)数据耦合

(3)标记耦合

(4)控制耦合

(5)外部耦合

(6)公共耦合

(7)内容耦合

7、高内聚低耦合

三、聚合与耦合考点

1、确定聚合类型/聚合程度高低

2、确定耦合类型/耦合程度高低

3、模块设计的原则


一、系统结构设计原则

1、分解-协调原则

  • 在整个软件生命周期中概要设计将系统划分成很多个小的模块;
  • 这个分解的过程就是将系统看做一个整体,根据系统工程的思想,自顶向下逐层进行分解。
  • 分解出来的各个模块会共同协调完成特定的功能。

2、自顶向下的原则

3、信息隐蔽、抽象的原则

  • 通过封装技术、把一些比较机密的信息封装在模块内,给用户看到的只是输入和输出的信息。这个数据的处理逻辑是如何实现的,用户是看不到的。
  • 把具体的对象、行为、特征,进行分类总结后一步一步抽象成类、或者更高层的对象。

4、一致性原则

5、明确性原则

6、模块的扇入系统和扇出系数要合理

  • 模块的扇入系数:是指直接调用该模块的上级模块的个数,扇入大,说明这个模块的通用性越强,重复利用的机会就比较高。
  • 模块的扇出系数:是指该模块直接调用的下级模块的个数。扇出大表示模块的复杂度高,需要控制和协调过多的下级模块。扇出系数不宜过大或过小,不然模块划分就会有些问题。

7、模块的规模适当

  • 软考中的参考值是代码不超过500行。

8、考点:系统结构设计原则的具体项目

 

二、聚合与耦合(重点)

 

1、聚合与耦合是衡量模块独立性的标准

2、聚合是衡量模块内各个元素的精密程度

3、耦合是衡量模块之间的紧密程度

4、考点

(1)七种聚合的排列顺序、七种耦合的排列顺序

(2)七种聚合的概念理解、七种耦合的概念理解

(3)考察方式:题干给具体的场景描述,让考生判定具体属于哪一种聚合或者耦合。

5、聚合

(1)偶然聚合

  • 指的是模块完成动作之间的元素没有任何的关系,或者说仅仅是一种非常松散的关系。
  • 简单理解就是把一些代码元素放到了这个模块中,但他们与这个模块功能的实现没有必然的关系。

(2)逻辑聚合

  • 指的是模块内部的各个组成,在逻辑上有相似的处理动作,但功能用途上彼此无关。

(3)时间聚合

  • 强调的是模块内部的各个组成部分所包含的处理动作,必须在同一时间执行。

(4)过程聚合

  • 指的就是模块内部各组成部分所完成的动作虽然没有一个必然的联系,但必须按照特定的次序完成。
  • 简单理解就是完成一件事情,先后动作一定要按事先预定好的要求来。

(5)通信聚合

  • 指的是模块中各个部分完成的动作都使用了同一输入数据,或者产生了同一输出数据。

(6)顺序聚合

  • 模块内的各个部分,前一部分动作的输出是后一部分动作的输入。各部分的执行顺序是有先后顺序的,前一部分的执行结果会影响到后一部分。

(7)功能聚合

  • 聚合程度是最强的,也是程序所追求的聚合状态。
  • 指的是模块内部各个组成部分都为同一功能服务。换句话讲,就是这个模块内缺失任意一部分,这个功能就无法实现。

6、耦合

(1)非直接耦合

  • 两个模块之间没有必然直接的联系。
  • 是通过主模块的控制和调用实现联系的,所以两个模块间的独立性会比较好。
  • 所以修改其中一个模块时,无需考虑另一个模块。

(2)数据耦合

  • 两个模块之间有直接的关系。
  • 两个模块之间是通过数据参数交换信息的,也就是说两个模块之间存在通信。

(3)标记耦合

  • 两个模块之间是通过一组数据结构的子结构来传递信息记录的。

(4)控制耦合

  • 两个模块之间传递给彼此的信息包含有控制信息。

(5)外部耦合

  • 两个模块之间通过一个全局简单变量进行数据的传送。

(6)公共耦合

  • 两个模块之间有一个公共的数据区域来传递信息。

(7)内容耦合

  • 一个模块执行的时候需要跑到另一个模块的内部去获取信息。
  • 耦合程度是最高的。

7、高内聚低耦合

  • 符合这个标准,意味着模块的独立型好,后期的可维护性就比较高。

三、聚合与耦合考点

1、确定聚合类型/聚合程度高低

 
  • 一个模块中包含多个功能肯定不是功能聚合,例如题中该模块分别实现了 读、修改、存回三个功能。
  • 同一时间执行动作才是时间聚合,题干中有先后,所以肯定不是时间聚合。
  • 逻辑聚合需要各个部分有相似的处理动作,读、些、修改很明显没有类似的处理动作。
  • 过程聚合指的就是模块内部各组成部分所完成的动作虽然没有一个必然的联系,但必须按照特定的次序完成。题干中必须先读出产品信息,才能进行修改,修改完才能存回数据库。
  • 高聚合模块独立性才好,过程聚合不是最高的聚合,所以模块独立性也不好。

2、确定耦合类型/耦合程度高低

3、模块设计的原则

 

相关文章:

  • 启动命令,项目文件介绍,简单配置项介绍,url处理和视图函数
  • Double Q-learning
  • 【前端】HTTP相关知识总结
  • csp202206
  • Hive中的数据倾斜优化
  • SpringMvc(二、请求传参
  • [如何编译openGauss对应版本的wal2json.so]
  • 计算方法/数值分析 期末复习整理
  • makefile(详细讲解)
  • Java递归实现迷宫问题和八皇后
  • 软件测试面试题及答案,2022最强版
  • 2.采药-01背包
  • 语法基础(函数)
  • 这几个小插件助你快速提升工作效率
  • Java毕业设计-校园活动赞助与宣传管理系统
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • css的样式优先级
  • express + mock 让前后台并行开发
  • IOS评论框不贴底(ios12新bug)
  • Java 23种设计模式 之单例模式 7种实现方式
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • ng6--错误信息小结(持续更新)
  • Objective-C 中关联引用的概念
  • Spring声明式事务管理之一:五大属性分析
  • sublime配置文件
  • Vue组件定义
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 诡异!React stopPropagation失灵
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 如何在GitHub上创建个人博客
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 最近的计划
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • (Java数据结构)ArrayList
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (排序详解之 堆排序)
  • (三十五)大数据实战——Superset可视化平台搭建
  • (四)Linux Shell编程——输入输出重定向
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • .NET Framework .NET Core与 .NET 的区别
  • .net 微服务 服务保护 自动重试 Polly
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • @Bean, @Component, @Configuration简析
  • @ResponseBody
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • []error LNK2001: unresolved external symbol _m
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [AHOI2009]中国象棋 DP,递推,组合数
  • [BeginCTF]真龙之力
  • [BUG]vscode插件live server无法自动打开浏览器