软件体系结构笔记

Joel Station (jjuprising.github.io)

⭐表示提纲内容,❗为考过的内容

错题

  • 4+1
  • C/S系统p54
    • 三层C/S体系结构p56
  • B/S结构,二者对比

image-20231206104329320

image-20231206104441435

1软件体系结构概论

❗⭐软件危机

概念

软件危机是指在计算机软件开发和维护过程中所遇到的一系列严重问题

表现

  • 软件成本日益增长

  • 开发进度难以控制

    • 逻辑体系庞大
    • 用户需求变化
    • 开发人员盲目增加
  • 软件质量差

  • 软件维护困难

    • 没有记录文档
    • 开发人员离开

原因

◎ 用户需求不明确

◎ 缺乏正确的理论指导

◎ 软件规模越来越大

◎ 软件复杂度越来越高

软件工程如何解决软件危机

软件工程解决软件危机三要素:方法工具过程,其中:

  • 软件工程方法为软件开发提供了“如何做”的技术,是完成软件工程项目的技术手段

  • 软件工具是开发过程中智力和体力的扩展和延申,提供半自动和自动的软件支撑环境

  • 软件工程过程是将软件工程的方法和工具综合起来达到及时进行软件开发的目的。

构件与软件重用

❗⭐软件重用

软件重用是指在两次或多次不同的软件开发过程中重复使用相同或相近软件元素的过程。软件元素包括程序代码、测试用例、设计文档、设计过程、需求分析文档甚至领域(domain)知识。通常,把这种可重用的元素称作软构件(software component),简称为构件。可重田的软件元素越大,就说重用的粒度(granularity)越大。

⭐构件模型三个主要流派

  • OMG(Object Management Group,对象管理集团)的CORBA(Common Object Request Broker Architecture,通用对象请求代理结构)
  • Sun的EJB(Enterprise Java Bean)
  • Microsoft的DCOM(Distributed Component Object Model,分布式构件对象模型)

⭐构建获取

  • 从现有构件中获得符合要求的构件,直接使用或作适应性修改,得到可重用的构件;
  • 通过遗留工程,将具有潜在重用价值的构件提取出来,得到可重用的构件;
  • 从市场上购买现成的商业构件,即COTS(Commercial Off-The-Shell)构件;
  • 开发新的符合要求的构件。

⭐构件管理

1.构建描述:构建模型是对构建本质的抽象描述

2.构建分类与组织

已有的三大类构建分类方法:

  • 关键字分类法

  • 刻面分类法

    • 主要思想来源于图书馆学
  • 超文本组织方法

    • 基于全文索引技术

构成一个系统的构件可分为以下5类:

  • 独立而成熟的构建
  • 有限制的构件
  • 适应性构件
  • 装配的构件
  • 可修改的构件

3.人员及权限管理

⭐’构件重用

构件开发的目的是重用,为了让构件在新的软件项目发挥作用,必须完成:

  1. 检索与提取构件

  2. 理解与评价构件

  3. 修改构件

  4. ⭐构件组装

    构件组装是指将库中的构件经适当修改后相互连接,或者将它们与当前开发项目中的软件元素相连接,最终构成新的目标软件。构件组装技术大致可分为:

    1. 基于功能的组装技术
    2. 基于数据的组装技术
    3. 面向对象的组装技术

⭐软件体系结构的兴起和发展

软件体系结构的定义

随着研究发展,定义不断完善

软件体系结构为软件系统提供了一个结构、行为和属性的高级抽象

由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。

软件体系结构不仅指定了系统的组织结构和拓扑结构并且显示了系统需求和构成系统的元素之间的对应关系,提供了一些设计决策的基本原理。

发展阶段

  • 无体系结构设计阶段。以汇编语言进行小规模应用程序开发为特征。
  • 萌芽阶段。出现了程序结构设计主题,以控制流图数据流图构成软件结构为特征。
  • 初期阶段。出现了从不同侧面描述系统的结构模型,如UML
  • 高级阶段。以描述系统的高层抽象结构为中心,不关心具体的建模细节,划分了体系结构模型与传统软件结构的界限。以4+1模型为标志

2软件体系结构建模

⭐种类

结构模型

  • 最直观、最普遍
  • 以体系结构的构件、连接件和其他概念来刻画结构
  • 力图用结构反映系统重要语义内容

研究结构模型的核心——体系结构描述语言

框架模型

  • 与结构模型类似
  • 但更侧重整体结构
  • 主要以特殊问题为目标,建立只针对和适应问题的结构

动态模型

  • 是对结构或框架模型的补充,研究系统“大颗粒”行为性质
  • 例如描述系统的重新配置或演化

动态可以指系统总体结构的配置、建立或拆除通信通道或计算的过程

过程模型

  • 研究内容:构造系统的步骤和过程
  • 结构是遵循某些过程脚本的结果

功能模型

  • 功能模型认为体系结构是由一组功能构件按层次组成,下层为上层提供服务
  • 可以看作一种特殊的框架模型

⭐4+1模型

Kruchten 1995年提出

  • 4+1模型从5个不同的视角,来描述软件体系结构

    • 逻辑视图

    • 进程视图

    • 物理视图

    • 开发视图

    • 场景视图

  • 每个视图只关系系统的一个侧面,结合才一起能反映系统软件体系结构的全部内容

image-20230927090653322

image-20230927094351154

逻辑视图

  • 逻辑架构主要支持功能性需求——即在为用户提供服务方面系统所应该提供的功能
  • 在面向对象技术中,通过抽象、封装和继承,可以用对象模型来代表逻辑视图,用类图描述逻辑视图

表示方法:Booch标记法

image-20230927095041358

类图用来显示一个类的集合和它们的逻辑关系:关联、使用、组合、继承等等

例子:

image-20230927095238536

image-20230927095304341

开发视图

  • 也称模块视图,关注软件开发环境下实际模块的组织。主要侧重于软件模块的组织和管理
  • 大部分情况考虑的内部需求与以下几项有关:
    • 开发难度
    • 软件管理
    • 重用性
    • 通用性
    • 工具集、编程语言所带来的限制
  • 关注程序包,可以直接使用第三方SDK现成框架类库,以及开发的系统将运行于其上的系统软件中间件
  • 开发模型通过系统输入输出关系的模型图和子系统图来描述

表示方法:Booch方法的变形

image-20230927095943041

开发视图的分割

推荐使用分层(layered)的风格,定义4到6个子系统层

image-20240107101449039

进程视图

又称处理视图、过程视图、并发视图

  • 侧重系统的运行特性,关注一些非功能性需求
    • 强调并发性、分步性、系统集成性和容错能力
    • 关注对象、进程、线程等运行时的概念,以及相关的并发、同步、通信等问题
  • 可以描述为多层抽象,每个级别关注不同的方面。在最高层抽象中,进程结构可以看作是构成一个执行单元的一组任务。

image-20240107102502125

image-20240107102509193

物理视图(软件到硬件的映射)

主要考虑如何把软件映射到硬件上,最终如何安装或部署到物理机器

它通常要考虑到系统性能、规模、可靠性等。解决系统拓扑结构、系统安装、通讯等问题

软件到节点的映射要有较高的灵活性,环境改变时,对系统其他视图的影响最小

image-20240107102417301

image-20240107102449950

各视图之间的关系

开发视图和进程视图的关系

  • 开发视图一般偏重程序包在编译时期的静态依赖关系,而这些程序运行起来之后会表现为对象、线程、进程
  • 进程视图比较关注的正是这些运行时单元的交互问题

物理视图和进程视图的关系

  • 进程视图特别关注目标程序的动态执行情况
  • 物理视图重视目标程序的静态位置问题;物理视图是综合考虑软件系统和整个IT系统相互影响的架构视图。

场景

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

融合所有的视图

image-20240107105944292

小结

  • 逻辑视图和开发视图描述系统的静态结构

  • 进程视图和物理视图描述系统的动态结构

  • 不同软件系统,侧重的角度有所不同。

    • 对于信息管理系统来说,比较侧重于从逻辑视图和开发视图来描述系统
    • 对于实时控制系统,比较注重于从进程视图和物理视图来描述系统
  • 并不是所有的软件架构都需要4+1视图,无用的视图可以省略

    • 只有一个处理器可以省略物理视图
    • 仅有一个进程/程序,可以省略过程视图
    • 非常小型的系统,甚至可能逻辑视图与开发视图非常相似,而不需要分开描述
  • 场景对于所有的情况均适用

image-20231011090546301

实例

  • 某型号设备调试系统
    • 设备调试员通过使用该系统,可以察看设备状态(设备的状态信息由专用的数据采集器实时采集)、发送调试命令

image-20240107110329891

逻辑视图:设计满足功能需求的架构

应用层负责什么,通讯层负责什么…

  • 应用层负责设备状态的显示,并提供模拟控制台供用户发送调试命令。
  • 应用层使用通讯层和嵌入层进行交互,但应用层不知道通讯的细节。
  • 通讯层负责在RS232协议之上实现一套专用的”应用协议”。
  • 当应用层发送来包含调试指令的协议包,由通讯层负责按RS232协议将之传递给嵌入层

开发视图:设计满足开发期质量属性的架构

采用哪些现成框架、哪些第三方SDK、哪些中间件平台

进程视图:设计满足运行期质量属性的架构

关注进程、线程、对象等运行时概念,以及相关的并发、同步、通信等问题

设备调试系统采用多线程的设计

物理视图:和部署相关的架构决策

  • 目标程序及其依赖的运行库和系统软件
  • 最终如何安装或部署到物理机器
  • 如何部署机器和网络来配合软件系统的可靠性、可伸缩性等要求

⭐体系结构的核心模型

核心模型的5种元素:

  • 构件
    • 具有某种功能的可重用软件模板单元
    • 表示系统中主要的计算单元和数据存储
    • 分类:复合构件(有其他复合和原子构件连接而成)、原子构件(不可再分的)
  • 连接件
    • 构件之间的交互
    • 连接件接口由一组角色组成,每一个角色定义了该连接件表示的交互的参与者
  • 配置
    • 表示构件和连接件的拓扑逻辑和约束
  • 端口
    • 表示构件和外部环节的交互点
  • 角色

image-20240107120344014

⭐体系结构的生命周期模型

需求分析–建立体系结构–设计–实现–测试

3软件体系结构风格

软件体系结构的组成:

  • 构件,各种基本的软件构造模块(函数、对象、模式等);
  • 连接件,将它们组合起来形成完整的软件系统
  • 物理分布
  • 约束
  • 性能

体系结构=构件+连接件+约束

软件体系结构风格的定义

  • 惯用模式

    • 软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式
  • 词汇表和约束,即构件连接件+约束

    • 体系结构风格定义了一个系统家族,即一个体系结构定义一个词汇表和一组约束。
    • 词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。
  • 共同的结构和语义特征

    • 体系结构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统

熟悉的软件体系结构

  • Client/Server结构
  • Browse/Server结构
  • Three-tier三层cs结构
  • Distributed分布式结构

软件体系结构风格分类

  • 经典SA风格
  • 其他常用SA风格
  • 异构(复合)SA风格

什么是数据流风格

  • 数据从一个处理单元流入到另一个处理单元,每经过一个单元就做一次转换

注意:数据流风格不是某个过程的数据流图,它描述的是系统体系结构级别的设计

⭐管道过滤器风格

是一种数据流风格,数据从一个处理单元流向另一个处理单元,每经过一个单元就做一次转换

基本组成

graph LR
过滤器1--管道1-->过滤器2--管道2-->过滤器3

每一个构件(过滤器)都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生数据流。

连接件(管道)就像数据流传输的管道,将一个过滤器的输出传入到另一个过滤器的输入。

过滤器必须是独立的实体

  • 不能与其他过滤器共享数据
  • 且不知道自己的上下游标识
  • 构件:过滤器,处理数据流
    • 一个过滤器封装了一个处理步骤
    • 数据源点和数据终止点可以看作是特殊的过滤器
      • 目标:将源数据流变成目标数据
      • 五种变换类型:增加/丰富、删减/浓缩、转换、合并、分解
  • 连接件:管道,连接一个源和一个目的过滤器
    • 作用:转发数据流
      • 单向流
      • 可能具有缓冲区
    • 不同的管道中流动的数据流,具有不同的数据格式

连接件定义了数据流图,形成拓扑结构

过滤器读取与处理数据流的方式: 递增地读取和消费数据流,所以在输入被完全消费之前,输出便产生了。

应用:DOS管道命令,Unix管道,编译器

❗优缺点

优点6个:

  • 使得系统中的构件具有良好的隐蔽性和高内聚、低耦合的特点
  • 设计者可以将整个系统的输入、输出特性简单的理解为各个过滤器功能的合成
  • 支持功能模块的复用
  • 较强的可维护性和可扩展性
  • 支持一些特定的分析,如吞吐量计算和死锁检测等
  • 具有并发性

缺点4个:

  • 交互式处理能力弱
  • 设计者也许不得不花费精力协调两个相对独立,但又存在某种关系的数据流之间的关系
  • 过滤器具体实现复杂
  • 往往导致系统处理过程的成批操作

⭐面向对象风格

基础:数据抽象和面向对象系统

数据的表示方法和它们的相应操作封装在一个抽象数据类型或对象中

image-20240106160140532

特点:

  • 对象是构件
  • 对象之间也就是构件之间交互方式:函数调用和过程调用

优缺点

优点:

  • 一个对象对外界隐藏了自己的详细信息,改变一个对象的表示,不会影响系统的其它部分
  • 继承和封装方法为对象复用提供了技术支持
  • 对象将数据和操作封装在一起,提高了系统内聚性减小了模块之间的耦合程度,使系统更容易分解为既相互作用又相互独立的对象集合

缺点:

  • 如果一个对象要调用另一个对象,则必须知道它的标识和名称
  • 会产生连锁反应,如果一个对象的标识发生改变,那么必须修改所有显式调用它的其它对象,并消除由此引发的副作用

⭐基于事件的系统/隐式调用

  • 构件不直接调用一个过程,而是触发或广播一个或多个事件
  • 系统中的其它构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所有过程,这样,一个事件的触发就导致了另一模块中的过程的调用。因此这种风格也成为隐式调用

(1)显示调用

​ 显示调用是指在程序中能找到相应的调用代码,或者说是手动调用的

(2)隐式调用

​ 隐式调用是指程序中找不到相应的调用代码,或者说是系统编译器根据条件自动调用的

特点:

  • 构件:模块,可以是过程也可以是事件的集合
  • 连接件:往往是以过程之间的隐式调用来实现

❗优缺点

优点:

  • 事件声明者不需要知道哪些构件会响应事件,因此,不能确定构件处理的先后顺序,甚至不能确定事件会引发哪些过程调用

    这一条也是基于事件的隐式调用的主要特点

  • 提高了软件复用能力,只要在系统事件中注册构件的过程,就可以将该构件集成到系统中

  • 便于系统升级,只要构件名和事件中所注册的过程名保持不变,原有构件就可以被新构件所替代

缺点:

  • 构件放弃了对系统计算的控制。一个构件触发一个事件时,不能确定其它构件是否会响应它。而且即使它知道事件注册了哪些构件的构成,它也不能保证这些过程被调用的顺序。
  • 数据交换的问题。有时数据可被一个事件传递,但另一些情况下,基于事件的系统必须依靠一个共享的仓库进行交互。在这些情况下,全局性能和资源管理便成了问题
  • 过程的语义必须依赖于被触发事件的上下文约束,关于正确性的推理存在问题。

分层系统

在层次系统中,系统被组织成若干个层次,每个层次由一系列构件组
成:
层次之间存在接口,通过接口形成call/return的关系

  • 下层构件向上层构件提供服务
  • 上层构件被看作是下层构件的客户端

例如DBMS的“三级模式-两层映像”

image-20231101085309731

优缺点

优点3条

  • 支持基于抽象程度递增的系统设计,使设计者可以把一个复杂系统按递增的步骤进行分解
  • 支持功能增强,因为每一层至多和相邻的上下层交互,因此功能的改变最多影响相邻的上下层
  • 支持重用。只要提供的服务接口定义不变,同一层的不同实现可以交换使用。这样,就可以定义一组标准的接口,而允许各种不同的实现方法

缺点2条

  • 并不是每个系统都可以很容易地划分为分层的模式,甚至即使一个系统的逻辑结构是层次化的,出于对系统性能的考虑,系统设计师不得不把一些低级或高级的功能综合起来:
  • 很难找到一个合适的、正确的层次抽象方法

⭐仓库系统及知识库

应用:主要用在交换或共享大量数据的软件中

两种不同的构件:

(1)中央数据结构构件:代表系统当前状态;

(2)一些相对独立的构件的集合:这些构件对中央数据存储进行操作。

黑板模式

image-20231101094120702

DMZ是为了解决安装防火墙后外部网络不能问内部网络服务器的问题,而设立的缓冲区,这个缓冲区位于内部网络和外部网络之间的小网络区域内。

⭐组成
  • 知识源,提供领域专门知识
  • 黑板数据结构,提供数据存储和通信。
  • 控制,解决策略编码,知识源响应偶然事件。
优缺点

优点:

  • 优点在于可扩充性比较强,模块间耦合比较松散,便于扩充。
  • 便于多客户共享大量数据,他们不关心数据何时有的、谁提供的、怎样提供的。
  • 既便于添加新的作为知识源代理的应用程序,也便于扩展共享的黑板数据结构。
  • 知识源可重用以及支持容错性和健壮性

缺点:

1.测试困难
由于黑板模式的系统有中央数据构件来描述系统的体现系统的状态,所以系统的执行没有确定的顺序,其结果的可再现性比较差,难于测试

2不能保证有好的求解方案:
一个黑板模式的系统所提供给我们的往往是解决问题的百分比,而不是最佳解决方案

3.效率低
黑板模式的系统在拒绝错误假设的时候要承受多余的计算开销,所以导致效率比较低。

4.开发成本高
绝大部分黑板模式的系统需要用几年的时间来进化,所以开发成本较高

5.缺少对并行机的支持
黑板模式要求黑板上的中心数据同步并发访问,所以缺少对不并行机的支持

⭐C2风格

  • 系统中的构件和连接件都有一个顶部和一个底部;
  • 构件的顶部应连接到某连接件的底部,构件的底部则应连接到某连接件的顶部,而构件与构件之间的直接连接是不允许的;
  • 一个连接件可以和任意数目的其它构件和连接件连接;
  • 当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部。

核心,构件-连接件和连接件-连接件都要遵循顶部连底部(底部连顶部)的规则,其中构件之间不能直接相连

特点:

  • 系统构件可实现应该用需求,并能将任意复杂度的功能封装在一起
  • 所有构件的通信以连接件为中介的异步信息交换机制实现
  • 构件独立、依赖少。

⭐C/S风格——基本概念

C/S软件体系结构是基于资源不对等,且为实现共享而提出来的

三个组成部分:数据库服务器、客户应用程序和网络

任务分配-服务器

服务器(饭堂)的任务:

  • 数据安全(保证食物质量)
  • 数据并发性控制(排队打饭)
  • 数据完整性(1块钱打1块钱的饭)
  • 数据的备份和恢复(做记录)

客服端任务:

  • 提供用户与数据库的交互界面(一只碗)
  • 提交和接受来自数据库的信息(红烧肉)
  • 根据数据,执行逻辑任务(吃、消化)

C/S处理流程

image-20231108093333306

优点

  • 分离客户端、服务器端,增加了系统灵活性,易于对系统进行扩充和缩小
  • 客户端与服务端直接相连,没有中间环节,响应速度快
  • 操作界面漂亮、形式多样
  • 方便实现复杂的业务流程

缺点

  • 要专门为客户安装程序,分布功能弱
  • 兼容性差
  • 成本高
  • 客户端压力大(胖客户端)
  • 软件移植、维护和升级困难
  • 新技术不能轻易应用

三层C/S体系结构

  • 第一层:用户界面一表示层,图形化、事件驱动的
  • 第二层:业务逻辑一功能层,过程化的
  • 第三层:数据库一数据层,结构化和非过程化

image-20240106164332210

雇了保姆

保姆的职责:跑腿、盛饭、打卡

客户:饭来张口、衣来伸手

服务器:提供所需饭菜

相比于两层结构的优势:

  • 服务器安全性提高
  • 客户端成功减肥
  • 易于维护(若逻辑有问题,不需要重新安装客户端)
  • 易于开发,每层可用不同的语言。
❗优点
  1. 允许合理地划分三层结构的功能,使之在逻辑上保持相对独立性,使系统的逻辑结构更加清晰,提高系统的可维护性和可扩展性
  2. 允许合理选择适用的相应平台和硬件系统,使得在负荷和处理能力上分别适用于结构清晰的三层;并且各平台具有良好的可升级性和开放性
  3. 各层可以并行开发,且能各自选择最合适的开发语言
  4. 允许充分利用功能层有效隔离开表示层与数据层

要注意的问题:

  • 三层C/S结构各层间的通信效率若不高,即使分配给各层的硬件能力很强,其作为整体来说也达不到所要求的性能。
  • 设计时必须慎重考虑三层间的通信方法、通信频度及数据量。这和提高各层的独立性一样是三层C/S结构的关键问题。

⭐B/S风格P64

浏览器/服务器(B/S),具体结构为 浏览器/Web服务器/数据库服务器

三层B/S结构

表示层:浏览器

逻辑层:web服务器、应用服务器

数据层:数据库服务器

image-20240106115712704

image-20240106115929712

优点

  • 安装、维护、修改全在服务器端
  • 工作量减少
  • 降低成本
  • 开放性强,都可以来访问
  • 平台无关性,可以任意扩展
  • 信息发布和信息交流更加灵活

缺点

  • B/S体系结构缺乏对动态页面的支持能力,没有集成有效的数据库处理功能
  • B/S体系结构的系统扩展能力差,安全性难以控制。
  • 采用B/S体系结构的应用系统,在数据查询等响应速度上,要远远地低于C/S体系结构。
  • B/S体系结构的数据提交一般以页面为单位,数据的动态交互性不强,不利于在线事务处理(OLTP)应用

⭐B/S和C/S比较

网络 安全控制 软件重用 维护开销 信息交流 数据
C/S 局域网 能力高 不高 机械式 重在处理
B/S 广域网 能力低 较强 信息中心 重在共享

异构风格(了解)

结合C/S和B/S,发挥各自优点进行结合

有两种模型:内外有别和查改有别

批处理序列

批处理风格的每一步处理都是独立的,并且每一步是顺序执行的。只有当前一步处理完,后一步处理才能开始。数据传送在步与步之间作为一个整体。

组件为一系列固定顺序的计算单元,组件间只通过数据传递交互。每个处理步骤是一个独立的程序,每一步必须在前一步结束后才能开始,数据必须是完整的,以整体的方式传递。

批处理的典型应用:

(1)经典数据处理;
(2)程序开发;
(3)Windows 下的 BAT 程序就是这种应用的典型实例。

调用/返回风格

调用返回风格顾名思义,就是指在系统中采用了调用与返回机制。利用调用 - 返回实际上是一种分而治之的策略,其主要思想是将一个复杂的大系统分解为一些子系统,以便降低复杂度,并且增加可修改性。程序从其执行起点开始执行该构件的代码,程序执行结束,将控制返回给程序调用构件。

调用 / 返回风格架构主要包括三种具体的架构风格:主程序 / 子程序;面向对象风格;层次结构。

主程序/子程序

主程序 / 子程序风格是结构化开发时期的经典架构风格。这种风格一般采用单线程控制,把问题划分为若干处理步骤,构件即为主程序和子程序。子程序通常可合成为模块。过程调用作为交互机制,即充当连接件。调用关系具有层次性,其语义逻辑表现为子程序的正确性,取决于它调用的子程序的正确性。

⭐描述方式

体系结构描述方式标准

  • 语义丰富性
  • 语义精确性
  • 形式化程度

❗⭐种类

  • 图形表达工具
  • 模块内连接语言 MIL
  • 基于软构件的系统描述语言
  • 软件体系结构描述语言 ADL Architecture Description Language

4.2考试不考

4软件体系结构描述语言

⭐ADL

ADL是这样一种形式化语言,它在底层语义模型的支持下,为软件系统的概念体系结构建模提供了具体语法概念框架。基于底层语义的工具为体系结构的表示、分析、演化、细化、设计过程等提供支持

三个基本元素是:

  • 构件
    • 计算或数据存储单元
  • 连接件
    • 用于构件之间交互建模的体系结构构造块及其支配这些交互的规则
  • 体系结构配置
    • 描述体系结构的构件与连接件的连接图

ADL与其他语言的比较:

构造能力:ADL能够使用较小的独立体系结构元素来建造大型软件系统;

抽象能力:ADL使得软件体系结构中的构件和连接件描述可以只关注它们的抽象特性,而不管其具体的实现细节

重用能力:ADL使得组成软件系统的构件连接件甚至是软件体系结构都成为软件系统开发和设计的可重用部件

组合能力:ADL使得其描述的每一系统元素都有其自己的局部结构,这种描述局部结构的特点使得ADL支持软件系统的动态变化组合

异构能力:ADL允许多个不同的体系结构描述关联存在

分析和推理能力:ADL允许对其描述的体系结构进行多种不同的性能和功能上的多种推理分析。

6可扩展标记语言

XML概述

❗⭐XML定义

  • XML是一套定义语义标记的规则,这些标记将文档分成了许多部件并对这些部件加以标识
  • XML是元标记语言,用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言
  • 和HTML一样,来自标准通用标记语言(lStandard Generalized Markup Language,SGML)

SGML的10个目标

  • 能够直接应用在Internet上
  • 能被各式应用软件使用
  • 能与SGML兼容
  • 能轻易发展XML相关软件
  • 简化SGML
  • 能够直接应用在Internet上
  • 能被各式应用软件使用
  • 能与SGML兼容
  • 能轻易发展XML相关软件
  • 能简化SGML

⭐XML的特点

  • 简洁有效
    • 是精简的SGML,保留了可拓展性
  • 易学易用
  • 开放的国际化标准
    • W3C正式批准
  • 高效且可扩充

解析XML

⭐XML与HTML的区别

HTML是一种格式化的语言,一个HTML文本可以看作一个格式化的程序

XML是一种元标记语言

XML定义了一套元句法,与特定领域有关的标记语言都必须遵守

两者同根——SGML,均基于文本

HTML

  • HTML文档主要包含显示格式、主要是为了浏览,而不是为计算机所使用,是显示格式描述语言
  • HTML包含预定义的标记(Tag)集,易学易于访问,但难以数据重用,可扩展性差。

XML

  • 数据可重用为切入点,可定义自己的标记集,能让其他程序理解
  • 比HTML易于扩展,XML标记表示数据的逻辑结构,为不同应用以不同方式分析的同时,进行严格的语法和语义检查
  • XML文档将数据与显示格式分离。为信息开放、共享和交互提供基础

XML优势

  • XML模式使用XML语法
  • XML模式支持数据类型
  • XML模式是可扩展
  • XML模式有更强的表达能力

⭐CSS与XSL的比较

XSL

  • XSL是专门用于XML文档的样式语言,当成把XML转变成HTML的语言
  • 能够筛选和排序XML文档中数据的语言
  • 能够根据XML的数据数值格式化XML数据的语言
  • XSL文档本身就是结构完整的XML语言

image-20240107145815861

CSS XSL
只能改变特定元素的格式,也只能以元素为基础 可以重新排列元素并对元素进行重新排序
具有广泛的浏览器支持 更为灵活和强大,可更好地适用于XML文档。带XSL样式单的XML文档可以很容易地转换为带CSS样式单的HTML文档
一些固定数据进行排版:“HTML+CSS” 如果这些数据独立于程序存在和使用,“HTML+XML+XSL”

XML编程接口

API接口 – DOM

  • 解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用DOM接口来操作这个树结构
  • 用户可以遍历树以了解原始文档包含了什么,可以删除树的几个部分,还可以重新排列树和添加新的分支,等等。
  • DOM可以用来解释和操作XML文档

API接口 – SAX(Simple API for XML,SAX)

SAX是一个接口,也是一个软件包。
SAX是事件驱动型XML解析的一个标准接口

API接口 – JDOM

JDOM是基于Java技术的开放源码项目

API接口 – JAXP

为了修正SAX和JDOM的一些问题,SUN发布了JAXP,该API为使用DOM、SAX和XSLT处理XML文档提供了公共接口。

⭐xml编程接口有哪几种

API接口有DOM、SAX、JDOM、JAXP

❗⭐xml接口的选择 考虑什么因素 怎么选

(1)要用Java编写应用程序吗?JAXP

JAXP使用DOM、SAX和JDOM;如果用Java编写代码,那么应使用JAXP将代码与各种解析器实现的细节隔离。

(2)一旦解析了XML文档,还需要多次访问那些数据吗?DOM

如果需要回过头来访问 XML文件的已解析版本,DOM可能是正确的选择。而SAX事件被触发时,如果以后需要它,则由(开发人员)自己决定以某种方式保存它。如果需要访问不曾保存的事件,则必须再次解析该文件;而DOM自动保存所有的数据。

(3)应用程序将如何部署?SAX

如果应用程序将要作为Java applet部署,那么会希望使要下载的代码数量最小,SAX解析器比DOM解析器小,而使用JDOM时,除了SAX或DOM解析器之外还要求编写少量的代码。

(4)只需要XML源文件的少量内容吗?SAX

如果只需要XML源文件的少量内容,那么 SAX可能是正确的选择。SAX不会为源文件中的每个东西创建对象。使用SAX,要检查每个事件以了解它是否与需要有关,然后相应地处理它。

(5)正在一台内存很少的机器上工作吗?SAX

若是的话,不管可能考虑到的其它因素是什么,SAX都是最佳选择。

XML开发工具

DTD(Document Type Definition)

DTD是关于XML文档中出现的标记和元素结构的语法约束,它可用来验证一个XML文档。

XSL(eXtensible StyleSheet Language)

XML把内容和显示格式分开

XSLT (XSL Transformation)

XSLT的基本原理是模式和模板匹配,是一个用来根据一个XSL样式表将一个XML文档转换到另一个XML文档的语言

XPath (XML Path Language,XML路径语言)

Xpath是一个用来指明XML文档中部件的地址的语言。

Xpointer(XML Pointer)

XPointer 是指向文档片段的指针。当文档片段发生变化时仍然可以发现。便于Server处理。

XLink是一种用XML元素向XML文档中加入链接的机制。

命名空间

命名空间用于区分具有相同名而又在相应的上下文中具有不同含义的元素和属性。

XML Schema

XML Schema 用于对XML文档的内容及其语义的约束机制进行有效的类型检验

XML的实现

基本流程:

  • 用XML构造一个标记语言
  • 生成XML文档
  • 解释XML文档
  • 显示XML文档

XML的应用

  • 数据交换与信息共享
  • Web应用

8Web服务体系结构

Web服务的核心技术

  • 作为WEB服务基础的XML
  • 简单对象访问协议SOAP
  • WEB服务描述协议WSDL
  • 统一描述、发现和集成协议UDDI

SOA

面向服务的体系结构(Service-Oriented Architecture,SOA)。

⭐概念

Gartner定义:SOA是一种客户端/服务器的软件设计方法,应用由软件服务和软件服务使用者组成,SOA与大多数通用的客户端/服务器模型不同之处,在于它着重强调软件构件的松散耦合,并使用独立的标准接口。

⭐特征

◎ 松散耦合

◎ 粗粒度服务

◎ 标准化接口

⭐关键技术

SO的技术服务栈

Web服务要以一种可互操作的方式执行发布、发现和绑定操作,必须有一个包含每一层标准的web服务栈

整个web服务的技术系列称为web服务栈

  • web服务有那几层,每一层有什么作用
服务栈 主要技术
发现服务层 UDDI、DISCO
描述服务层 WSDL、XML、Schema
消息格式层 SOAP、REST
编码格式层 XML
传输协议层 HTTP、TCP/IP、SMTP等
  • Web服务栈的发现服务层:帮助客户端应用程序解析服务的位置

    • 通过UDDI实现: UDDI规范描述了WEB服务的概念,定义了一种编程接口

    • 通过UDDI

      • 企业可以发布自己的WEB服务供其他企业查询和调用

      • 也可以查询特定的描述信息,动态绑定到该服务商

  • WEB服务栈的描述服务层

    • 为客户端应用程序提供与远程服务交互的描述信息
    • 通过WSDL实现:WSDL为服务提供者提供以XML格式描述WEB服务请求的标准格式
    • 将网络服务描述为能将进行消息交互的通信端点集合,以表达一个web服务的功能、位置和调用方法
  • Web服务栈的消息格式层

    • 保证客户端应用程序和服务器端在格式设置上保持一致
    • 通过soap协议实现
      • Soap定义了服务请求者服务提供者之间的消息传递规范
      • Soap用xml来格式化信息,用HTTP承载消息
  • Web服务栈的编码格式层

    • 为客户端和服务器之间提供一个标准的独立于平台的数据交换编码格式
    • 一般通过xml实现
  • Web服务栈的传输协议层

    • 为客户端和服务器提供交互的网络通信协议
    • 一般通过HTTP和SMTP实现
      • HTTP是广泛使用的协议,为WEB服务部件通过internet交互奠定了协议基础,并具有良好的穿透防火墙功能
      • SMTP适用于异步通信,在服务中断时,SMTP可以自动进行重试

SOA的实现方法

主流的方式有Web Service、企业服务总线和服务注册表

⭐Web Service

❗概念

Web service 就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API

Web服务是一个应用逻辑单元,它通过标准的XML数据格式和通用的Web协议(如HTTP、SOAP、WSDL、UDDI等)为其他应用程序提供信息。

具体来说,Web服务利用网络进行通信,它提供了一些操作集合的接口,以实现特定的任务,其他应用程序通过调用这些接口实现信息的交换。

目标

为了让地理上分布在不同区域计算机和设备协同工作,为用户提供各种各样的服务

l用户可以控制要获取信息的内容、时间、方式,而不必像目前这样,在无数个信息孤岛中浏览,去寻找自己需要的信息

Web service平台三个技术

  • XML
  • SOAP
  • WSDL

Web服务逻辑层

  • 数据层 保存web服务需要的所有物理数据
  • 数据访问层 为业务层提供数据服务
  • 业务层 提供业务逻辑
  • 业务面 提供简单接口 直接映射到web服务提供的过程
  • 监听者 接收带有请求服务的输入消息,解析这些消息,并把这些请求发送给业务面的相应方法

Web Service优势主要优势:

  • 跨越不同软硬件平台的分布式应用程序之间的互操作性
  • 通过使用 Web 协议的防火墙,轻松、广泛地访问应用程序
  • 跨平台、跨语言的数据模型 (XML) 方便了异构分布式应用程序的开发

❗特点:

  • 使用标准协议规范
  • 使用协议的规范性
  • 高度集成能力
  • 完好的封装性
  • 松散耦合

⭐三种角色三种操作

三种工作角色(三种逻辑构件)

  • 服务提供者。提供服务以使服务可用
  • 服务请求者。可在应用程序中通过服务代理请求服务,调用所需服务
  • 服务注册中心。中介作用,服务的注册构件

三种操作

  • 发布。服务提供者需要发布用户描述,以便用户请求者查找使用
  • 查找。服务请求者直接检索服务描述或在服务注册中心查询所要求的服务类型。两个阶段
    • 设计阶段,为了程序开发而查找服务的接口描述
    • 运行阶段,为了调用而查找服务的位置描述
  • 绑定。服务的具体实现。服务请求者使用服务描述中的绑定细节来定位、联系并调用服务,从而在运行时与服务进行交互。可分为动态绑定和静态绑定。
    • 动态绑定,服务请求者通过服务注册中心查找服务描述,并动态地与服务交互
    • 静态绑定,服务请求者已经与服务提供者达成默契,通过本地文件或其他方式直接与服务进行绑定。

⭐WSDL服务描述语言

描述服务层的实现

  • 是对服务进行描述的语言,有一套基于XML的语法定义,用于将对包含面向文档或面向过程信息的网络服务操作描述为一组端点。
  • WSDL为客户端应用程序提供正确地与远程服务交互的描述信息
  • 服务接口定义和服务实现定义结合在一起组成了完整的WSDL的定义
  • WSDL是可扩展的。

⭐UDDI统一描述、发现和集成协议

发现服务层的实现通过UDDI

  • UDDI规范描述了WEB服务的概念,定义了一种编程接口
  • 通过UDDI,企业可以发布自己的WEB服务供其他企业查询和调用,也可以查询特定的描述信息,动态绑定到该服务商

❗⭐SOAP消息封装协议

Web服务栈的消息格式层通过soap协议实现

SOAP以XML形式提供一个简单、轻量的用于在分散或分布环境中交换结构化和类型信息的机制。

  • Soap定义了服务请求者和服务提供者之间的消息传递规范
  • Soap用xml来格式化信息,用HTTP承载消息

四个部分:

  • SOAP信封是SOAP消息在句法上的最外层,它构造和定义了一个整体的表示框架
  • SOAP编码规则是一个定义传输数据类型的通用数据类型系统,这个简单类型系统包括了程序语言、数据库、和半结构数据中不同类型系统的公共特性;
  • SOAP RPC表示定义了远程过程调用和应答的协议
  • SOAP绑定定义了一个使用底层传输协议来完成结点间交换SOAP信封的约定

SOAP消息封装3个部分:

  • 封装
  • SOAP头,header
  • SOAP体,body

Web服务体系结构的优势

◎ 高度的通用性易用性

◎ 完全的平台、语言独立性

◎ 高度的集成性

◎ 容易部署和发布

SOAP

简单对象访问协议

概念,结构,组成部分

SOAP是一个基于XML的、在松散分布式环境中交换结构化信息轻量级协议

SOAP包含4个部分,分别为SOAP信封、SOAP编码规则、SOAP RPC表示、SOAP绑定

  • SOAP信封是SOAP消息在句法上的最外层,它构造和定义了一个整体的表示框架;
  • SOAP编码规则是一个定义传输数据类型的通用数据类型系统,这个简单类型系统包括了程序语言、数据库、和半结构数据中不同类型系统的公共特性;
  • SOAP RPC表示定义了远程过程调用和应答的协议;
  • SOAP绑定定义了一个使用底层传输协议来完成结点间交换SOAP信封的约定。

image-20231206090953394

体系结构

  • SOAP客户机 是一台有SOAP机制的机器,它可以产生SOAP请求并通过HTTP发送到服务器

  • SOAP服务器 也是一台有SOAP机制的机器,能够接收来自SOAP客户机的请求,并对之做出适当的响应

    三个实体:服务管理器、被部署服务的列表、XML转换程序

  • 实际服务

总结

当 SOAP 客户机向 SOAP 服务器发送 SOAP 消息时,用 HTTP 协议传输。这就叫做 SOAP 与 HTTP 绑定

当服务端根据用户请求返回请求结果时,又一次用 HTTP 绑定来传输 SOAP 响应

9富互联网应用体系结构

❗⭐RIA(富互联网应用)

提出

Ø操作复杂性

Ø数据复杂性

Ø交互复杂性

RIA是Web开发和部署模式的一种演变,“富”的含义有两种,分别是丰富的数据模型丰富的用户界面。