问答题 阅读以下软件系统架构选择的问题,回答问题。
希赛公司欲开发一个车辆定速巡航控制系统,以确保车辆在不断变化的地形中以固定的速度行驶。图给出了该系统的简化示意图。表描述了各种系统输入的说明。
公司的领域专家对需求进行深入分析后,将系统需求认定为:任何时刻,只要定速巡航控制系统处于工作状态,就要有确定的期望速度,并通过调整引擎油门的设定值来维持期望速度。
在对车辆定速巡航控制系统的架构进行设计时,公司的架构师王工提出采用面向对象的架构风格,而李工则主张采用控制环路的架构风格。在架构评估会议上,专家对这两种方案进行综合评价,最终采用了面向对象和控制环路相结合的混合架构风格。
问答题 在实际的软件项目开发中,采用成熟的架构风格是项目成功的保证。请用200字以内的文字说明:什么是软件架构风格;面向对象和控制环路两种架构风格各自的特点。
【正确答案】软件架构风格是拙述某一类特定应用领域中软件系统的组织方式和惯用方式。 面向对象架构风格的特征是将数据表示和基本操作封装在对象中。这种模式的构件是对象,对象维护自身表示的完整性,对象之间通过消息机制进行通信,对象交互时需要知道彼此的标识,通过对象之间的协作完成计算过程。 控制环路架构风格是将过程输出的指定属性维护在一个特定的参考值(设定点)。控制环路风格包括过程变量、被控变量、输入变量、操纵变量和设定点等构件,通过收集实际和理想的过程状态信息,并能调整过程变量使得实际状态趋于理想状态。
【答案解析】[解析] 软件系统架构风格多种多样,如何根据系统的要求选择合适的架构风格,是系统架构设计师需要掌握的重要技能。 考查概念层面的问题,根据美国卡耐基·梅隆大学软件工程研究所的定义,软件架构风格是描述某一类特定应用领域中软件系统组织方式和惯用方式。 面向对象架构风格的特征是将数据表示和基本操作封装在对象中。这种模式的构件是对象,对象维护自身表示的完整性,对象之间通过消息机制进行通信,对象交互时需要知道彼此的标识,通过对象之间的协作完成计算过程。 控制环路架构风格是将过程输出的指定属性维护在一个特定的参考值(设定点)。控制环路风格包括过程变量、被控变量、输入变量、操纵变量和设定点等构件,通过收集实际和理想的过程状态信息,并能调整过程变量使得实际状态趋于理想状态。
问答题 用户需求没有明确给出该系统如何根据输入集合计算输出。请用300字以内的文字针对该系统的增减速功能,分别给出两种架构风格中的主要构件,并详细描述计算过程。
【正确答案】对于系统的增减速功能,采用面向对象风格的巡航控制系统首先会定义司机、油门、时钟、速度计和车轮等构件。 整个计算的主要过程如下。 ①司机进行增/减速操作设置期望速度,该期望速度以消息的形式传递给速度计。 ②速度计通过向车轮和时钟发送消息获取车轮转速和时钟值,得到当前速度。 ③速度计用来计算当前速度和期望速度的速度差值。 ④该差值以消息的形式发送给油门,油门通过速度差值调节自身状态。 ⑤整个过程在时钟的控制下定期向速度计发送消息,重复执行②~④。 控制环路的架构风格以控制器为核心,期望速度、车轮脉冲、时钟和油门等作为构件。 具体的计算过程如下。 ①司机进行增/减速操作设置期望速度值。 ②将设定值置为期望速度值。 ③控制器采集车轮脉冲和时钟值,计算出当前速度。 ④比较期望速度和当前速度,计算速度差值,控制油门动作。 ⑤反复执行第③步和第④步。
【答案解析】难度比问题1要大一些。需要根据面向对象的风格特点与控制环路的风格特点,来分析系统功能应如何拆分成构件。 采用面向对象风格的巡航控制系统首先会定义司机、油门、时钟、速度计和车轮等对象。整个计算过程通过对象之间的合理交互完成期望的功能。 控制环路的架构风格将以控制器为核心,期望速度、车轮脉冲、时钟和油门等作为构件。通过不断的反馈机制实现对系统的控制。
问答题 实际的软件系统架构通常是多种架构风格的混合,不同的架构风格都有其适合的应用场景。以该系统为例,针对面向对象架构风格和控制环路架构风格,各给出两个适合的应用场景,并简要说明理由。
【正确答案】适合面向对象架构风格的应用场景如下。 ①用户刹车,立即退出巡航控制系统。理由:这是一个典型的事件驱动的场景,适合于面向对象风格。 ②系统对突发事件的处理,如某些部件失灵等。理由:当发生突发事件时,系统会同时产生数据和事件,这种情况用对象建模较为恰当。 适合面向控制环路架构风格的应用场景如下。 ①在达到期望速度后,系统维持恒定速度行驶。理由:这是一个典型的闭环控制的情景,系统需要在外界情况不断发生变化的情况下进行调整,使得系统状态尽可能接近期望状态。 ②用户改变期望速度后,系统不断地进行调整,直至到达恒定速度。理由:这是一个闭环控制情景,当用户设定期望速度值后,系统需要在不断获取当前速度和外界条件的情况下对系统状态持续调整,使得系统状态尽可能地接近这个新的期望状态。
【答案解析】主要从应用场景的角度比较两种架构风格。面向对象系统比较适合事件驱动的场景,特别是离散突发事件的处理;而控制环路则适合连续事件的处理,比如维持恒定车速等。