软件体系结构复习
1、概述
1.1 软件危机
1.软件危机的表现:1、软件成本日益增加。2、开发进度难以控制。3、软件质量差。4、软件维护困难。
2.软件危机的原因:1、用户需求不明确。2、缺乏正确的理论指导。3、软件规模越来越大。4、软件复杂度越来越高。
3.克服软件危机:
- 人们面临的不光是技术问题,更重要的是管理问题。管理不善必然导致失败 。
- 要提高软件开发效率,提高软件产品质量,必须采用工程化的开发方法与工业化的生产技术。
- 在技术上,应该采用基于重用的软件生产技术;在管理上,应该采用多维的工程管理模式。
4.软件工程的诞生,包括过程、方法和工具。
- 软件工程方法为软件开发提供如何做的技术。
- 软件工具是人们开发软件活动智力和体力扩展和延伸
- 软件工程过程是将软件工程的方法和工具综合起来以达到合理、及时进行开发
1.2 软件与软件重用
1.构件的概念
- 构件是指语义完整、语法正确和有可重用价值的单位软件。
- 是软件重用过程中可以明确辨识的系统。
- 结构上,它是语义描述、通讯接口和实现代码的复合体。
2.软件重用:在两次或者多次不同的软件开发过程中重复使用相同或者相近软件元素的过程。
3.软件元素:包括程序代码、测试用例、设计文档、设计过程、需求分析文档甚至领域知识。
4.软件模型的三个流派:
- OMG对象管理集团的CORBA
- Sun的EJB
- Microsoft的DCOM
5.基于构件的软件开发中,构建的多种途径获取:
- 从现有构件中获得符合要求的构件,直接使用或作适应性修改,得到可重用的构件;
- 通过遗留工程,将具有潜在重用价值的构件提取出来,得到可重用的构件;
- 从市场上购买现成的商业构件,即COTS构件;
- 开发新的符合要求的构件。
6.构件分类和组织:目前已有的构件分类方法归为关键字分类法、刻面分类法和超文本组织方法。
7.构件组装:
构件组装是将库中的构件经过适当修改后相互连接或者将它们与当前开发项目中的软件元素相连接,最终构成新的目标软件。
- 基于功能的组装技术
- 基于数据的组装技术
- 面向对象的组装技术
8.软件重用实例:
(1)系统构件层,指系统开发平台本身所提供的类库包括Java JDK类库等。
(2)通用类构件层,是我们产品复用的核心。(权限管理、存取控制、日志管理、数据备份/恢复等等)、页面风格函数以及JSP的CSS、JS等、字符串处理、数据库连接、日期处理等等与业务逻辑无关的类函数。
(3)业务构件层,指为了满足各个不同业务的需要而设计的软件包,并在业务软件包中设置明确的接口,方便业务之间的交互,并可以实现系列产品之间的大粒度构件复用。
(4)表现层。主要采用JSP、Serverlet页面来展现业务流程界面。
9.组织结构的重用:
产品开发的过程中建立了重用的组织框构,由三组成员组成:构建开发组、构建应用组和构件协调组。
2、软件体系结构建模
软件体系结构模型分类:结构模型、框架模型、动态模型、过程模型和功能模型。
2.1 4+1视图模型
逻辑视图
逻辑视图的表示方法为Booch标记法:
- 这里的类图用于显示一个类的集合和它们的逻辑关系,即关联、使用、组合、继承等等。
- 对于数据驱动程度高的应用程序也可以使用其他形式的逻辑视图,比如E-R图。
比如上述图片就是某一个通信系统的体系结构逻辑视图。
开发视图
开发视图的表示同样如此:Booch方法的变形。
如上所表示的开发视图中,最好使用分层风格,定义到4~6个子系统层。
进程视图
其表示内容如下:
物理视图
物理视图主要考虑如何把软件映射到硬件上,最终如何安装或部署到物理机器。它通常要考虑到系统性能、规模、可靠性等。解决系统拓扑结构、系统安装、通讯等问题。
其表示方法如下:
场景
场景可以看成系统活动的抽象,将4个视图有机结合联系起来。
总结
- 逻辑视图和开发视图描述系统的静态结构。
- 而进程视图和物理视图描述系统的动态结构。
- 对于不同的软件系统来说,侧重的角度也有所不同。例如,对于管理信息系统来说,比较侧重于从逻辑视图和开发视图来描述系统,而对于实时控制系统来说,则比较注重于从进程视图和物理视图来描述系统。
2.2 软件体系结构的核心模型
体系结构的核心模型组成:构件、连接件、配置、端口和角色。
构件、连接件和配置是最基本的元素。
3、软件体系结构风格
软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。
体系结构风格定义了一个系统家族,即一个体系结构定义一个词汇表和一组约束。词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。
体系结构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。
3.1 经典软件体系结构风格
管道与过滤器
每个构件有一个输入输出。根据其特点,这里的构件称之为过滤器,这种风格的连接件就像是数据流传输的管道,将一个过滤器的输出传到另一个过滤器的输入。
此时过滤器必须是一个独立的实体。
优缺点:
面向对象风格
基于事件的系统
构件不直接调用一个过程,而是触发或广播一个或多个事件。
系统中的其它构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所有过程,这样,一个事件的触发就导致了另一模块中的过程的调用。
分层系统
系统被组织成若干个层次,每个层次都由一系列构件组成。层次之间存在接口,通过接口形成call/return关系。
仓库管理及知识库
黑板系统
黑板系统分成三部分组成:知识源、黑板数据结构、控制。
3.2 C/S风格
客户服务器风格主要任务在于:
- 提供用户与数据库交互的界面
- 向数据库服务器提交用户请求并且接收来自数据库服务器的信息
- 利用客户应用程序对存在于客户端的数据执行应用逻辑要求
3.3 三层C/S结构
- 第一层:用户界面的表示层
- 第二层:业务逻辑的功能层
- 第三层:数据库的数据层
相比如二层结构,优点在于:
- 服务器安全性提高
- 客户端成功减肥
- 易于维护
- 易于开发,每层可用不同的语言
其劣势在于:
- 三层通信效率会制约各层的硬件能力而影响到整个系统性能要求。
- 设计者要考虑三层通信方法、通信频率和数据量。
3.4 浏览/服务器风格
浏览/服务器风格就是上述三层应用结构的一种实现,其具体结构为:浏览器、web服务器、数据库服务器。
其优点在于:
- 安装、维护、修改全在服务器端
- 工作量减少
- 降低成本
- 开放性强,都可以来访问
- 平台无关性,可以任意扩展
- 信息发布和信息交流更加灵活
缺点也同样暴露:
- 缺乏对动态页面的支持能力,没有集成有效的数据库处理功能。
- 系统扩展能力差,安全性难以控制。
- 在数据查询等响应速度上,要远远地低于C/S体系结构。
- 数据提交一般以页面为单位,数据的动态交互性不强,不利于在线事务处理(OLTP)应用。
3.5 异构结构的实例分析
C/S和B/S混合软件体系结构的模型:
内外有别模型
4、软件体系结构描述
4.1 软件体系结构的描述方法
本质上软件体系结构的描述方法可以分成文字表达工具、数字表达工具、图形表达工具。其中在产业界用的最多的就是图形表达工具,学术界更偏向于数字表达工具。
图形表达工具
用由矩形框和有向线段组合而成的图形表达工具。其中,矩形框代表抽象构件,有向线段代表辅助各构件进行通讯、控制或关联的连接件。
特点:
- 语义丰富、直观形象、简单易用
- 语义极不精确
- 没有形式化基础
可用于:
- 商业展示
- 设计草图
4.2 体系结构描述语言
ADL:形式化语言,在底层语义模型支持下,为软件系统的概念体系结构建模提供了具体语法和概念框架。
其三个基本元素如下:构件、连接件、体系结构配置
ADL与其他语言的比较:
- 构造能力:ADL能够使用较小的独立体系结构元素来建造大型软件系统;
- 抽象能力:ADL使得软件体系结构中的构件和连接件描述可以只关注它们的抽象特性,而不管其具体的实现细节;
- 重用能力:ADL使得组成软件系统的构件、连接件甚至是软件体系结构都成为软件系统开发和设计的可重用部件;
- 组合能力:ADL使得其描述的每一系统元素都有其自己的局部结构,这种描述局部结构的特点使得ADL支持软件系统的动态变化组合;
- 异构能力:ADL允许多个不同的体系结构描述关联存在;
- 分析和推理能力:ADL允许对其描述的体系结构进行多种不同的性能和功能上的多种推理分析
这些语言被排除在ADL外:高层设计符号语言、MIL、编程语言、面向对象的建模符号、形式化说明语言。ADL与需求语言区别在于后者描述的是问题空间,前者则是扎根于解空间中。ADL专注于构件的表示上。
5、统一建模语言
略过
6、可扩展标记语言
6.1 XML概述
XML是一套定义语义标记的规则,这些标记将文档分成许多部件并且对这些部件加以标识。
XML是元标记语言,用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。
XML的作用:
- 使得搜索更加有意义
- 开发灵活的Web应用软件
- 实现不同数据的集成
- 使用于多种应用环境
- 客户端数据处理与计算
- 数据显示多样化
- 局部数据更新
- 与现有Web发布机制相兼容
- 可升级性
- 压缩性能高
XML的应用:
- 应用于客户需要与不同的数据源进行交互时
- 应用于将大量运算负荷分布在客户端
- 应用于将同一数据以不同的面貌展现给不同的用户
- 应用于网络代理对所取得的信息进行编辑、增减以适应个人用户的需要
6.2 解析XML
XML文档
一个实用的XML文档必须满足:组织良好和有效
结构格式:
(1)文档以XML定义**<?xml version="1.0"?>**开始。
(2)有一个包含所有其它内容的根元素,如上面例子中的和标记符。
(3)所有元素必须合理地嵌套,不允许交叉嵌套。
DTD:对XML文档数据语法结构的描述
XML语言的优势:
- XML模式使用XML语法
- XML模式支持数据类型
- XML模式是可扩展的
- XML模式有更强的表达能力
XSL
XSL是专门用于XML文档的样式语言,可以把XSL当成一种能够把XML转变成HTML的语言。
XSL是一种能够筛选和排序XML文档中数据的语言。
XSL是一种能够根据XML的数据数值格式化XML数据的语言。
XSL文档本身就是结构完整的XML文档。
6.3 XML编程接口
4种接口:JDOM、DOM、SAX、JAXP
接口的选择
1、要用Java编写应用程序吗?
JAXP使用DOM、JDOM、SAX,如果使用JAVA编写的代码,应该使用JAXP将代码与各种解析器实现的细节分离。
2、应用程序将如何部署?
如果应用程序将要作为Java applet部署,就希望要下载的代码数量最小。SAX解析器比DOM解析器小,而使用JDOM时除了SAX或者DOM解析器外还要编写少量代码。
3、一旦解析了XML文档,还需要多次访问那些数据吗?
如果需要回过头来访问XML,文件的已解析版本,DOM是正确的选择。DOM可以自动保存所有的数据。
4、只需要XML源文件的少量内容吗?
只需要在XML源文件的少量内容,那么SAX是正确的选择。SAX不会为源程序中的每个东西创建对象。而使用SAX,要检查每个事件以了解它是否与需要有关,然后相应地处理它。
5、正在一台内存很少的机器上工作吗?
如果是,不管可能考虑导的其他因素是什么,SAX都是最佳选择。
7、动态软件体系结构
略过
8、基于服务的体系结构
8.1 Web Service概述
理解Web:
- Web是Internet提供的一种服务。
- Web是一个巨大的信息宝库。
- Web上的信息彼此关联。
- Web上的信息保存在Web站点中。
- Web简单易用。
Web服务简介:
一个应用程序,它能向外界暴露出一个能够通过Web进行调用的API。
这就是说,能够用编程的方法通过Web来调用这个应用程序。我们把调用这个Web service 的应用程序叫做客户。
Web服务作为一种新兴的web应用模式**,是一种崭新的分布式计算模型,是web上数据和信息**集成的有效机制。
Web服务就像web上的构件编程,开发人员通过调用web应用编程接口,将web服务集成进他们的应用程序,就像调用本地服务一样。
WEB服务使的开发人员能够在任何平台上使用任何编程语言,创建全球互联的电子商务应用程序。
Web服务的特点:
- 使用标准协议规范
- 使用协约的规范性
- 高度集成能力
- 完好的封装性
- 松散耦合
Web服务的优势:
- 跨越不同软硬件平台的分布式应用程序之间的互操作性
- 通过使用 Web 协议的防火墙,轻松、广泛地访问应用程序
- 跨平台、跨语言的数据模型 (XML) 方便了异构分布式应用程序的开发
8.2 SOA概述
W3C定义:SOA是一种应用程序体系结构,在这个体系结构中,所有功能都定义为独立的服务,这些服务带有定义明确的可调用接口,能够以定义好的顺序调用这些服务来形成业务流程。
SOA特征:
- 松散耦合
- 粗粒度服务
- 标准化接口
8.3 SOA关键技术
8.4 SOA实现方法
Web Service,即Web服务中一共有三种工作角色:服务提供者、服务请求者、服务注册中心。
其中,这种Web服务模型中的操作分为发布、查找和绑定,这些操作可以单次或者反复出现。
- 发布:服务提供者要发布服务的描述以方便服务请求者找到这个服务。
- 查找:查找服务中,服务请求者可以直接检索服务描述或者在服务注册中心查询所要的服务类型。对于服务请求方在生命周期会有两次涉及查找:1、在设计阶段会查找服务的接口描述。2、在运行阶段去调用而查找服务的位置描述。
- 绑定:服务请求者使用服务描述中的绑定细节来定位、联系并调用服务,从而在运行时与服务进行交互。绑定可以分成动态和静态绑定。动态绑定中,服务请求者通过注册中心查找服务描述,动态的与服务交互;静态绑定中,服务请求者已经与服务提供者达成默契,此时就通过本地文件或者其他方式直接与服务进行绑定。
8.5 服务描述语言
WSDL概述
WSDL是对服务进行描述的语言,有一套基于XML语法定义。
8.6 统一描述、发现和继承协议
UDDL是一种用于描述、发现、集成Web服务的技术,是Web服务协议栈的一个重要部分。
8.7 消息封装协议
SOAP以XML形式提供一个简单、清凉的用于在分散或者分布环境中交换结构化和类型信息的机制。
包括以下四个部分:
- SOAP封装结构:定义一个框架来表示消息中有什么内容,谁来处理这些内容。这些内容时可选的或者是必需的。
- SOAP编码规则:用以交换应用程序定义的数据类型的实例的一系列机制。
- SOAP RPC表示:定义一个用来表示远程过程调用和应答的协议。
- SOAP绑定:定义一个使用底层传输协议来完成在节点间交换SOAP信封的约定。