概述
题外话:本篇博客讲的是软件架构设计中的软件架构概念以及软件架构风格。由于软件架构风格包含的内容太多,在本篇博客中只讲一部分的架构风格,其余的放到下一篇博客中继续阐述。
一:软件架构的概念
1、软件架构的概念
-
软件架构是需求分析和软件测试的桥梁,它把用户的需求转换为项目中具体的软件设计,是开发软件中必不可少的一个环节。
-
软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。
-
软件架构是项目干系人进行交流的手段,明确了对系统实现的约束条件,决定了开发和维护组织的组织结构,制约着系统的质量属性。
-
软件架构使推理和控制的更改更加简单,有助于循序渐进的原型设计,可以作为培训的基础。
-
软件架构是可传递和可复用的模型,通过研究软件架构可能预测软件的质量。
2、软件架构的发展史
3、软件架构建模
设计软件架构的首要问题是如何表示软件架构,即如何对软件架构建模。根据建模的侧重点不同,可以将软件架构建模分为五种模型,即结构模型、框架模型、动态模型、过程模型和功能模型。
结构模型:以架构的组件、连接件和其他概念来刻画结构。研究架构模型的核心是架构描述语言。
框架模型:框架模型与结构模型类似,但是框架模型不太侧重描述结构的细节而更侧重于整体的结构。
动态模型:动态模型是对结构模型或框架模型的一种补充,主要是研究系统的“大颗粒度”行为性质。例如,描述系统的重新配置或演化。
过程模型:过程模型研究构造系统的步骤和过程。因而结构是遵循某些过程脚本的结果。
功能模型:由一组功能构件按层次组成,下层向上层提供服务。可以看做是一种特殊的框架模型。
在这五种模型中,其中最常用的是结构模型和动态模型。后来人们将五种模型结合在一起形了“4+1”视图模型。“4+1”视图模型从五个不同的视角包括逻辑视图、开发视图、进程视图、物理视图和场景视图来描述软件架构。“4+1”视图模型和UML中的“4+1”视图能够一一对应。
二:软件架构风格
1、软件架构风格的概念
-
架构设计设计的一个核心问题是能否达到架构级的软件复用。
-
架构风格是描述某一特定应用领域中系统组织方式的惯用模式。
-
架构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个构件有效地组织成一个完整的系统。
-
架构风格定义了用于描述系统的术语表和一组指导构件系统的规则。
通常架构风格分为以下几种类型:
(1)数据流风格:批处理序列、管道-过滤器风格。
(2)调用/返回风格:主程序/子程序、面向对象、层次结构
(3)独立构件风格:进程通信、事件驱动系统(隐式调用)
(4)虚拟机风格:解释器、结基于规则的系统
(5)仓库风格:数据库系统、超文本系统、黑板系统
2、软件架构风格
(1)数据流风格:数据流风格主要是对数据进行处理并分阶段,前一个阶段的处理结果作为下一个阶段的输入。早期编译器就是采用的这种架构。要一步一步处理的,均可考虑采用此架构风格。
a、批处理系列:构件为一系列固定顺序的计算单元,构件之间只通过数据传递交互。每个处理步骤是一个独立的程序,每一步必须在其前一步结束后才能开始,数据必须是完整的,以整体的方式传递。
b、管道-过滤器:每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。这个过程通常是通过对输入数据流的变换或计算来完成的,包括通过计算和增加信息以丰富数据、通过浓缩和删除以精简数据、通过改变记录方式以转化数据和递增地转化数据等。这里的构件称为过滤器,连接件就是数据流传输的管道,将一个过滤器的输出传到另一个过滤器的输入。
批处理序列和管道-过滤器的区别:批处理序列强调的是数据必须是完整的,以整体的形式进行传递。也就是说要得到一个完整的数据才能够传递到下一个环节。而管道-过滤器是流式的风格,数据流可以随时停止,但是批处理就不行。比如断点下载,以前下载一个视频必须要全部下载完不能够中断但是现在可以随时停止,下一次在接着之前的下载继续进行。
(2)调用/返回风格:
a、主程序/子程序:单线程控制,把问题划分为若干个处理步骤,构件即为主程序和子程序,子程序通常可合成为模块。过程调用作为交互机制,即充当连接件的角色。调用关系具有层次性,其语义逻辑表现为主程序的正确性取决于它调用的子程序的正确性。
b、面向对象: 构件是对象,对象是抽象数据类型的实例。在抽象数据类型中,数据的表示和它们的相应操作被封装起来,对象的行为体现在某接受和请求的动作。连接件即是对象间交互的方式,对象是通过函数和过程的调用来交互的。
c、层次结构:构件组织成一个层次结构,连接件通过决定层间如何交互的协议来定义。每层为上一层提供服务,使用下一层的服务,只能见到与自己邻接的层。通过层次结构,可以将大的问题分解为若干个渐进的小问题逐步解决,可以隐藏问题的复杂度。修改某一层,最多影响其相邻的两层(通常只能影响上层)。
(3)独立构件风格:
a、进程通信:构件是独立的过程,连接件是消息传递。构件通常是命名过程,消息传递的方式可以是点对点、异步或同步方式,以及远程过程(方法)调用等。
b、事件驱动系统(隐式调用):构件不直接调用一个过程,而是触发或广播一个或多个事件。构件中的过程在一个或多个事件中注册,当某个事件被触发时,系统自动调用在这个事件中注册的所有过程。一个事件的触发就导致了另一个模块中的过程调用。这种风格中的构件是匿名的过程,’ 他们之间交互的连接件往往是以过程之间的隐式调用来实现的。主要优点是为软件复用提供了强大,的支持,为构件的维护和演化带来了方便;其缺点是构件放弃了对系统计算的控制。
(4)虚拟机风格:
a、解释器:解释器通常包括一个完成解释工作的解释引擎、一个包含将被解释的代码的存储区、一个记录解释引擎当前工作状态的数据结构,以及一个记录源代码被解释执行的进度的数据结构。具有解释器风格的软件中含有一个虚拟机,可以仿真硬件的执行过程和一些关键应用,其缺点是执行效率比较低。
b、结基于规则的系统:基于规则的系统包括规则集、规则解释器、规则/数据选择器和工作内存,一般用在人工智能领域和DSS(决策分析系统)中。
(5)仓库风格(以数据为中心的风格):现代集成编译环境一般采用这种架构风格。
a、数据库系统:构件主要有两大类,一类是中央共享数据源,保存当前系统的数据状态;另一类是多个独立处理单元,处理单元对数据元素进行操作。
b、超文本系统:构件以网状链接方式相互连接,用户可以在构件之间进行按照人类的联想思维方式任意跳转到相关构件。超文本是一种非线性的网状信息组织方法,它以结点为基本单位,链作为结点之间的联想式关联。超文本系统通常应用在互联网领域。
c、黑板系统:包括知识源、黑板和控制三部分。知识源包括若干独立计算的不同单元,提供解决问题的知识,知识源响应黑板的变化,也只修改黑板;黑板是一个全局数据库,包含问题域解空间的全部状态,是知识源相互作用的唯一媒介;知识源响应是通过过黑板状态的变化来控制的。黑板系统通常应用在对于解决问题没有确定性算法的软件中(信号处理、音频处理、问题规划和编译器优化等)。
(6)闭环控制架构(过程控制):当软件被用来操作一个物理系统时,软件与硬件之间可以粗略地表示为一个反馈循环,这个反馈循环通过接受一定的输入,确定一系列的输出,最终使环境达到一个新的状态。
适合于嵌入式系统,涉及连续的动作与状态。
三、练习题
-
Java程序可以做到“一次编写,到处运行”,从架构风格上看符合( )风格的特点。
答题解析:虚拟机。
-
在网络通信中,进行包的解析,一般先进行包头的分离,然后进行报文解析及后续处理,根据这一特点,选用( )风格最合适。
答题解析:数据流风格。数据流风格就是把上一个环节的输出作为下一个环节的输入。
-
某公司欲开发一个基于图形用户界面的集成调试器。该调试器的编辑器和变量监视器可以设置调试断点。当调试器在断点处暂停运行时,编辑程序可以自动卷屏到断点,变量监视器刷新变量数值,针对这样的功能描述,采用( )的架构风格最为合适。
答题解析:隐式调用。该题强调的是某个功能暂停运行时,需要调用其他的事件。
-
某游戏公司欲开发一个大型多人即时战略游戏,游戏设计的目标之一是能够支持玩家自行创建战役地图,定义游戏对象的行为和之间的关系,针对该目标,公司应该采用()架构风格最为合适。(四选一:管道-过滤器、隐式调用、主程序/子程序 、解释器)。
答案解析:解释器。自定义地图,并且能够运行,故选解释器。
-
某公司承接了一个开发家用空调自动调温器的任务,调温器测量外部空气温度,根据设定的期望温度控制空调的开关,根据该需求,公司应采用( )架构风格最为合适。(四选一:解析器、过程控制、分层、管道-过滤器)。
答案解析:过程控制。
-
某公司欲开发一个语言识别系统,语言识别的主要过程包括分割原始语音信号、识别音素、产生候选词、判定语法片断、提供语义解释等。每个过程都需要进行基于先验知识的条件判断并进行相应的识别动作。针对该系统的特点,采用( )架构风格最为合适。(四选一:解释器、面向对象 、黑板、隐式调用)。
答案解析:黑板系统。只要看到是信息处理、音频处理等相关的都是黑板系统架构风格。
-
某公司欲开发一个漫步者机器人,用来完成火星探测任务。机器人的控制者首先定义探测任务和任务之间的时序依赖性,机器人接受任务后,需要根据自身状态和外界环境进行动态调整,最终自动完成任务。针对这些需求,该机器人应该采用()架构风格最为合适。(四选一:解释器、主程序/子程序、隐式调用、管道-过滤器)
答案解析:书上的标准答案是隐式调用,但是该题出的不严谨,从题意上来看采用进程控制的架构风格更加的合理。
-
Windows操作系统在图形用户界面处理方面采用的核心结构风格是() 风格。
答题解析:隐式调用。图形处理界面是典型的事件驱动,其就是点击什么按钮需要执行什么事件。
-
“编译器”是一种非常重要的基础软件,其核心功能是对源代码形态的单个或一组源程序依次进行预处理、词法分析、语法分析、语义分析、代码生成、代码优化等处理,最终生成目标机器的可执行代码。考虑以下与编译器相关的软件架构设计场景:传统的编译器设计中,上述处理过程都以独立功能模块的形式存在,程序源代码作为一个整体,依次在不同模块中进行传递,最终完成编译过程。针对这种设计思路,传统的编译器采用(1)架构风格比较合适。随着编译、链接、调试、执行等开发过程的一体化趋势发展,集成开发环境( IDE )随之出现。IDE集成了编译器、连接器、调试器等多种工具,支持代码的增量修改与处理,能够实现不同工具之间的信息交互,覆盖整个软件开发生命周期。针对这种需求, IDE采用(2)架构风格比较合适, IDE强调交互式编程,用户在修改程序代码后,会同时触发语法高亮显示、 语法错误提示、程序结构更新等多种功能的调用与结果呈现,针对这种需求,通常采用(3)架构风格比较合适。某公司已经开发了一款针对某种嵌入式操作系统专用编程语言的IDE ,随着一种新的嵌入式操作系统上市并迅速占领市场,公司决定对IDE进行行适应性改造,支持采用现有编程语言进行编程,生成符合新操作系统要求的运行代码,并能够在现有操作系统上模拟出新操作系统的运行环境,以支持代码调试工作。针对上述要求,为了使IDE能够生成符合新操作系统要求的运行代码,采用基于(4)的架构设计策略比较合适;为了模拟新操作系统的运行环境,通常采用(5)架构风格比较合适。
(1)A. 管道-过滤器 B. 顺序批处理 C. 过程控制 D. 独立进程
(2)A. 规则引擎 B. 解释器 C. 数据共享 D. 黑板
(3)A. 隐式调用 B. 显示调用 C. 主程序-子程序 D. 层次结构
(4)A. 代理 B. 适配 C. 包装 D. 模拟
(5)A. 隐式调用 B. 仓库结构 C. 基于规则 D. 虚拟机
答题解析:
(1)B。传统的编译器采用的是数据流的结构风格,上文中又强调了作为一个整体,故选择B。
(2)C。数据共享又叫仓库风格,但是黑板也是属于仓库风格中的一种,故选D也是可行的
(3)A。上文中强调的是修改程序代码后,需要调用其他的事件,故选A。
(4)B。上文中强调的是要在老系统中模拟出新系统的运行环境,典型的适配器架构模式
(5)D。虚拟机架构风格能够解决不同环境的相互兼容。
最后
以上就是刻苦朋友为你收集整理的详谈软件架构设计(一)之软件架构的概念以及风格-上的全部内容,希望文章能够帮你解决详谈软件架构设计(一)之软件架构的概念以及风格-上所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复