type
status
date
slug
summary
tags
category
icon
password
文章前言:本文主要讲述软件体系结构基础。
软件体系结构概述
1 软件体系结构的三要素
- 程序构建(模块)的三要素
- 构建之间交互的方式
- 数据的结构
2 软件体系结构的性质
- 结构:体系结构设计定义系统的构件、构件打包的方式和相互交互的方式
- 附属的功能:体系结构设计描述设计出的体系结构如何实现功能、性能、可靠性、安全性、适应性,以及其他的系统需求。
- 可复用:体系结构设计应描述为一种可复用的模式,能复用已有的构造块,并可供以后类似系统族的设计使用。
3 软件体系结构风格(习惯模式)
软件体系结构风格(style)又称软件体系结构习惯模式(idiomatic paradigm)。体系结构风格定义了一个系统家族,即一个体系结构定义一个词汇表和一组约束:词汇表中包含一些构件和连接器类型,而这组约束指出系统是如何将这些构件和连接器组合起来的。
4 体系结构风格的四要素内容
- 词汇表
- 配置规则
- 语义解释原则
- 对基于这种风格的习题所进行的分析
5 有原则地使用软件体系结构风格的意义
- 它促进了设计的复用,使得一些经过实践证实的解决方案能够可靠地解决新问题。
- 它能够带来显著的代码复用,使得体系结构风格中的不变部分可共享同一个解决方案。
- 便于设计者之间的交流与理解。
- 通过对标准风格的使用支持了互操作性,以便于相关工具的集成。
- 在限定了设计空间的情况下,能够对相关风格作出分析。
- 能够对特定的风格提供可视化支持。
6 良好的体系结构可以为软件开发和维护带来好处
1) 识别相似系统的通用结构模式,有助于理解系统高层之间的联系,使得新系统可以作为以前系统的变种来构造;
2) 合适的体系结构是系统成功的关键,而不合适的体系结构可能带来灾难性的后果;
3) 对软件体系结构的理解,可以帮助开发人员在不同的设计方案中做出理性的选择;
4) 体系结构对于分析和描述复杂系统的高层属性通常是十分必要的;
5) 各种体系结构风格的提炼、描述和普遍采用,便于软件开发人员在系统设计中互相交流;
6) 在软件开发文档中清晰地记录系统体系结构,不仅可以显著地节省软件理解的工作量,而且便于在软件维护的全过程中保持系统的总体结构和特性不变。
7 基于体系结构的软件开发模式

软件体系结构风格(略)
1 管道与过滤器
(1)基本结构与词汇表
管道-过滤器风格把系统任务分成若干连续的处理步骤,这些步骤由通过系统的数据流连接,一个步骤的输出是下一个步骤的输入。
我们将处理模块称为过滤器,而各个模块之间的连接器称为管道。
词汇表:[构件=过滤器;连接器=管道]

(2)特征
1. 过滤器一定是独立的实体,即各个过滤器之间不能共享状态。
2. 它不能与其它的过滤器共享数据,而且一个过滤器不知道它上游和下游的标识。它们的规格说明中只能涉及限制哪些数据可以出现在它的输入管道中和保证它将输出何种类型的计算结果,但它们不能识别在与它们相连的管道的另一边究竟是谁。
(3)种类
本类型的规格说明都包括管线、受约束的管道和有名管道三类。管线限制过滤器的拓扑结构只能是线性序列。受约束的管道限制在其上流通的数据量。有名管道要求在两个过滤器之间流通的数据经过严格地定义。
(4)优点
- 它允许设计者将一个系统的整体输入/输出行为理解为各个独立过滤器行为的一个简单的合成。
- 该体系结构支持重用。
- 维护系统和增强功能容易。
(5)缺点
- 容易导致批处理方式。
- 在维护或者响应两个分离但相关的数据流时容易受阻。
- 增加了分析与编码的工作量,增加了复杂性,降低了性能。
(6)实例
传统的编译器就是管道/过滤器体系结构风格的一个实例。编译器由词法分析、语法分析、语义分析、中间代码生成、中间代码优化和目标代码生成几个模块组成,一个模块的输出是另一个模块的输入。源程序经过各个模块的独立处理之后,最终将产生目标程序。编译器的框架结构如图:

2 数据抽象和面向对象组织
(1)基本结构与词汇表
在该结构中,数据表示和与之相连的最基本操作都被封装在一个抽象数据类型或者对象中。
词汇表是[构件=对象;连接器=方法调用]

(2)特征
对象负责维持其本身的完整性;信息隐藏。
(3)优点
- 封装性。
- 信息隐藏。
- 抽象性。
- 类特性。
- 继承性。
(4)缺点
- 如果一个对象要调用另一个对象,则必须知道它的标识和名称
- 会产生连锁反应
3 基于事件的隐式调用
(1)基本结构与词汇表
该结构中的模块既提供一组过程,也提供一组事件。系统由可以发布事件的构件组成,另一些构件为注册接收这些发布的事件,这些构件将自己的过程同一事件相关。
词汇表是[构件=模块;连接器=事件与过程隐式调用]

(2)特征
软件体系结构中的构件可以声明或者广播一个或者多个事件,而不是直接调用过程。系统中的其它成分可以通过将一个过程连接到一个事件来表达自己对该事件的兴趣。当该事件激发时会隐含地调用其它模块。
(3)优点
- 支持软件复用。
- 容易使系统升级。
(4)缺点
- 软件构件放弃了对计算的控制,而完全由系统完成.
- 在数据传输上关系复杂,系统总体功能和性能与资源管理成为一个关键性问题。
4 分层系统
(1)基本结构与词汇表
该结构采用层次化的组织方法,每一层向其上层提供服务,并利用下层服务。下层信息可以被全部隐藏起来,只有外部层次和一部分精心选择的功能可以被外部所见。
词汇表是[构件=虚拟机;连接器=层次间协议]

(2)特征
层次结构虚拟机与层次间的协议。
(3)优点
- 支持抽象程度递增的系统设计,使得设计者可以把一个复杂系统按递增的步骤分解开来。
- 功能的改变只会影响相邻的上下层。
- 只要给相邻层提供相同的接口,这种结构可以支持重用。
(4)缺点
- 层次划分不容易,很难找到一个合适的正确的层次抽象方法。
5 其他
- 仓库系统及知识库,也称数据共享体系结构风格。
- 过程控制。
- C2 体系结构风格
- 解释器 体系结构风格,又称为虚拟机风格。
- 反馈控制环 体系结构风格
- C/S 体系结构风格
- B/S 体系结构风格
- 公共对象请求代理(CORBA)体系结构风格
- MVC 体系结构风格
软件体系结构中的技术(略)
1.共性和可变性分析
2.可变设计
3.程序生成技术
4.构造一个框架系统
5.原型构造
6.接口开发——按合同设计
7.体系结构描述语言
8.体系结构评价
将需求映射到软件体系结构
1 变换流
具有较明显的输入、变换(或主加工)和输出的数据流图称为变换型数据流图。在变换型数据流图中,主加工是系统的中心。在图5.18中,“计算汇费”是主加工。

2 事务流
某个加工将它的输入分离成一串发散的数据流,形成许多活动路径,并根据输入的值选择其中一条路径,具有这样特征的数据流图是事务型数据流图。

事务型数据流图完成下述任务:
- 接收输入数据(输入数据又称为事务);
- 分析每个事务以确定它的类型;
- 根据事务类型选取一条活动通路。
这类系统的特征,是具有在多种事务中执行某类事务的能力。当外部信息沿着接受路径进入系统后,经过事务中心获得某一个特定值,就能据此启动某一条动作路径的操作。在数据处理系统中,事务型结构是经常遇到的。
3 面向数据流方法设计过程

4 例题
我们已经开始进入“智能”产品时代。在这类产品中把软件做在只读存储器中,成为设备的一部分,从而使设备具有某些“智能”。因此,这类产品的设计都包含软件开发的任务。作为面向数据流的设计方法中变换分析的例子,考虑汽车数字仪表板的设计。
假设的仪表板将完成下述功能:
(1) 通过模数转换实现传感器和微处理机接口;
(2) 在发光二极管面板上显示数据;
(3) 指示每小时英里数(mph),行驶的里程,每加仑油行驶的英里数(mpg)等等;
(4) 指示加速或减速;
(5) 超速警告:如果车速超过55英里/小时,则发出超速警告铃声。
题目

大纲

输入控制

变换控制

输出控制

软件结构一览

例 在汽车的数字仪表板上有一些选择功能,驾驶员可以按动功能选择按钮进行选择。在面板上设置的按钮是:
(1)点火,启动汽车。同时还提供一排数字按钮,驾驶员可以设置一个数字密码,只有密码正确汽车才能安全启动;
(2)雷达探测。它可以给出障碍物的距离,如果太近了,就发出警告;
(3)显示发动机工作状态。如油压、油温、水箱温度等;
(4)显示行程,计算信息;
(5)清除上一键。
题目

顶层

框架

上层模块

中下层模块

为方便储户,银行拟开发计算机储蓄系统。储户填写的存款单或取款单由业务员键入系统,如果是存款,系统记录存款人姓名、住址、存款类型、存款日期、利率等信息,并打印出存款单给储户;如果是取款,系统计算利息并印出利息清单给储户。

第一步:判断为变换型数据流图
第二步:划分输入流和输出流的边界

第三步:完成第一级分解

第四步:完成二级分解,对输入、输出、调度分别进行分解。


第五步:合并得到初始的软件结构

第六步:对软件结构进行精化

提高模块的独立性,并对输入事务进行细化

某仓库管理系统的描述如下:
(1)根据计划部门转来的收货通知单和已存在的物资编码文件,建立物资采购单流水账。
(2) 根据技术部门的物资验收报告和物资采购单流水账,更新物资台账文件。
(3) 对物资台账分类汇总,将结果存储于物资总账文件中。
(4) 物资出库:物资使用部门填写物资出库单,包括物资编号、物资名称、物资数量、物资使用部分、负责人、经手人。系统根据物资总账文件的库存情况判断是否能够出库,如果能够出库,则记录出库单,并更新物资总账文件。
导出系统的模块结构图 。

某事务系统具有下列功能:
(1)读入用户命令,并检查其有效性;
(2)按照命令的编号(1~4号)进行分类处理;
(3)1号命令计算产品工时,能根据用户给出的各种产品数量,计算出各工种的需要工时和缺额工时;
(4)2号命令计算材料消耗,根据产品的材料定额和用户给出的生产数量,计算各种教材的需求量;
(5)3号命令编制材料定货计划;
(6)4号命令计算产品成本。
试用结构化分析和设计方法画出该系统的数据流图并据此导出系统的模块结构图。


📎 参考文章
有关问题,欢迎您在底部评论区留言,一起交流~
- Author:Koreyoshi
- URL:https://Koreyoshi1216.com/article/1abc7b13-c6a7-80e4-8aff-fcdd4e7ae699
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!