一、软件架构风格-数据流风格
数据-》第1步处理-》数据-》第2步处理-》数据-》第N步处理 【分步处理】
优点:
1、松耦合【高内聚-低耦合】
2、良好的重用性/可维护性;
3、可扩展性【标准接口适配】
4、良好的隐蔽性;
5、支持并行。
缺点
1、交互性较差;
2、复杂性较高;
3、性能较差(每个过滤器都需要解析与合成数据)
典型实例
传统编译器、网络报文处理。
数据流风格:
**批处理序列:**大量整体数据、无需用户交互
**管道-过滤器:**流式数据弱用户交互
二、软件架构风格-调用/返回风格
主函数 -》调用子函数-》子函数-》返回给主函数执行结果
调用/返回风格:
**主程序/子程序:**面向过程
面向对象:对象的方法调用
分层:层与层之间的方法调用 (ISO网络分层,计算机软硬件系统)
优点
1、良好的重用性,只要接口不变可用在其它处
2、可维护性好;
3、可扩展性好,支持递增设计。
缺点
1、并不是每个系统都方便分层;
2、很难找到一个合适的、正确的层次抽象方法;
3、不同层次之间耦合度高的系统很难实现。
特点:
各个层次的组件形成不同功能级别的虚拟机;
多层相互协同工作,而且实现透明。
三、软件架构风格-独立构件风格
独立构件风格:
主函数-》触发事件-》事件管理机制-》通知执行-》子函数-》返回执行结果
构件之间不直接交互、松耦合
调用返回风格:
主函数-》调用子函数-》子函数-》返回执行结果
构件之间直接交互、紧耦合
优点:
1、松耦合。2、良好的重用性/可修改性/可扩展性。
缺点:
1、构件放弃了对系统计算的控制。一个构件触发一个事件时,不能确定其他构件是否会响应它。而且即使它知道事件注册了哪些构件的过程,它也不能保证这些过程被调用的顺序。
2、数据交换的问题。3、既然过程的语义必须依赖于被触发事件的上下文约束,关于正确性的推理就存在问题。
特点:
系统由若干子系统构成且成为一个整体;系统有统一的目标;子系统有主从之分;每一子系统有自己的事件收集和处理机制
四、软件架构风格-虚拟机风格
C语言代码=》
编译=》
机器语言代码=》
操作系统
Java语言代码=》
编译=》
字节码文件=》
JAVA虚拟机=》
操作系统
基于规则的系统构成:规则集、规则解释器、规则/数据选择及工作内存,一般用在人工智能领域和DSS(决策支持系统)中。
五、软件架构风格-仓库风格
仓库风格【以数据为中心】
1、数据库系统
2、黑板系统:语音识别、知识推理
3、超文本系统
以下是黑板系统:
黑板上信息有变动会触发更新数据源,可以利用数据库系统来实现,需要在其上增加触发机制。
比如IDE也是黑板系统
剪贴板
六、软件架构风格 -闭环控制架构(过程控制)
开环控制系统:
闭环控制系统:
适合于嵌入式系统,用于解决简单闭环控制问题
经典应用:空调温控,定速巡航。
七、软件架构风格-C2风格
C2架构的基本规则:
- 构件和连接件都有一个顶部和一个底部。
- 构件的顶部要连接到连接件的底部,构件的底部要连接到连接件的顶部,构件之间不允许直连。
- 一个连接件可以和任意数目的其他构件和连接件连接。
- 当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部。
八、软件架构风格-MDA【Model Driven Architecture模型驱动架构】
Model Driven Architecture
【模型驱动架构】
-Model ?
客观事物的抽象表示
- Architecture ?
构成系统的部件、连接件及其约束的规约
-Model-Driven ?
使用模型完成软件的分析、设计、构建、部署、维护等各开发活动
-MDA起源于分离系统规约和平台实现的思想
-MDA的主要目标:
Portability(可移植性),interoperability(互通性)
Reusability(可重用性)
MDA的核心模型:
- 计算无关模型(CIM):对某具体行业内一个项目的业务需求及其系统功能需求进行分析
- 平合独立模型(PIM):具有高抽象层次、独立于任何实现技术的模型。
- 平台相关模型(PSM):为某种特定实现技术量身定做,让你用这种技术中可用的实现构造来描述系统的模型。PIM会被变换成一个或多个PSM。
- 代码Code:用源代码对系统的描述(规约)。每个PSM都将被变换成代码。
PIM(UML)=》变换工具=》PSM=》变换工具=》CODE
考试灵活多变,要举一反三。
例子:
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.虚拟机
参考答案:B、C、A、B、D