《软件体系结构原理、方法与实践》第二版期末考试复习总结,本文仅归纳了考试重点。
题库链接 https://www.docin.com/p-2325678244.html
第1章 软件体系结构概论
1.1 软件危机
软件危机的定义(填空题):__1968 __年,在德国召开的国际软件工程会议,第一次提出了软件危机的概念。软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
-
软件危机的表现有哪些?
- 软件成本日益增长
- 开发进度难以控制
- 软件质量差
- 软件维护困难
-
软件危机产生的原因
- 用户需求不明确
- 缺乏正确的理论指导
- 软件规模越来越大
- 软件复杂度越来越高
-
如何客服软件危机
分解、抽象、封装、信息隐藏。用现代工程的概念、原理、技术和方法进行计算机软件的开发、管理和维护。
-
软件工程的三要素是什么,代表什么含义?
- 方法:软件工程方法为软件开发提供了“如何做”的技术,是完成软件工程项目的技术手段。
- 工具:软件工具是人们再开发软件的活动中智力和体力的扩展和延伸,为软件工程方法提供了自动的或半自动的软件支撑环境。
- 过程:软件工程过程是将软件工程的方法和工具综合起来以达到合理、及时地进行计算机软件开发的目的。
1.2 构件与软件重用
构件的定义:构件是指语义完整、语法正确和用可重用价值的单位软件,是软件重用过程中可以明确辨识的系统。例如:高德地图、支付宝支付、微信支付等。
构件模型的3个流派:OMG的CORBA;SUN的EJB;Microsoft的DCOM
- 构件获取的方法有哪些?
- 自己开发新的符合要求的构件
- 从市场上购买现成的商业构件
- 从现有构件库中寻找
- 从遗留系统中提取改进
- 构件分类方法
- 关键字分类法:根据领域分析的结果将应用领域的概念按照从抽象到具体的顺序逐次分解为树状或有向无回路图结构。每个概念用一个描述性的关键字表示。不可分解的原子级关键字包含隶属于它的某些构件。
- 刻面分类法:定义若干用于刻画构建特征的“面”,每个面包含若干概念,这些概念表述构建在面上的特征。青鸟构件库采用的刻面包括:使用环境、应用领域、功能、层次、表示方法。
- 超文本组织方法:所有构件必须辅以详尽的功能或行为说明文档;说明文档中出现的重要概念或构件以网状链接方式项目连接。
1.3 软件体系结构的兴起和发展
软件体系结构的定义:软件体系结构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。软件体系结构不仅指定了系统的组织结构和拓扑结构,并且显示了系统需求和构成系统的元素之间的对应关系,提供了一些设计决策的基本原理。
软件体系结构:构件的集合,包括:处理构件、数据构件和连接构件。
研究软件体系结构的意义:
- 体系结构是风险承担者进行交流的手段
- 体系结构是早期设计决策的体现
- 软件体系结构是可传递和可重用的模型
软件体系结构的发展史:
课后题:
1、什么是软件重用?软件重用是指在两次或多次不同的软件开发过程中重复使用相同或相近软件元素的过程。把这种可重用的软件元素称作构件。
2、基于构件的软件开发的优势:(1)可以减少软件开发活动中大量的重复性工作,提高软件生产率,降低开发成本,缩短开发周期。(2)有助于改善软件质量。(3)软件的灵活性和标准化程度得到提高。
第2章 软件体系结构建模
软件体系结构的模型分为5种:结构模型、框架模型、动态模型、过程模型、功能模型。
结构模型:最直观、最普遍的建模方法。这种方法以体系结构的构件、连接件和其他概念来刻画结构,并力图通过结构来反映系统的重要语义内容,包括系统的配置、约束、隐含的假设条件、风格、性质等。研究结构模型的核心是体系结构描述语言。
动态模型:是对结构或框架模型的补充,研究系统的“大颗粒”的行为性质。例如,描述系统的重新配置或演化。动态可以指系统总体结构的配置、建立或拆除通信通道或计算的过程。
2.1 “4+1” 视图
Kruchten在1995年提出了一个4+1视图,从5个不同的视角来描述软件体系结构:
逻辑视图:最终用户,功能需求
进程视图:系统集成人员,性能、可扩充性、吞吐率等
开发视图:编程人员,软件管理
物理视图:系统工程人员,系统拓扑、安装、通信
场景视图:对应用例的脚本
1、逻辑视图
主要支持系统的功能需求,即系统提供给最终用户的服务。在面向对象技术中,通过抽象、封装和继承,可以用对象模型来代表逻辑视图,用类图来描述逻辑视图。
2、开发视图
也称模块视图,主要侧重于软件模块的组织和管理。开发视图要考虑软件内部的需求,如软件开发的容易性、软件的重用和软件的通用性,要充分考虑由于具体开发工具的不同而带来的局限性。开发视图通过系统输入输出关系的模型图和子系统图来描述。
在开发视图中,最好采用4-6层子系统,而且每个子系统仅仅能与同层或更低层的子系统通讯,这样可以使每个层次的接口既完备又精练,避免了各个模块之间很复杂的依赖关系。
设计时要充分考虑,对于各个层次,层次越低,通用性越强,这样,可以保证应用程序的需求发生改变时,所做的改动最小。开发视图所用的风格通常是层次结构风格。
3、进程视图
侧重于系统的运行特性,主要关注一些非功能性的需求。
进程视图强调并发性、分布性、系统集成性和容错能力,以及从逻辑视图中的主要抽象如何适合进程结构。它也定义逻辑视图中的各个类的操作具体是在哪一个线程中被执行的。
进程视图可以描述成多层抽象,每个级别分别关注不同的方面。在最高层抽象中,进程结构可以看作是构成一个执行单元的一组任务。它可看成一系列独立的,通过逻辑网络相互通信的程序。它们是分布的,通过总线或局域网、广域网等硬件资源连接起来。
4、物理视图
主要考虑如何把软件映射到硬件上,它通常要考虑到系统性能、规模、可靠性等。解决系统拓扑结构、系统安装、通讯等问题。
当软件运行于不同的节点上时,各视图中的构件都直接或间接地对应于系统的不同节点上。因此,从软件到节点的映射要有较高的灵活性,当环境改变时,对系统其他视图的影响最小。
5、场景
可以看作是那些重要系统活动的抽象,它使四个视图有机联系起来,从某种意义上说场景是最重要的需求抽象。在开发体系结构时,它可以帮助设计者找到体系结构的构件和它们之间的作用关系。同时,也可以用场景来分析一个特定的视图,或描述不同视图构件间是如何相互作用的。
场景可以用文本表示,也可以用图形表示。
小结:
逻辑视图和开发视图描述系统的静态结构,而进程视图和物理视图描述系统的动态结构。
对于不同的软件系统来说,侧重的角度也有所不同。例如,对于管理信息系统来说,比较侧重于从逻辑视图和开发视图来描述系统,而对于实时控制系统来说,则比较注重于从进程视图和物理视图来描述系统。
2.2 软件体系结构的核心模型
软件体系结构的核心模型包括5中元素:构件、连接件、配置、端口和角色。(其中构件、连接件、和配置是最基本的元素)
构件:是具有某种功能的可重用的软件模板单元,表示了系统中主要的计算元素和数据存储。
连接件:表示构件之间的交互。
配置:表示了构件和连接件的拓扑逻辑和约束。
2.3 软件体系结构的生命周期模型
强调:软件体系结构目的是建立从软件需求到软件实现之间的鸿沟。
需求分析->建立体系结构->设计->实现->测试
第3章 软件体系结构风格
软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。软件体系结构风格定义了用于描述系统的术语表和一组指导构建系统的规则。
3.1 经典软件体系结构风格
软件体系结构风格的最关键的4要素内容:一个词汇表、定义一套配置规则、定义一套语义解释原则和定义对基于这种风格的系统所进行的分析。
经典的软件体系结构风格:
(1)数据流风格:批处理序列、管道与过滤器;
(2)调用/返回风格:主程序和子程序、面向对象风格、层次结构
(3)独立构件风格:进程通信、事件系统;
(4)虚拟机风格:解释器、基于规则的系统;
(5)仓库风格:数据库系统、黑板系统
1、管道与过滤器
每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。这个过程通常通过对输入流的变换及增量计算来完成,所以在输入被完全消费之前,输出便产生了。
这里的构件被称为过滤器,这种风格的连接件就象是数据流传输的管道,将一个过滤器的输出传到另一过滤器的输入。
典型应用:Unix Shell程序;编译原理(词法分析—语法分析—语义分析—代码生成)
特点:
- 使得软构件具有良好的隐蔽性和高内聚、低耦合的特点;
- 允许设计者将整个系统的输入/输出行为看成是多个过滤器的行为的简单合成;
- 支持软件重用。只要提供适合在两个过滤器之间传送的数据,任何两个过滤器都可被连接起来;
- 系统维护和增强系统性能简单。新的过滤器可以添加到现有系统中来;旧的可以被改进的过滤器替换掉;
- 允许对一些如吞吐量、死锁等属性的分析;
- 支持并行执行。每个过滤器是作为一个单独的任务完成,因此可与其它任务并行执行。
不利因素:
- 通常导致进程成为批处理的结构。
- 不适合处理交互的应用。
- 会导致系统性能下降,增加编写过滤器的复杂性。
2、数据抽象和面向对象系统
这种风格建立在数据抽象和面向对象的基础上,数据的表示方法和它们的相应操作封装在一个抽象数据类型或对象中。这种风格的构件是对象,或者说是抽象数据类型的实例。对象是一种被称作管理者的构件,因为它负责保持资源的完整性。对象是通过函数和过程的调用来交互的。
优点:
- 因为对象对其它对象隐藏它的表示,所以可以改变一个对象的表示,而不影响其它的对象;
- 设计者可将一些数据存取操作的问题分解成一些交互的代理程序的集合。
缺点:
- 为了使一个对象和另一个对象通过过程调用等进行交互,必须知道对象的标识。只要一个对象的标识改变了,就必须修改所有其他明确调用它的对象;
- 必须修改所有显式调用它的其它对象,并消除由此带来的一些副作用。例如,如果A使用了对象B,C也使用了对象B,那么,C对B的使用所造成的对A的影响可能是料想不到的。
3、基于事件的系统
构件不直接调用一个过程,而是触发或广播一个或多个事件。系统中的其它构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所有过程,这样,一个事件的触发就导致了另一模块中的过程的调用。
这种风格的主要特点是事件的触发者并不知道哪些构件会被这些事件影响。这样不能假定构件的处理顺序,甚至不知道哪些过程会被调用,因此,许多隐式调用的系统也包含显式调用作为构件交互的补充形式。
基于事件的隐式调用的应用系统:在编程环境中用于集成各种工具,在数据库管理系统中确保数据的一致性约束,再用户界面系统中管理数据,AddActionListener(new Event()){….}
优点:
- 为软件重用提供了强大的支持。当需要将一个构件加入现存系统中时,只需将它注册到系统的事件中。
- 为改进系统带来了方便。当用一个构件代替另一个构件时,不会影响到其它构件的接口。
缺点:
- 构件放弃了对系统计算的控制。
- 数据交换的问题。
- 关于正确性的推理存在问题
4、分层系统
层次系统组织成一个层次结构,每一层为上层服务,并作为下层客户。连接件通过决定层间如何交互的协议来定义,拓扑约束包括对相邻层间交互的约束。
例如:前端UI层、逻辑业务层、持久化层、数据库层
优点:
- 支持基于抽象程度递增的系统设计,使设计者可以把一个复杂系统按递增的步骤进行分解;
- 支持功能增强,因为每一层至多和相邻的上下层交互,因此功能的改变最多影响相邻的上下层;
- 支持重用。只要提供的服务接口定义不变,同一层的不同实现可以交换使用。这样,就可以定义一组标准的接口,而允许各种不同的实现方法。
缺点:
- 并不是每个系统都可以很容易地划分为分层的模式,甚至即使一个系统的逻辑结构是层次化的,出于对系统性能的考虑,系统设计师不得不把一些低级或高级的功能综合起来;
- 很难找到一个合适的、正确的层次抽象方法。
5、仓库系统
在仓库风格中,有两种不同的构件:中央数据结构说明当前状态,独立构件在中央数据存贮上执行,仓库与外构件间的相互作用在系统中会有大的变化。
控制原则的选取产生两个主要的子类。若输入流中某类时间触发进程执行的选择,则仓库是一传统型数据库;另一方面,若中央数据结构的当前状态触发进程执行的选择,则仓库是一黑板系统。
黑板系统的传统应用是信号处理领域,如语音和模式识别。
黑板系统的三部分组成:
- 知识源。知识源中包含独立的、与应用程序相关的知识,知识源之间不直接进行通信,它们之间的交互只通过黑板来完成。
- 黑板数据结构。黑板数据是按照与应用程序相关的层次来组织的解决问题的数据,知识源通过不断地改变黑板数据来解决问题。
- 控制。控制完全由黑板的状态驱动,黑板状态的改变决定使用的特定知识。
6、C2 风格
通过连接件绑定在一起的按照一组规则运作的并行构建网络。
组织规则如下:
-
系统中的构件和连接件都有一个顶部和一个底部;
-
构件的顶部应连接到某连接件的底部,构件的底部则应连接到某连接件的顶部,而构件与构件之间的直接连接是不允许的;
-
一个连接件可以和任意数目的其它构件和连接件连接;
-
当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部。
特点: -
系统中的构件可实现应用需求,并能将任意复杂度的功能封装在一起;
-
所有构件之间的通讯是通过以连接件为中介的异步消息交换机制来实现的;
-
构件相对独立,构件之间依赖性较少。系统中不存在某些构件将在同一地址空间内执行,或某些构件共享特定控制线程之类的相关性假设。
3.2 客户/服务器风格
C/S体系结构定义了工作站如何与服务器相连,以实现数据和应用分布到多个处理机上。
C/S体系结构有三个主要组成部分:数据库服务器、客户应用程序和网络。
优点:
- C/S 体系结构具有强大的数据操作和事务处理能力,模型思想简单,易于人们理解和接受。
- 系统的客户应用程序和服务器构件分别运行在不同的计算机上,系统中每台服务器都可以适合各构件的要求,这对于硬件和软件的变化显示出极大的适应性和灵活性,而且易于对系统进行扩充和缩小。
- 在C/S体系结构中,系统中的功能构件充分隔离,客户应用程序的开发集中于数据的显示和分析,而数据库服务器的开发则集中于数据的管理,不必在每一个新的应用程序中都要对一个DBMS进行编码。将大的应用处理任务分布到许多通过网络连接的低成本计算机上,以节约大量费用。
缺点:
◎ 开发成本较高
◎ 客户端程序设计复杂
◎ 信息内容和形式单一
◎ 用户界面风格不一,使用繁杂,不利于推广使用
◎ 软件移植困难
◎ 软件维护和升级困难
◎ 新技术不能轻易应用
3.3 三层C/S结构风格
将应用功能分成表示层、功能层和数据层三个部分。
优点:
- 允许合理地划分三层结构的功能,使之在逻辑上保持相对独立性,能提高系统和软件的可维护性和可扩展性。
- 允许更灵活有效地选用相应的平台和硬件系统,使之在处理负荷能力上与处理特性上分别适应于结构清晰的三层;并且这些平台和各个组成部分可以具有良好的可升级性和开放性。
- 应用的各层可以并行开发,可以选择各自最适合的开发语言。
- 利用功能层有效地隔离开表示层与数据层,未授权的用户难以绕过功能层而利用数据库工具或黑客手段去非法地访问数据层,为严格的安全管理奠定了坚实的基础。
3.4 浏览/服务(B/S )风格
浏览器 / Web服务器 / 数据库服务器
- 基于B/S体系结构的软件,系统安装、修改和维护全在服务器端解决。用户在使用系统时,仅仅需要一个浏览器就可运行全部的模块,真正达到了“零客户端”的功能,很容易在运行时自动升级。
- B/S体系结构还提供了异种机、异种网、异种应用服务的联机、联网、统一服务的最现实的开放性基础。
缺点:
- B/S体系结构缺乏对动态页面的支持能力,没有集成有效的数据库处理功能。
- B/S体系结构的系统扩展能力差,安全性难以控制。
- 采用B/S体系结构的应用系统,在数据查询等响应速度上,要远远地低于C/S体系结构。
- B/S体系结构的数据提交一般以页面为单位,数据的动态交互性不强,不利于在线事务处理应用。
3.5 公共对象请求代理体系结构
CORBA-对象管理结构。OMG基于面向对象技术,给出了以对象请求代理(ORB)为中心的对象管理结构。
在OMG的对象管理结构中,ORB是一个关键的通信机制,它以实现互操作性为主要目标,处理对象之间的消息分布。对象服务实现基本的对象创建和管理功能,通用服务则使用对象管理结构所规定的类接口实现一些通用功能。
CORBA的技术规范包括4部分:
1、接口定义语言;2、接口池;3、动态调用接口;4、对象适配器
3.6 正交软件体系结构
定义:
正交软件体系结构由组织层和线索的构件构成。层是由一组具有相同抽象级别的构件构成。线索是子系统的特例,它是由完成不同层次功能的构件组成(通过相互调用来关联),每一条线索完成整个系统中相对独立的一部分功能。每一条线索的实现与其他线索的实现无关或关联很少,在同一层中的构件之间是不存在相互调用的。
如果线索是相互独立的,即不同线索中的构件之间没有相互调用,那么这个结构就是完全正交的。
特征:
- 正交软件体系结构由完成不同功能的n(n > 1)个线索(子系统)组成;
- 系统具有m(m > 1)个不同抽象级别的层;
- 线索之间是相互独立的(正交的);
- 系统有一个公共驱动层(一般为最高层)和公共数据结构(一般为最低层)。
优点:
- 结构清晰,易于理解
- 易修改,可维护性强
- 可移植性强,重用力度大
3.7 基于层次消息总线的体系结构风格
HMB风格基于层次消息总线/支持构件的分布和并发,构件之间通过消息总线进行通信。 消息总线是系统的连接件,负责消息的分派、传递和过滤以及处理结果的返回。各个构件挂接在消息总线上,向总线登记感兴趣的消息类型。构件根据需要发出消息,由消息总线负责把该消息分派到系统中所有对此消息感兴趣的构件,消息是构件之间通信的唯一方式。构件接收到消息后,根据自身状态对消息进行响应,并通过总线返回处理结果。由于构件通过总线进行连接,并不要求各个构件具有相同的地址空间或局限在一台机器上。该风格可以较好地刻画分布式并发系统。
构建接口
- HMB风格的构件接口是一种基于消息的互联接口,可以较好地支持体系结构设计。构件之间通过消息进行通讯,接口定义了构件发出和接收的消息集合。
- 当某个事件发生后,系统或构件发出相应的消息,消息总线负责把该消息传递到此消息感兴趣的构件。
- 按照响应方式的不同,消息可分为同步消息和异步消息。
消息总线
功能:1 消息登记 ;2 消息分派和传递 ;3 消息过滤
构件动态行为
构件的行为同时受外来消息类型和自身当前所处状态的影响。
3.8 异构体系结构风格
不同的结构有不同的处理能力的强项和弱点,一个系统的体系结构应该根据实际需要进行选择,以解决实际问题。
3.9 互连系统构成的系统(SIS)及其体系结构
SIS 是指系统可以分成若干个不同的部分,每个部分作为单独的系统独立开发。整个系统通过一组互联系统实现,而互联系统之间相互通信,履行系统的职责。
从属系统可以自成一个软件系统,脱离上级系统而运行。从属系统之间是独立的,每个从属系统实现一个子系统。子系统依赖于彼此的接口,但相互之间相对独立。
软件过程:
3.10 特定领域的软件体系结构(DSSA)
DSSA就是专用于一类特定类型的任务(领域)的、在整个领域中能有效地使用的、为成功构造应用系统限定了标准的组合结构的软件构件的集合。
石油工业大型软件开发、测井、钻井、录井。
第4章 软件体系结构描述
4.1 软件体系结构描述方法
软件体系结构的描述方法可以分为:文字表达工具、数学表达工具、图形表达工具。
1、图形表达工具;2、模型内连接语言;3、基于软构件的系统描述语言;4、软件体系结构描述语言
4.2 软件体系结构描述框架标准
可重用的体系结构描述框架建议,基于RUP、采用UML模型描述软件体系结构。
4个视角:需求视点、设计视点、实现视点、测试视点。
7个体系结构视图:用例视图、域视图、非功能需求视图、逻辑视图、实现视图、过程视图、部署视图。
4.3 体系结构描述语言(ADL)
ADL与其他语言的比较
构造能力:ADL能够使用较小的独立体系结构元素来建造大型软件系统;
抽象能力**:**ADL使得软件体系结构中的构件和连接件描述可以只关注它们的抽象特性,而不管其具体的实现细节;
重用能力:ADL使得组成软件系统的构件、连接件甚至是软件体系结构都成为软件系统开发和设计的可重用部件;
组合能力:ADL使得其描述的每一系统元素都有其自己的局部结构,这种描述局部结构的特点使得ADL支持软件系统的动态变化组合;
异构能力:ADL允许多个不同的体系结构描述关联存在;
分析和推理能力:ADL允许对其描述的体系结构进行多种不同的性能和功能上的多种推理分析。
ADL构成要素
构件:计算或数据存储单元
连接件:用于构件之间交互建模的体系结构构造块及支配这些交互的规则
体系结构配置:描述体系结构的构件与连接件的连接图
第5章 统一建模语言
UML
第6章 可扩展标记语言(XML)
6.1 XML概述
XML特点
- 简洁有效
- 易学易用
- 开放的国际化标准
- 高效且可扩充
XML的作用
- 使得搜索更加有意义
- 开发灵活的Web应用软件
- 实现不同数据的集成
- 适用于多种应用环境
- 客户端数据处理与计算
- 数据显示多样化
- 局部数据更新
- 与现有Web发布机制相兼容
- 可升级性
- 压缩性能高
XML的应用
- 应用于客户需要与不同的数据源进行交互时
- 应用于将大量运算负荷分布在客户端
- 应用于将同一数据以不同的面貌展现给不同的用户
- 应用于网络代理对所取得的信息进行编辑、增减以适应个人用户的需要
6.2 解析XML
XML与HTML的区别
- HTML是一种格式化的语言,一个HTML文本可以看作一个格式化的程序,HTML定义了一套固定的标记,用来描述一定数目的元素。
- HTML描述的程序或文本具有“内容+格式”的双重属性。而XML文本则是一段“纯”数据。
- XML是一种元标记语言。它可以被用于定义其他的标记语言。
- XML定义了一套元语法,与特定领域有关的标记语言都必须遵守。
XML文档
XML文档必须是组织良好的和有效的
满足三项基本规则:
- 文档以XML定义<?xml version="1.0"?>开始。
- 有一个包含所有其它内容的根元素,如上面例子中的和标记符。
- 所有元素必须合理地嵌套,不允许交叉嵌套。
DTD(文档类型定义)是对XML数据的语法结构的描述,对XML数据文档的内容作出规定。使用DTD,不同的人就能够使用共同的DTD来交换数据。
XML模式优势:
- XML模式使用XML语法
- XML模式支持数据类型
- XML模式是可扩展的
- XML模式有更强的表达能力
CSS与XSL
- CSS只能改变特定元素的格式,也只能以元素为基础。但是XSL样式单可以重新排列元素并对元素进行重排序。
- CSS的优越性在于具有广泛的浏览器支持。但是XSL更为灵活和强大,可更好地适用于XML文档。而且,带XSL样式单的XML文档可以很容易地转换为带CSS样式单的HTML文档。
6.3 XML编程接口
1、DOM
为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。
优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;
缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;
使用场合:一旦解析了文档还需多次访问这些数据; 硬件资源充足(内存、CPU)
2、SAX
SAX ,事件驱动。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。
优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载
缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;
使用场合:对大型文件进行处理;只需XML文档的少量内容,很少回头访问;机器内存少;
3、JDOM
为减少DOM、SAX的编码量,出现了JDOM;
优点:20-80原则,极大减少了代码量
使用场合:要实现的功能简单,如解析、创建等; Java程序;但在底层,JDOM还是使用SAX(最常用)、DOM。
4、JAPX
为多个XML解析器提供了统一编程接口
更换解析器,不用更改代码
使用场合:若不用Jdom,一般建议使用JAPX,将代码与各种解析器的实现细节隔离。
利用SAX解析XML文件的步骤:
-
创建解析工厂,通过SAXParserFactory的静态newInstance方法获取SAXParserFactory实例factory
SAXParserFactory factory = SAXParserFactory.newInstance();
-
由工厂创建解析器
**SAXParser parser = factory.newSAXParser(); **
-
创建一个类继承DefaultHandler,重写其中的一些方法进行业务处理并创建这个类的实例Handler
SAXParserHandler handler = new SAXParserHandler();
-
解析操作
parser.parse(“book.xml”, handler);
Dom4J解析
//1、读取XML文档,使用SAXReader对象
SAXReader reader=new SAXReader();
Document doc=reader.read("book.xml");
//2、设置XML文档的编码格式为UTF-8格式 参数:1 缩进,2 换行
OutputFormat format=new OutputFormat("",false);
format.setEncoding("UTF-8");
//3、保存XML文档,使用XMLWriter对象的write方法
XMLWriter writer=new XMLWriter(new FileWriter("xx.xml"),format);
writer.write(doc);//写文件写的是doc,这个doc就是book.xml
writer.close();
Element是一个元素对象,可以嵌套的,通过枚举这个Element对象,来获取XML元素的值。
在不知道属性名称的情况下,可以使用attributes()方法遍历元素的所有属性,从而动态的取出name和value。
List eleList=root.elements(); 不停地嵌套操作,就可以遍历所有XML文件中的元素。
6.4 基于XML的软件体系结构描述语言
XBA:XML Based Architecture Description Language
XBA一种体系结构描述语言,XBA主要是把XML语言应用于软件体系结构的描述。通过对组成体系结构的基本元素进行描述,同时利用XML的可扩展性,对现有的各种ADL(Architecture Description Language)进行描述和定义。
XBA主要围绕体系结构的三个基本抽象元素:构件、连接件和配置。它实现了一种切实可行的描述软件体系结构的方法。
对一个构件的描述有两个重要的部分:接口(interface)和计算(computation);接口是由一组端口(port)组成,每一个端口代表这个构件可能参与的交互。计算部分描述了这个构件实际所做的操作。
利用XBA描述软件体系结构的主要优点有:
1、XBA具有开放的语义结构,继承了XML的基于Schema的可扩展机制,在使用了适当的扩展机制之后,XBA可以表示多种体系结构风格,而且可以利用XML Schema的include和import等机制来重用已经定义好的XML Schema,实现ADL的模块化定义;
2、利用XML的链接机制,可以实现体系结构的协作开发。可以先把体系结构的开发分解,由不同的开发者分别开发,然后利用XML的链接机制把它们集成起来。
3、易于实现不同ADL(Architecture Description Language)开发环境之间的模型共享。可能会存在多种基于XML的ADL开发工具,尽管它们所使用的对ADL的XML描述会有不同,但通过XSLT技术,可以很方便地对在同一体系结构的不同XML描述之间进行转换。
第7章 动态软件体系结构
7.1 概述
体系结构的动态性主要分为三类:
1、交互式动态性
2、结构化动态性
3、体系结构动态性
允许在系统运行时发生更新的软件体系结构成为动态软件体系结构。
支持动态更新:(1)语言层面:Darwin,Unicon,Wright;(2)工具层面:ArchStudio,SAA
7.2 基于构件的动态系统结构模型
基于构件的动态系统结构模型支持运行系统的动态更新,该模型分为3层:应用层、中间层和体系结构层。应用层:最底层—对应操作、函数;中间层—对应构件;体系结构层:体系结构配置
应用层:包括构件连接、构件接口和执行。在这一层可以添加删除更新构件。
中间层:包括连接件配置、构建配置、构建描述和执行。
体系结构层控制和管理整个体系结构,包括体系结构配置,体系结构描述和执行。
在更新之前要确保所涉及的构件停止发送新的请求;连接件的请求队列中的请求全部已被执行。
更新描述包括的部分:
1、更新类型(update type):包括增加、删除、修改一个构件;
2、更新对象列表(list of update objects):需要更新对象类的ID号;
3、对象的新版本说明(new version of objects):对象的新版本执行情况;
4、对象更新方法(update method):更替、动态和静态;
5、更新函数(update function):用来更新一个执行对象进程的状态转换函数;
6、更新限制(update constraints):用来描述更新和它们之间的关系的序列;例如:只有学习了C++,才能学习面向对象编程。
更新执行的步骤:
(1)检测更新的范围:判断是局部更新,还是全局更新。
(2)更新准备工作:如果更新发生在应用层,构件配置器等待参与的进程发出信号,以表明它们已处于可安全执行更新的状态;如果更新发生在配置层,需要等待连接件中断通信,其他构件配置器已完成它们的更新。
(3)执行更新:执行更新,并告知更新发起者更新的结果。
(4)存储更新:将构件或体系结构所做的更新存储到构件或体系结构描述中。
局部更新实例分析
第一步:更新发起者发出一个更新请求要求,这个请求被送到构件A的构件配置器中,构件配置器将分析更新的类型,从而判断出更新是局部更新。
第二步:由于更新是局部更新,构件A的配置器发出一个信号给连接件以隔离构件A的通信,准备执行更新。
第三步:构件A的配置器开始执行更新操作。
第四步:更新执行完毕后,构件A的构件描述被更新,并且构件A发送一个消息给连接件B,两者间的连接被重新存储起来。
第五步:将更新结果返回给更新发起者。
由上述分析可知,在整个更新过程中,构件C都没有受到影响,这说明CBDSAM的方法,不会影响系统的其他部分执行。
全局更新实例分析
第一步:Server构件配置器接收到更新发起者提出的更新请求后,向体系结构配置器提出更新请求。
第二步:体系结构配置器对更新请求的类型进行分析,判断是否在更新请求限制范围内,不在更新范围内的更新不予执行,如果在更新范围内,体系结构配置器对更新所涉及的连接件和构件发出消息,要求他们做好更新准备工作。
第三步:准备工作完成后,Client构件配置器和连接件向体系结构配置器返回就绪信息。
第四步:一切准备就绪后,体系结构配置器通知Server构件进行更新。
第五步:更新执行完毕后,向Server构件配置器、体系结构配置器、更新发起者通知更新执行完毕并返回更新结果;同时,体系结构配置器通知Client构件和连接件更新结束,可以继续正常工作。
第8章 基于服务的体系结构
SOA是一种应用程序体系结构,在这种体系结构中,所有功能都定义为独立的服务,这些服务带有定义明确的可调用接口,能够以定义好的顺序调用这些服务来形成业务流程。
SOA系统原型的典型例子:CORBA,SOA是建立在XML等新技术的基础上的。
SOA的特征
(1)松散耦合;(2)粗粒度服务;(3)标准化接口
SOA的设计原则
(1)明确定义的接口;(2)自包含和模块化;(3)粗粒度;(4)松耦合;(5)互操作性、兼容和策略声明
SOA的主要抽象级别
操作、服务、业务流程
SOA的关键技术
SOA的实现方法
WebService、企业服务总线、服务注册表。