0%
这是一片思考的空间 -- arthinking
Spring 重构&代码整洁之道 软件设计 JVM 并发编程 数据结构与算法 分布式 存储 网络 微服务 设计模式
Java技术栈 - 涉及Java技术体系

总体设计-模块化 层次图 结构图

1、模块化设计的原理包括什么?

为了提高软件的可维护性,其中,模块独立性最重要的,是评价软件结构质量的首要标准。

模块化就是把程序划分成独立命令且可独立访问的模块,每个模块完成一个字功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。

2、模块独立性度量(描述)的两个指标:内聚、耦合;什么是内聚,什么是耦合(P97);在面向数据流的方法中,内聚、耦合各分为哪几级,每级的具体含义分别是什么?强度从弱到强如何排列?

耦合:它是对一个软件结构内不同模块之间互连程度的度量;

内聚:它标志着一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。

耦合分为

  • (1)数据耦合
  • (2)控制耦合
  • (3)特征耦合
  • (4)公共耦合
  • (5)内容耦合;

**原则:**尽量使用数据耦合,小用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合

内聚分为:

  • 低内聚: (1)偶然内聚 (2)逻辑内聚 (3)时间内聚;
  • 中级内聚 (1)过程内聚 (2)通信内聚; 高内聚 (1)顺序内聚 (2)功能内聚;

原则设计时力求高内聚,并且能够辨认出低内聚的模块,有能力通过修改设计提高模块的内聚程度并且降低模块间的耦合程度,从而获得较高的模块独立;内聚和耦合都是进行模块化设计的有力工具,但是实现表明内聚更重要。

3、软件总体结构描述工具的概念和使用:软件层次图、软件结构(SC)图、HIPO图:什么是,基本符号和表示的结构,画法。

软件层次图(H图):

用来描绘软件的层次结构

组成元素: 一个矩形框代表一个模块 方框间的连线表示调用关系而不像层次方框图那样表示组成关系。

结构图(SC):

描述了软件的模块结构,表示了一个系统的层次分解关系;反映了模块间的联系以及块内联系;反映了模块间的信息传递。

(1) 组成元素:

方框,内有名称,表示模块;

直线,表示上层模块对下层模块的调用;

尾部带空心圆的箭头,表示按方向传递的数据信息;

尾部带实心圆的箭头,表示按方向传递的控制信息;

(2) 注意:

层次图和结构图并不严格表示模块的调用次序,层次图和结构图只表明一个模块调用那些模块,至于模块内还有没有其他成分则完全没有表示。

(3) 作用:

描述模块间参数交换情况、评价模块间耦合情况、确定模块间的接口。结构图一般不列入设计文档,只用于设计阶段检查模块设计的正确性和模块独立性。

HIPO图:

即层次图 + 输入/处理/输出图 的英文缩写,由一张H图和一组IPO图组成。

H图,是给每个模块加上编号的层次图。 IPO图,要为H图中的每个模块画一张IPO图。 通常将HIPO图作为软件结构的描绘,列入设计文档。

4、结构化设计(SD)方法(面向数据流的设计方法)中,如何将分析的结果(数据流图)逐层分解、转换成设计的初步结果(软件层次图)?

第1步:复查基本系统模型

第2步:复查并精化数据流图

第3步:确定数据流图具有变换特性还是事务特性

第4步:确定输入流和输出流的边界,从而孤立出变换中心

第5步:完成“第一级分解”

第6步:完成“第二级分解” 第7步:使用设计度量和启发式规则对第一次分割得到的软件结构进一步精化


题目1、数据流的划分。

1、变换流:信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统;

2、事务流:这种数据流是“以事务为中心的”,数据沿输入通路到达一个处理T,这个处理输入数据的类型在若干个动作序列中选出一个来执行。

题目2、 结构化分析、结构化设计的实质是什么?

结构化分析就是一种建立模型的活动,通常建立数据模型、功能模型和行为模型等三种模型。使用数据流程图、数据字典、结构化语言、判定表和判定树等工具,来建立一种新的、称为结构化说明书的目标文档-需求规格说明书。结构化体现在将软件系统抽象为一系列的逻辑加工单元,各单元之间以数据流发生关联。

题目3、什么是软件结构?

软件结构是指一种层次表况,由软件组成成分构造软件的过程、方法和表示。软件结构主要包括程序结构和文档结构。

题目4、数据流图怎么转换成软件结构图?

面向数据流的设计方法定义了一些不同的“映射”,利用这些映射可以把数据流图变换成软件结构。面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的方法。

题目5、为每种类型的模块耦合举一个具体的例子。

(1) 非直接耦合—例如,两个模块没有直接关系(模块1和模块2),模块独立性最强。

(2) 数据耦合—例如,如下图

(3) 特征耦合—例如,如下图

“住户情况”是一个数据结构,图中模块都与此数据结构有关。“计算水费”和“计算电费”本无关,由于引用了此数据结构产生依赖关系,它们之间也是标记偶合。

(4) 控制耦合--模块A通过传送开关、标志、名字等控制信息,明显地控制选择模块B的功能,例如下图

(5) 外部耦合—例如,如下图,模块A、B均需使用共享打印机

(6) 公共环境耦合—例如,如下图,模块A、B、C共享全局变量数组

(7) 内容耦合—例如,一个过程非正常地进入另一个过程

1
2
3
4
5
6
7
8
9
10
11
12
13
Sub AA(...) 
...
...
goto L
End sub

Sub BB(...)
...
...
L:
...
...
End sub

题目6、用面向数据流的方法设计下列系统的软件结构: (3)患者监护系统(需求见习题2-4)

功能级数据流图:

** **

软件结构图:

欢迎关注我的其它发布渠道

订阅IT宅
内功修炼
Java技术栈
Java架构杂谈是IT宅精品文章公众号,欢迎订阅:
📄 网络基础知识:两万字长文50+张趣图带你领悟网络编程的内功心法 📄 HTTP发展史:三万长文50+趣图带你领悟web编程的内功心法 📄 HTTP/1.1:可扩展,可靠性,请求应答,无状态,明文传输 📄 HTTP/1.1报文详解:Method,URI,URL,消息头,消息体,状态行 📄 HTTP常用请求头大揭秘 📄 HTTPS:网络安全攻坚战 📄 HTTP/2:网络安全传输的快车道 📄 HTTP/3:让传输效率再一次起飞 📄 高性能网络编程:图解Socket核心内幕以及五大IO模型 📄 高性能网络编程:三分钟短文快速了解信号驱动式IO 📄 高性能网络编程:彻底弄懂IO复用 - IO处理杀手锏,带您深入了解select,poll,epoll 📄 高性能网络编程:异步IO:新时代的IO处理利器 📄 高性能网络编程:网络编程范式 - 高性能服务器就这么回事 📄 高性能网络编程:性能追击 - 万字长文30+图揭秘8大主流服务器程序线程模型
📄 Java内存模型:如果有人给你撕逼Java内存模型,就把这些问题甩给他 📄 一文带你彻底理解同步和锁的本质(干货) 📄 AQS与并发包中锁的通用实现 📄 ReentrantLock介绍与使用 📄 ReentrantReadWriteLock介绍与使用 📄 ReentrantLock的Condition原理解析 📄 如何优雅的中断线程 📄 如何优雅的挂起线程 📄 图解几个好玩的并发辅助工具类 📄 图解BlockingQueue阻塞队列
📄 消息队列那么多,为什么建议深入了解下RabbitMQ? 📄 高并发异步解耦利器:RocketMQ究竟强在哪里? 📄 Kafka必知必会18问:30+图带您看透Kafka
📄 洞悉MySQL底层架构:游走在缓冲与磁盘之间 📄 SQL运行内幕:从执行原理看调优的本质 📄 洞悉Redis技术内幕:缓存,数据结构,并发,集群与算法