软件危机是指计算机软件开发和维护过程中遇到的一系列严重问题。包括两方面的问题:
(1)如何开发软件以满足日趋复杂的需求
(2)如何维护数量不断膨胀的软件产品
(1)将系统化的、规范化的可量化的方法应用于软件的开发运行和维护,即将工程应用于软件。
(2)对(1)中所述方法的研究
传统软件工程、面向对象的软件工程、构件软件工程、面向服务的软件工程
复用、分而治之、优化折中
(1)体系结构的设计选择对软件的长远成功是至关重要的
(2)体系结构描述具有不规范性
(3)软件体系结构理论和工具是解决软件复杂性和工程设计的必由之路
在时间和各类资源限制下,最大程度地满足用户需求。
软件体系结构(Software Architecture)包括构成系统的设计元素的描述、 设计元素
之间的交互、 设计元素的组合模式以及在这些模式中的约束。
元素以及元素的分类 素分为了两大类:构件 & 连接件
元素的组合模式,及模式中的约束
简而言之**,软件体系结构 = 构件 + 连接件 + 约束 **
构件
构件是具有某种功能的可复用的软件结构单元,表示系统中主要的计算元素 和 数据存储。
构件是一个抽象的概念,在程序中可以指程序函数、模块、对象、类等。
连接件
连接是构件间建立和维护行为关联与信息传递的途径。连接包含下面两种要素:
其中,机制指的实际中的消息传递方式。
而协议则决定了 消息的语义理解。
![image.png](https://img-blog.csdnimg.cn/img_convert/94340ee1d8266c22669646a3ee478813.png#clientId=u2d9c7292-1417-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=234&id=ua7af18dc&margin=[object Object]&name=image.png&originHeight=294&originWidth=696&originalType=binary&ratio=1&rotation=0&showTitle=false&size=183742&status=done&style=none&taskId=uab0d571d-4dbb-4d07-9462-9842600a9c4&title=&width=554)
![image.png](https://img-blog.csdnimg.cn/img_convert/34491feec9983b86f6b1c3008e69339d.png#clientId=u2d9c7292-1417-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=201&id=u8817de60&margin=[object Object]&name=image.png&originHeight=221&originWidth=697&originalType=binary&ratio=1&rotation=0&showTitle=false&size=132330&status=done&style=none&taskId=u5529e448-6455-4d7a-b4f2-7da2208dbc7&title=&width=632.5)
所有的设计原则等理论基本上都可以映射到下面一个或几个目标上。
![image.png](https://img-blog.csdnimg.cn/img_convert/f96a995f1b834349d7d12130a564fd35.png#clientId=u2d9c7292-1417-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=259&id=u8fe83c9d&margin=[object Object]&name=image.png&originHeight=511&originWidth=949&originalType=url&ratio=1&rotation=0&showTitle=false&size=396997&status=done&style=none&taskId=ub642777b-a494-421b-8f48-34738975a17&title=&width=481)
![image.png](https://img-blog.csdnimg.cn/img_convert/2ba8de6277094eea1e060b5683e5e30e.png#clientId=u2d9c7292-1417-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=235&id=u32b19423&margin=[object Object]&name=image.png&originHeight=336&originWidth=720&originalType=url&ratio=1&rotation=0&showTitle=false&size=171809&status=done&style=none&taskId=u49803d55-9123-419f-92e7-fccb7f5099a&title=&width=504)
构造软件同样需要基础。
计算机硬件结构、软件的基本组成、构成软件的可用组块三个方面。
体系结构描述语言和环境。
UnicCon是基于部件和连接器的。
可以描述体系结构的风格、系统族、体系结构实例和单个系统
Wright体系结构描述语言基于交互
构件说明定义了可以创建一个或多个实例的构件类型
Darwin系统的设计验证工具为设计人员提供了一种“What-If”的测试机制。
数据抽象和面向对象设计是在主程序和子过程设计基础上建立和发展起来的重要的软件描述方法。
数据抽象是面向对象设计的理论基础
类和对象是该描述方法的基础粒度,而非模块或者包。
本质上没有逃出主子程序的思想
面向对象的优点
信息隐藏保证了对象行为的可靠性
系统更容易分解成相互作用又相互独立的对象集合
为系统的维护和升级提供了良好的条件。
** **继承性和封装性提高了复用的可能性和方便性。
** 层次结构的优点**
** 层次结构的缺点**
是一种表达对象关系的数学语言:
Z Notation使用标准的逻辑操作符和集合操作符以及他们标准的常规语义
主要包括过滤器和管道两种元素。在这种结构中,构件被称为过滤器,负责对数据进行加工处理。每个过滤器都有一组输入端口和输出端口,从输入端口接收数据,经过内部加工处理之后,传送到输出端口上。数据通过相邻过滤器之间的连接件进行传输,连接件可以看作输入数据流和输出数据流之间的通路,这就是管道。
![image.png](https://img-blog.csdnimg.cn/img_convert/001539064c00c15a4d739546a35d50f3.png#clientId=u2d9c7292-1417-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=u248ac0b6&margin=[object Object]&name=image.png&originHeight=187&originWidth=655&originalType=url&ratio=1&rotation=0&showTitle=false&size=21135&status=done&style=none&taskId=u7ed3037c-298a-4015-bb63-bbc2b3f9963&title=)
优点:
简单性。
支持复用。
系统具有可扩展性和可进化型。
系统并发性(每个过滤器可以独立运行,不同子任务可以并行执行,提高效率)。
便于系统分析。
缺点:
系统处理工程是批处理方式。
不适合用来设计交互式应用系统。
由于没有通用的数据传输标准,因此每个过滤器都需要解析输入数据和合成数据。
难以进行错误处理。
_传统的编译器就是管道/过滤器体系结构风格的一个实例。_编译器由词法分析、语法分析、语义分析、中间代码生成、中间代码优化和目标代码生成几个模块组成,一个模块的输出是另一个模块的输入。源程序经过各个模块的独立处理之后,最终将产生目标程序。
在面向对象体系结构中,软件工程的模块化、信息隐藏、抽象和重用原则得到了充分的体现。在这种体系结构中,数据表示和相关原语操作都被封装在抽象数据类型中。在这种风格中,对象是构件,也成为抽象数据类型的实例。对象与对象之间,通过函数调用和过程调用来进行交互。
![image.png](https://img-blog.csdnimg.cn/img_convert/2b741e46c94daf9612b7ed0d8e03e124.png#clientId=u2d9c7292-1417-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=250&id=ub9abd5e1&margin=[object Object]&name=image.png&originHeight=266&originWidth=451&originalType=url&ratio=1&rotation=0&showTitle=false&size=30542&status=done&style=none&taskId=u4ac597e7-55a4-46b3-995b-300b70e5b20&title=&width=424)
优点:
缺点:
事件驱动就是在当前系统的基础之上,根据事件声明和发展状况来驱动整个应用程序运行。
事件驱动体系结构的基本思想是:系统对外部的行为表现可以通过它对事件的处理来实现。在这种体系结构中,构件不再直接调用过程,而是声明事件。系统其他构件的过程可以在这些事件中进行注册。当触发一个事件的时候,系统会自动调用这个事件中注册的所有过程。因此,触发一个事件会引起其他构件的过程调用。
![image.png](https://img-blog.csdnimg.cn/img_convert/7dc83c8cd1b1060f6ab0155465ef8d41.png#clientId=u2d9c7292-1417-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=uf0192c1f&margin=[object Object]&name=image.png&originHeight=122&originWidth=370&originalType=url&ratio=1&rotation=0&showTitle=false&size=9274&status=done&style=none&taskId=uf14b145c-38e1-4ca9-81e1-211b9ff97a4&title=)
优点:
缺点:
在分层风格中,系统将划分为一个层次结构。
每一层都具有高度的内聚性,包含抽象程度一致的各种构件,支持信息隐藏。
分层有助于将复杂系统划分为独立的模块,从而简化程序的设计和实现。
通过分解,可以将系统功能划分为一些具有明确定义的层,较高层是面对特定问题,较低层具有一般性。
每层都为上层提供服务,同时又利用了下层的逻辑功能。在分层体系结构中,每一层只对相邻层可见。层次之间的连接件是协议和过程调用。用以实现各层之间的交互。
![image.png](https://img-blog.csdnimg.cn/img_convert/3e91d31e9e91d5dc4579cd885e01068e.png#clientId=u2d9c7292-1417-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=269&id=ua52f9214&margin=[object Object]&name=image.png&originHeight=478&originWidth=471&originalType=url&ratio=1&rotation=0&showTitle=false&size=43505&status=done&style=none&taskId=ub9a94a24-922d-4892-8dc5-29a8cbf1bea&title=&width=265)![image.png](https://img-blog.csdnimg.cn/img_convert/16e702c9d92882ecb509cf74e4968cfa.png#clientId=u2d9c7292-1417-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=226&id=CGpbf&margin=[object Object]&name=image.png&originHeight=424&originWidth=641&originalType=url&ratio=1&rotation=0&showTitle=false&size=307469&status=done&style=none&taskId=ua06b0a1a-3c3b-47c7-aa26-86ef9552fbe&title=&width=342)
优点:
设计者可以将系统分解为一个增量的步骤序列从而完成复杂的业务逻辑。
每一层之多和相邻的上下两层进行交互。
只要给相邻层提供相同的接口。
缺点:
并非所有系统都能够按照层次来进行划分。
很难找到一种合适和正确的层次划分方法。
在传输数据是,需要经过多个层次。
多层结构难以调试。
C2结构是一个层次网络,包括构件和连接件两种软件元素。构件和连接键都是包含顶部和底部的软件元素。构件和构件之间只能通过连接件进行连接,而连接件之间则可以直接进行连接。构件的顶部、底部分别与连接件的底部、顶部连接,连接件的顶部、底部也分别与连接件的底部、顶部连接。
在C2体系结构中,构件之间的所有通信必须使用消息传递机制来实现。构件之间所有传递的信息可以分为两种,一种是向上层构件发出服务请求的请求消息,另一种是向下层构件发出指示状态变化的通知消息。连接件负责消息的过滤、路由、广播、通信和相关处理。
![image.png](https://img-blog.csdnimg.cn/img_convert/3905dfe4947a3b4644a42f1c8ed1ec35.png#clientId=u2d9c7292-1417-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=264&id=ube127902&margin=[object Object]&name=image.png&originHeight=336&originWidth=629&originalType=url&ratio=1&rotation=0&showTitle=false&size=36244&status=done&style=none&taskId=uf49ccffd-7a8f-473f-a9e2-049e77cb24b&title=&width=494)
优点:
可以使用任何编程语言来开发构件,构件重用和替换比较容易实现
具有一定的扩展能力,可以有多种不同粒度的构件
构件不需要共享地址空间,避免了共享全局变量所造成的复杂关系
具有良好的适应性
在C2体系结构中,可以使用多个工具集和多种媒体类型,能够动态地更新系统的框架结构
缺点:
构件和构件之间不允许直接相连
与某一个连接件相关联的构件和连接件的数目没有限制
数据共享风格也成为仓库风格。
在这种风格中,有两种不同类型的软件元素:一种是中央数据单元,也成为资源库,用于表示系统的当前状态;另一种是相互依赖的构件组,这些构件可以对中央数据单元实施操作。中央数据单元和构件之间可以进行信息交换,这是数据共享体系结构的技术实现基础。
根据所使用的控制策略不同,数据共享体系结构可以分为两种类型,一种是传统的数据库,另一种是黑板。
如果由输入流中的事件来驱动系统进行信息处理,把执行结构存储到中央数据单元,则这个系统就是数据库应用系统。
如果由中央数据单元的当前状态来驱动系统运行,则这个系统就是黑板应用系统。
黑板是数据共享体系结构的一个特例,用以解决状态冲突并处理可能存在的不确定性知识源。
黑板常用于信号处理,如语音和模式识别,同时在自然语言处理领域中也有广泛的应用,如机器翻译和句法分析
![image.png](https://img-blog.csdnimg.cn/img_convert/bdd3520293d29a9106de7ce14726545b.png#clientId=u2d9c7292-1417-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=uf426999f&margin=[object Object]&name=image.png&originHeight=295&originWidth=438&originalType=url&ratio=1&rotation=0&showTitle=false&size=35834&status=done&style=none&taskId=u10a192c5-599b-4888-9a77-6ff050457af&title=)
优点:
缺点:
解释器作为一种体系结构,主要用于构建虚拟机,用以弥合程序语义和计算机硬件之间的间隙。实际上,解释器是利用软件来创建的一种虚拟机,因此,解释器风格又被称为虚拟机风格。
![image.png](https://img-blog.csdnimg.cn/img_convert/ec186e758c23a3e08e77826a4d65ce7d.png#clientId=u2d9c7292-1417-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=282&id=u2d652284&margin=[object Object]&name=image.png&originHeight=323&originWidth=608&originalType=url&ratio=1&rotation=0&showTitle=false&size=39948&status=done&style=none&taskId=u3f819905-71bf-41be-bf3a-b2d25abde8e&title=&width=531)
优点:
缺点:
![image.png](https://img-blog.csdnimg.cn/img_convert/d984fad460ff4480fb789b56b9c94d28.png#clientId=u2d9c7292-1417-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=253&id=u87e64fe6&margin=[object Object]&name=image.png&originHeight=378&originWidth=461&originalType=url&ratio=1&rotation=0&showTitle=false&size=51842&status=done&style=none&taskId=ub55c1001-0d88-4c9b-b5c9-0c6cf9f27c6&title=&width=308)![image.png](https://img-blog.csdnimg.cn/img_convert/61e7d45de929365e62edb3fd778ac66c.png#clientId=u2d9c7292-1417-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=246&id=lxKIM&margin=[object Object]&name=image.png&originHeight=318&originWidth=492&originalType=url&ratio=1&rotation=0&showTitle=false&size=46259&status=done&style=none&taskId=u820b3e0f-31eb-4365-9ae5-80ffcf610f5&title=&width=381)
优点:
客户机构件和服务器构件分别运行在不同的计算机上,有利于分布式数据的组织和处理。
构件之间的位置是相互透明的,客户机程序和服务器程序都不必考虑对方的实际存储位置。
客户机侧重数据的显示和分析,服务器则注重数据的管理。
构件之间是彼此独立和充分隔离的。
将大规模的业务逻辑分布到多个通过网络连接的低成本的计算机,降低了系统的整体开销。
缺点:
开发成本较高。
在开发C/S结构系统时,大部分工作都都集中在客户机程序的设计上,增加了设计的复杂度。
信息内容和形式单一。
如果对C/S体系结构的系统进行升级,开发人员需要到现场来更新客户机程序,同时需要对运行环境进行重新配置,增加了维护费用。
两层C/S结构采用了单一的服务器,同时以局域网为中心,因此难以扩展到Intranet和Internet。
数据安全性不高。
B/S结构是三层C/S体系结构的一种实现方式,主要包括浏览器,Web服务器和数据库服务器。B/S结构主要利用不断成熟的WWW技术,结合浏览器的多脚本语言,采用通用浏览器来实现原来需要复杂的专用软件才能实现的强大功能,节约了开发成本。
当用户运行某个应用程序时,只需要在可以断的浏览器中输入响应的 URL,向 Web 服务器提出 HTTP 请求。
当Web 服务器接收 HTTP 请求之后,会调用相关的应用程序(Servlets),同时向数据库服务器发送数据操作请求。
数据库服务器对数据操作请求进行响应,将结果返回给Web服务器的应用程序。
![image.png](https://img-blog.csdnimg.cn/img_convert/f0aad1c3475a7af18d49570d16ae9440.png#clientId=u2d9c7292-1417-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=uad35dfed&margin=[object Object]&name=image.png&originHeight=243&originWidth=304&originalType=url&ratio=1&rotation=0&showTitle=false&size=23886&status=done&style=none&taskId=u39eb66b8-8d69-4ad7-a4f7-328c78e0866&title=)
优点:
客户端只需要安装浏览器,操作简单。
运用HTTP标准协议和统一客户端软件,能够实现跨平台通信。
开发成本比较低,只需要维护Web服务器程序和中心数据库。
缺点:
个性化程度比较低,所有客户端程序的功能都是一样的。
客户端数据处理能力比较差。
在B/S结构的系统中,数据提交一般以页面为单位,动态交互性不强,不利于在线事务处理。
B/S体系结构的可扩展性比较差,系统安全性难以保障。
B/S结构的应用系统查询中心数据库,其速度要远低于C/S体系结构。
公共对象请求代理(Common Object Request Broker Architecture,CORBA)是由对象管理组织(Object Management Group,OMG)提出来的,是一套完整的对象技术规范,其核心包括标准语言、接口和协议。
在异构分布式环境下,可以利用CORBA来实现应用程序之间的交互操作,同时,CORBA也提供了独立于开发平台的编程语言的对象重用方法。
![image.png](https://img-blog.csdnimg.cn/img_convert/95d2fdb0906e6af288e8cbcbc36f385a.png#clientId=u2d9c7292-1417-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=u15387c7b&margin=[object Object]&name=image.png&originHeight=229&originWidth=484&originalType=url&ratio=1&rotation=0&showTitle=false&size=27310&status=done&style=none&taskId=ua864b6b4-0123-4a05-884b-ae58d3d84c3&title=)
优点:
缺点:
?
正交体系结构是一种以 垂直线索构件族 为基础的层次化结构,包括组织层和线索。
在每一个组织层中,都包含具有相同抽象级别的构件。
线索是子系统的实例,是由完成不同层次功能的构件通过相互调用而形成的,每一条线索完成系统的一部分相对独立的功能。
在正交体系结构中,每条线索的实现与其他线索的实现无关或关联很少。在同一层次中,构件之间不存在相互调用关系。
![image.png](https://img-blog.csdnimg.cn/img_convert/1fdeed8c44d83b486c1a4ee2a2c78767.png#clientId=u2d9c7292-1417-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=u46be5500&margin=[object Object]&name=image.png&originHeight=219&originWidth=536&originalType=url&ratio=1&rotation=0&showTitle=false&size=26651&status=done&style=none&taskId=ue09b9028-1898-4551-a465-77f9cda54a4&title=)
优点:
缺点:
?
模型-视图-控制器(Model-View-Controller,MVC)是一种常见的体系结构风格。MVC被广泛应用与用户交互程序的设计中。![image.png](https://img-blog.csdnimg.cn/img_convert/2e140934cdb9cbf5d4b11408a9620ab6.png#clientId=u2d9c7292-1417-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=396&id=uc2e5b6c2&margin=[object Object]&name=image.png&originHeight=461&originWidth=716&originalType=url&ratio=1&rotation=0&showTitle=false&size=69696&status=done&style=none&taskId=u07c36e59-b01b-48ce-b07d-a953bf73f0c&title=&width=615)
优点:
缺点: