欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 软件工程-模块化设计

软件工程-模块化设计

2025/2/26 0:33:39 来源:https://blog.csdn.net/2303_76262050/article/details/145594148  浏览:    关键词:软件工程-模块化设计

分解(decomposition)

C(P1+P2)> C(P1)+C(P2)

E(P1+P2)> E(P1)+E(P2)

C为问题的复杂程度,E为解题需要的工作量

关于模块的一些概念

深度:系统结构中的控制层数

宽度:同一层次的模块总数的最大值

扇入&扇出:如图所示

作用范围:受到该模块内部一个判定影响的所有模块的集合(同样包括控制范围以外的模块)

控制范围:包括该模块本身及所有下属模块的集合 

(优化原则:作用范围应该在控制范围内)

模块独立性(module independence)

内聚(cohesion)

模块内部各成分之间

单个模块内部

内聚程度由低到高可分类为:

偶然性内聚 coincidental cohesion

模块中所要完成的各个动作之间没有任何关系

eg:一些重复用到的语句,为了方便组成一个模块

逻辑性内聚 logical cohesion

模块中的各个组成部分在逻辑上具有相似的处理动作,但功能上,用途上却彼此无关。

eg:输出各种报表的操作放入一个模块中实现

时间性内聚 temporal cohesion

模块中所包含的各个处理动作必须在同一时间内执行

eg:初始化模块

过程性内聚 procedural cohesion

模块内各个成分彼此相关,并且按照特定的次序执行

eg:由程序流程图直接演变而来的模块

通讯性内聚 communicational cohesion

模块中的各个成分都对数据结构的同一区域进行操作,以达到通信的目的

eg:模块内各个动作都使用同一个输入数据或者产生同一个输出数据

顺序性内聚 sequential cohesion

模块内各个处理成分都与同一个功能相关,并且这些处理必须顺序执行

eg:前一部分处理动作的输出是后一部分处理动作的输入

与过程性内聚区分:

模块内动作是否围绕同一个功能。

功能性内聚 functional cohesion

模块内所有成分形成一个整体,完成单个的功能

eg:单一目的,单一功能,界面清楚(比如求平方根模块)

评价标准

联接形式、可修改性、可读性、通用性、联系程度

耦合(coupling)

一个模块与其它模块之间

多个模块之间 

由耦合度低到高可分类为:

非直接耦合 no direct coupling

两个模块中的任何一个都不依赖于对方能够独立工作

数据耦合 data coupling

两个模块通过参数传递信息,信息仅限于数据(这个参数并不影响程序流程)

特征耦合 stamp coupling

模块间通过参数传递复杂的数据据结构,(复杂数据结构超出接收模块的最大需要)

此数据结构的变化将使相关的模块发生变化。

这种耦合介于数据耦合与控制耦合

控制耦合 control coupling

两个模块通过参数传递信息,信息中包含控制

外部耦合 external coupling

多个模块与同一个外部环境关联

eg:多个I/O模块与特定的设备、格式和通信协议相关联

公共耦合 common coupling

多个模块通过全局的数据环境相互作用。

全局数据环境包括:全局变量、公共区、内存公共覆盖区、任何存储介质上的文件、物理设备。

内容耦合 content coupling

一个模块使用另一个模块的内部数据或者控制信息;一个模块直接转移到另外一个模块内部。

基于耦合的设计原则

  • 尽量使用数据耦合
  • 减少使用控制耦合
  • 限制外部环境耦合和公共耦合
  • 杜绝内容耦合 

模块独立性高

模块内联系强/模块内聚合大

模块间联系弱/模块间耦合小

文章内所有图片均来自于网络

体系结构设计优化的指导规则

设计阶段早期应该对程序结构多做精化和评估以达到最好

便于优化是开发软件体系结构表示的一个重要因素

结构上的简单往往反映出程序的优雅和高效

设计优化应在满足模块化要求的前提下尽量减少模块数量(每个模块内代码行数尽量控制在60行)

在满足信息需求的前提下尽量减少复杂的数据结构

对模块分割、合并和变动调用关系的指导规则:

  • 提高内聚先,降低耦合后
  • 简化模块接口
  • 少用全局性数据和控制型信息

保持高扇入/低扇出的原则

作用域/控制域规则:

  • 作用域不要超出控制域的范围
  • 位置离受它控制的模块越近越好

对于性能要求高的应用,有时需要进行如下的工作:

  • 开发和精化程序结构,且不考虑关键性能而进行的优化
  • 使用可以提高运行性能的CASE工具来孤立低效的部分
  • 在后期设计中,对有可能最消耗时间的模块的算法进行时间优化
  • 用适当的程序设计语言编码
  • 孤立出那些大量占用处理器时间的模块
  • 如果需要,用依赖机器的语言重新设计和编码,以提高效率

先使其工作起来,再设法使其更好地工作 

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词