# 第一章

# 构件

一般认为,构件是指语义完整、语法正确和有可重用价值的单位软件,是软件重用过程中可以明确辨识的系统;结构上,它是语义描述、通信接口和实现代码的复合体。

有的可以独立工作,有的需要与其他配合工作;使用和开发生产无关,只要按照标准来生产;

# 软件重用

是指在两次或多次不同的软件开发过程中重复使用相同或相似软件元素的过程。

可以分为三个层次:

代码重用、设计结果重用、分析结果重用

可重用构件

可重用构件表示在软件重用过程中,可重用的软件构件元素。

相对于普通的软件产品,对可重用构件的特殊要求

可重用构件应该具有功能上的独立性与完整性;有较高的通用性;较高的灵活;严格的质量保证;较高的标准化程;

基于构件的软件开发

优势:基于构件的软件将软件开发的重点从程序编写转移到了基于已有构件的组装,更快地构造系统,减轻用来支持和升级大型系统所需要的维护负担,从而降低了软件开发的费用。

困难和挑战:

在同一系统中采用多个开发商提供的构件,它们之间的兼容性可能是开发过程中所要面对的一个严峻问题。

采用随处可以购买到的构件可能会使开发出来的软件产品丧失技术上的独创性和市场的竞争力;

第三方的构件开发商可能歇业,这会使购买的构件失去维护服务。

软件体系结构

软件体系结构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。

体系结构是风险承担者进行交流的手段。体系结构是早期设计决策的体现。

程序结构、软件结构和软件体系结构三者之间的区别和联系

区别:程序结构:指的是代码的结构,一般的程序结构有三种:顺序、选择和循环。软件结构:软件结构是组成软件的模块结构。体系结构:指的是软件的设计风格、范式等

联系:这三种结构其实讲的是同一种产品 —— 同一个软件,是在不同层次对软件构成的抽象

软件危机的表现:

1)软件成本日益增加:开发、部署和应用成本高

2)开发进度难以控制:无法按时完成

3)软件质量差:错误率高,无法满足用户需求,没有生命力

4)软件维护困难:成本高,维护效果不理想,还有可能有潜在错误

产生原因:

1)用户要求不明确

2)缺乏正确的理论引导

3)软件规模越来越大

4)软件复杂度越来越高

# 第二章

“4+1” 视图 **

4 指的是逻辑、开发、进程、物理视图,1 指的是场景视图。每一个视图只关心系统的一个侧面,5 个视图结合在一起才能反映系统的软件体系结构的全部内容。

在这里插入图片描述

逻辑视图

逻辑视图:是从最终用户的角度来看的,关注点是功能需求;

逻辑视图主要支持系统的功能需求,即系统提供给最终用户的服务。
在逻辑视图中,系统分解成一系列的功能抽象,这些抽象主要来自问题领域。这种分解不但可以用来进行功能分析,而且可用作标识在整个系统的各个不同部分的通用机制和设计元素。
在面向对象技术中,通过抽象、封装和继承,可以用对象模型来代表逻辑视图,用类图来描述逻辑视图。

开发视图

开发视图(也叫模块视图):是从程序员的角度来看的,主要侧重软件模块的组织和管理;

开发视图也称模块视图,主要侧重于软件模块的组织和管理。
开发视图要考虑软件内部的需求,如软件开发的容易性、软件的重用和软件的通用性,要充分考虑由于具体开发工具的不同而带来的局限性。
开发视图通过系统输入输出关系的模型图和子系统图来描述。

进程视图

进程视图(也叫并发视图):是从系统集成人员的角度来看的,主要侧重系统的运行特性(非功能型的),性能和可用性、吞吐量,性能可扩充性。

进程视图侧重于系统的运行特性,主要关注一些非功能性的需求。
进程视图强调并发性、分布性、系统集成性和容错能力,以及从逻辑视图中的主要抽象如何适合进程结构。它也定义逻辑视图中的各个类的操作具体是在哪一个线程中被执行的。
进程视图可以描述成多层抽象,每个级别分别关注不同的方面。在最高层抽象中,进程结构可以看作是构成一个执行单元的一组任务。
它可看成一系列独立的,通过逻辑网络相互通信的程序。它们是分布的,通过总线或局域网、广域网等硬件资源连接起来。

物理视图

物理视图:是从系统工程人员的角度来看的,主要考虑系统拓扑结构、设备安装、通信等

物理视图主要考虑如何把软件映射到硬件上,它通常要考虑到系统性能、规模、可靠性等。解决系统拓扑结构、系统安装、通讯等问题。
当软件运行于不同的节点上时,各视图中的构件都直接或间接地对应于系统的不同节点上。因此,从软件到节点的映射要有较高的灵活性,当环境改变时,对系统其他视图的影响最小。

场景视图

场景可以看作是那些重要系统活动的抽象,它使四个视图有机联系起来,从某种意义上说场景是最重要的需求抽象。在开发体系结构时,它可以帮助设计者找到体系结构的构件和它们之间的作用关系。
同时,也可以用场景来分析一个特定的视图,或描述不同视图构件间是如何相互作用的。
场景可以用文本表示,也可以用图形表示。

# 第三章

# 经典软件体系结构风格

摆了,建议直接看如下链接

https://blog.csdn.net/Jayphone17/article/details/103651076

原内容

# 管道与过滤器

每个构件有一组输入输出,构件读取输入流,经内部处理产生输出流,其中构件被称为过滤器,连接件被称为管道

# 数据抽象和面向对象系统

数据抽象和面向对象系统:在数据抽象和面向对象的基础上,将数据的表示方法和相应操作封装在一个抽象数据类型或对象中。其中构件是对象;

# 基于事件的系统

构件不会直接调用一个过程,而是触发或者广播一个或多个事件。事件包含了系统中其他构件的过程注册信息,事件的触发会导致另一模块中的过程调用,也被称为隐式调用。其中构件是模块;

# 分层系统

将系统组织成一个层次结构,每一层为其上层服务,并作为其下层的客户,层次系统风格的的体系结构一般包括核心层、基本工具层和用户系统层。

# 仓库系统

将系统组织成一个层次结构,每一层为其上层服务,并作为其下层的客户,层次系统风格的的体系结构一般包括核心层、基本工具层和用户系统层。

# 黑板系统

一般应用于信号处理领域和松耦合代理数据共享存取,由知识源、黑板数据结构和控制组成。

# C 2 风格

C2 结构是一个层次网络,包括构件和连接件两种软件元素。构件和连接键都是包含顶部和底部的软件元素。构件和构件之间只能通过连接件进行连接,而连接件之间则可以直接进行连接。构件的顶部、底部分别与连接件的底部、顶部连接,连接件的顶部、底部也分别与连接件的底部、顶部连接。

在 C2 体系结构中,构件之间的所有通信必须使用消息传递机制来实现。构件之间所有传递的信息可以分为两种,一种是向上层构件发出服务请求的请求消息,另一种是向下层构件发出指示状态变化的通知消息。连接件负责消息的过滤、路由、广播、通信和相关处理。

# 三层 C/S 风格

在 C/S 基础上加入了应用服务器,增加了应用层;

# B/S 风格

由浏览器、web 服务器、数据库服务器组成;

# CORBA

即公共对象请求代理风格;

# 正交软件体系结构

由组织层和线索的构件构成,其主要特征是由 n 个完全不同功能的线索和 m 个不同抽象的层组成,线索之间相互独立,系统有顶层的公共驱动层和底层的公共数据结构。

# 基于层次消息总线

即 HMB,基于层次消息总线、支持构件的分布和并发,构件之间通过消息总线进行通信;

image-20221014091808066