软考系统架构设计师下午试题加答案(二).docx

上传人:wux****ua 文档编号:9069124 上传时间:2020-04-02 格式:DOCX 页数:16 大小:372.20KB
返回 下载 相关 举报
软考系统架构设计师下午试题加答案(二).docx_第1页
第1页 / 共16页
软考系统架构设计师下午试题加答案(二).docx_第2页
第2页 / 共16页
软考系统架构设计师下午试题加答案(二).docx_第3页
第3页 / 共16页
点击查看更多>>
资源描述
系统架构设计师 http:/www.educity.cn/rk/sa/index.html软考系统架构设计师下午试题加答案(二) 2016年下半年软考系统架构设计师考试将于11月12日举行。大家都准备好了吗?下面由希赛小编为大家整理了一些系统架构设计师试题,希望对大家有所帮助。 试题三 阅读以下关于设计模式应用的叙述,根据要求回答问题。 说明某软件公司承接了一项面向儿童的模拟游戏软件的开发任务,该游戏软件主要模拟现实世界中各种鸭子的发声特征、飞行特征和外观特征。游戏软件需要模拟的鸭子种类及其特征如表213所示 为支持将来能够模拟更多种类鸭子的特征,该公司架构师采用某种设计模式设计的类图如图2-9所示。在图29中,类Duck描述了抽象的鸭子,方法fly7、quack7和display7分别表示不同种类的鸭子都具有飞行特征、发声特征和外观特征;类FlyBehavior与QuackBehavior分别用于表示抽象的飞行行为与发声行为。 7、问题1 请用350字以内的文字指出该公司架构师所采用的设计模式的具体名称、设计意图及其优缺点。 8、问题2 请用400字以内的文字指出该公司架构师所采用的设计模式的适用性,以及图2-9中需要考虑哪些实现问题? 9、问题3 设计模式在力度和抽象层次上各不相同。按设计模式的目的划分,可分为创建型、结构型和行为型3种模式;按设计模式的范围划分,可分为类设计模式和对象设计模式两种。请将下列AJ标记的设计模式填入到表214中的(1)(5)空缺处。(请用AJ答题) AAbstractFactory模式 BAdapter模式 CChainofResponsibility模式 DDecorator模式 EFactoryMethod模式 FFlyweight模式 GInterpreter模式 HIterator模式 ITemplateMethod模式 JVisitor模式 参考答案 7、依题意,在图2-9中,Duck为抽象类,描述了抽象的鸭子,方法fly()、quack()和display()分别表示不同种类的鸭子都具有飞行特征、发声特征和外观特征;而类RubberDuck、MallardDuck、CottonDuck和RedHeadDuck分别描述具体的鸭子种类;类FlyBehavior与QuackBehavior为抽象类,分别用于表示抽象的飞行行为与发声行为;类FlyNoWav与FlyWithWings分别描述不能飞行的行为和用翅膀飞行的行为;类Quack、Squeak与QuackNoWay分别描述发出“嘎嘎”声的行为、发出橡皮与空气摩擦声的行为和不发声的行为。鉴于不同的鸭子种类只是在行为方面有所区别,且为支持将来能够模拟更多种类鸭子的特征,该公司架构师最有可能采用策略(Strategy)设计模式来设计如图29所示的模拟鸭子游戏软件。 Strategy模式定义了一组能够用来表示可能行为集合的类。这些行为可以在应用程序中使用,来修改应用程序功能。Strategy(策略)模式的设计意图是,定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换,使得算法可独立于使用它的客户而变化。具体而言,该模式是一种定义一系列算法的方法,从概念上看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。Strategy模式的一般结构如图213所示。 Strategy模式具有以下一些优点和缺点。 (1)另一种子类化方法。Strategy类层次为Context(上下文)定义了一系列的可供重用的算法或行为。继承有助于析取出这些算法中的公共功能。可以直接生成一个Context类的子类,从而给它以不同的行为。但这会将行为强制编制到Context中,而将算法的实现与Context的实现混合起来,从而使Context难以理解、难以维护和难以扩展,而且还不能动态地改变算法。最后得到一堆相关的类,它们之间的唯一差别是它们所使用的算法或行为。将算法封装在独立的Strategy类中使得架构师可以独立于Context而改变它,使它易于切换、理解和扩展。 (2)在类自身中定义了每一个行为,从而减少了一些条件语句;Strategy模式提供了用条件语句选择所需行为以外的另一种选择。当不同的行为堆砌在一个类中时,很难避免使用条件语句来选择合适的行为。将行为封装在一个个独立的Strategy类中消除了这些条件语句。 (3)更容易扩展模型,即在不对应用程序进行代码修改的情况下,使该模式具有新的行为。 (4)客户必须了解不同的Strategy。该模式有一个潜在的缺点,就是一个客户要选择一个合适的Strategy就必须知道这些Strategy到底有何不同。此时可能不得不向客户暴露具体的实现问题。因此仅当这些不同行为变成与客户相关的行为时,才需要使用Strategy模式。 (5)Strategy和Context之间的通信开销。无论各个ConcreteStrategy(具体策略)实现的算法是简单还是复杂,它们都共享Strategy定义的接口。因此很可能某些ConcreteStrategy不会都用到所有通过这个接口传递给它们的信息;简单的ConcreteStrategy可能不使用其中的任何信息。这就意味着有时Context会创建和初始化一些永远不会用到的参数。如果存在这样问题,那么将需要在Strategy和Context之间进行更加紧密的耦合。 (6)增加了对象的数目。Strategy增加了一个应用中的对象的数目。有时可以将Strategy实现为可供各Context共享的无状态的对象来减少这一开销。任何其余的状态都由Context维护。Context在每一次对Strategy对象的请求中都将这个状态传递过去。共享的Strategy不应在各次调用之间维护状态。 8、在以下情况中,应该使用Strategy模式。 (1)许多相关类只是在行为方面有所区别。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。 (2)需要使用一个算法的不同变体。例如,定义了一些反映不同的空间或时间权衡的算法,当这些变体实现为一个算法的类层次时,可以使用策略模式。 (3)算法使用客户端未知的数据,可使用策略模式以避免暴露复杂的、与算法相关的数据结构。 (4)一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入它们各自的Strategy类中以代替这些条件语句。 依题意,在图2-9中,需要考虑以下一些Strategy模式实现问题。 (1)定义类Duck和类FlyBehavior(或类QuackBehavior)接口。这些接口必须使得类FlyWithwings、类FlyNoWay、类Quack、类Squeak和类QuackNoWay等能够有效地访问它所需要的类Duck中的任何数据,反之亦然。一种解决办法是让类Duck将数据放在参数中传递给类FlyBehavior(或类QuackBehavior)操作,也就是说,将数据发送给类FlyBehavior(或类QuackBehavior)。这使得类FlyBehavior(或类QuackBehavior)和类Duck解耦。但从另一个角度考虑,类Duck也可能发送一些类FlyBehavior(或类QuackBehavior)不需要的数据。 另一种解决办法是让类Duck将自身作为一个参数传递给类FlyBehavior(或类QuackBehavior),该类FlyBehavior(或类QuackBehavior)再显式地向类Duck请求数据;或者类FlyBehavior(或类QuackBehavior)可以存储对它的类Duck的一个引用,这样根本不再需要传递任何东西。这两种情况下,类FlyBehavior(或类QuackBehavior)都可以请求到它所需要的数据。但要求类Duck必须对它的数据定义一个更为精细的接口,这将使得类FlyBehavior(或类QuackBehavior)和类Duck更加紧密地耦合在一起。 (2)将类FlyBehavior(或类QuackBehavior)作为模板参数。例如,在C+中,可利用模板机制用一个Strategy来配置一个类。然而这种技术仅当下面条件满足时才可以使用:可以在编译时选择Strategy;它无须在运行时改变。在这种情况下,要被配置的类(如类Duck)被定义为以一个Strategy类作为一个参数的模板类。使用模板不再需要定义给类FlyBehavior(或类QuackBehavior)定义接口的抽象类。把类FlyBehavior(或类QuackBehavior)作为一个模板参数也使得可以将一个类FlyBehavior(或类QuackBehavior)和它的类Duck静态地绑定在一起,从而提高效率。 (3)尽量使类FlyBehavior(或类QuackBehavior)成为可选的对象。即使在不使用额外的FlyBehavior(或类OuackBehayior)对象的情况下,类Duck也还有意义,那么它还可以被简化。类Duck在访问类FlyBehavior(或类QuackBehavior)前先检查它是否存在,如果有,那么就使用它;如果没有,那么类Duck执行默认的行为。这种方法的好处是客户根本不需要处理FlyBehavior(或类QuackBehavior)对象,除非它们不喜欢默认的行为。 9、设计模式主要用于得到简洁灵活的系统设计,GoF的书中共有23个设计模式,这些模式可以按两个准则来分类:一是按设计模式的目的划分,可分为创建型、结构型和行为型3种模式;二是按设计模式的范围划分,即根据设计模式是作用于类还是作用于对象来划分,可分为类设计模式和对象设计模式,如表216所示。 创建型模式是对对象实例化过程的抽象,它通过采用抽象类所定义的接口,封装了系统中对象如何创建及组合等信息。该模式允许在系统中创建对象,而不需要在代码中标识特定类的类型,这样用户就不需要编写大量复杂的代码来初始化对象。它是通过该类的子类来创建对象的。但是,这可能会限制在系统内创建对象的类型或数目。创建型模式主要有FactoryMethod(工厂方法)、AbstractFactory(抽象工厂)、Builder(构建器)、Prototype(原型)和Singleton(单独)等模式。 结构型模式主要用于如何组合已有的类和对象以获得更大的结构,一般借鉴封装、代理或继承等概念将一个或多个类或对象进行组合和封装,以提供统一的外部视图或新的功能。该模式允许在不重写代码或自定义代码的情况下创建系统,从而使系统具有增强的重复使用性和应用性能。该模式控制了应用程序大部分之间的关系,将以不同的方式影响应用程序。 结构型模式主要有Adapter(适配器)、Bridge(桥接)、Composite(组成)、Decorator(装饰)、Fagade(外观)、Flyweight(享元)和Proxy(代理)等。行为型模式主要用于对象之间的职责及其提供的服务的分配,它不仅描述对象或类的模式,还描述它们之间的通信模式,特别是描述一组对等的对象怎样相互协作以完成其中任意一个对象都无法单独完成的任务。该模式可以影响一个系统的状态和行为流。通过优化状态和行为流转换及修改的方式,可以简化、优化并且提高应用程序的可维护性。行为型模式主要有Interpreter(解释器)、TemplateMethod(模板方法)、ChainofResponsibility(职责链)、Command(命令)、Iterator(迭代器)、Mediator(中介者)、Memento(备忘录)、Observer(观察者)、State(状态)、Strategy(策略)和Visitor(访问者)等。 试题四 阅读以下关于UML软件系统建模的叙述,根据要求回答问题。 说明 车载GPS(GlobalPositionSystem)终端是置于机动车内的实时定位装置,它的应用对象是需要定位和调度的车辆。车辆可以通过终端与GPS进行实时、准确的定位,并能够通过无线通信网络上报远程的车辆调度中心。中心可以通过终端远程监视车行轨迹,并可在特殊情况下通过终端控制车辆。同时,终端还装备车载电话,可以在出现特殊情况时及时地通知车辆调度中心。图210所示为车载终端系统的用例图,对于车载GPS终端系统来说,主要的角色有两个,分别为车辆调度中心用户和车载终端用户。图211所示为车载终端系统中的GSM无线电通信模块的部分状态图,用于与调度中心进行联系。GSM模块共有4个状态,分别为通话中、有问题、待命和短消息通信中。 10、问题1 请将以下给出的转换关系填入图1-24所示的适当位置,从而将GSM无线电通信模块状态图补充完整。转换关系:用户需要语言通话;通话完成;重新连接网络;未找到网络或网络出错。 11、问题2 车载终端用户在遇到特殊情况下通过车载电话(或按键)与调度中心保持通信的处理过程顺序图如图2-12所示。 结合你的系统架构经验,以及对GPS终端系统的理解,请将下列AF标记的处理过程填入到图2-12中的(1)(6)空缺处,并给出通过车载电话(或按键)与调度中心保持通信的正确处理顺序(请用AF表达,例如ABCDEF.。 A语音对话/按下按钮 B监听命令 C发送信息到通信模块 D要求监听 E通过GSM发送信息 F接收成功要求监听信息 12、问题3 建立顶层架构是基于UML对该车载GPS终端系统进行建模的步骤之一。顶层架构的主要目的是为后续的分析和设计活动建立一种结构和分划,以便开发人员在不同阶段,以及同一开发阶段的不同开发人员,能够聚集于系统的不同部分。结合你的系统架构经验,请简要说明在该车载GPS终端系统确立顶层架构的过程中需要综合考虑哪些因素? 参考答案 10、统一建模语言(UML)是面向对象的建模语言,强调两个重要的概念:鼓励将设计描述为许多交互的对象,而不是一些大的单块代码;至少一些对象对应系统中部分实际的软件或硬件,可以将UML模型化成系统交互的外部世界,在这种情况下,对象可能与人或其他机器对应。 在图211所示的车载终端系统中的GSM无线电通信模块状态图中,GSM模块共有4个状态,分别为通话中、有问题、待命和短消息通信中。当GSM模块在通话、待命和短消息通信状态中出现问题时,会转入错误处理即进入有问题状态。当用户需要语音通话时,转入通话状态,通话完毕后,通信模块重新回到待命状态。当模块无法处理问题时,可以试图连接网络,上报车辆调度中心,此时模块处于空闲待命状态。完整的GSM无线电通信模块状态图如图2-14所示。 11、图2-11为车载终端用户通过车载电话(或按键)与调度中心保持通信的处理过程顺序图。其表达的处理过程如下:用户通过按下按钮或语音对话试图连接调度中心,主控器模块接收到连接请求后(或连接建立后),就发送相应的信息给通信模块;通信模块负责处理并通过GSM发送消息,调度中心接收消息成功后要求监听信息,并把该要求返回给车载系统的GSM通信模块;GSM通信模块把该请求信息(即调度中心的要求监听信息)递交给主模块,主模块把监听命令递交给GSM通信模块,然后可由GSM通信模块递交给调度中心。 12、在初步的业务需求描述已经形成的前提下,基于UML的需求分析大致可分为以下几个步骤。 利用用例及用例图表示需求。从业务需求描述出发获取执行者和场景;对场景进行汇总、分类和抽象;形成用例;确定执行者与用例,用例与用例图之间的关系,生成用例图。 利用包图及类图表示目标软件系统的总体框架结构。根据领域知识、业务需求描述和既往经验设计目标软件系统的顶层架构;从业务需求描述中提取“关键概念”,形成领域概念模型;从概念模型和用例出发,研究系统中主要的类之间的关系,生成类图。 上述两个步骤并没有时序关系,它们可以并行展开。其中,顶层架构的主要目的是为后续的分析和设计活动建立一种结构和分划,以便开发人员在不同的开发阶段,以及同一开发阶段的不同开发人员,能够聚焦于系统的不同部分。顶层架构是分析和设计的阶段成果的承载体。随着开发过程的推进,框架中的内容不断丰富和翔实,最终演进为完整的面向对象的软件结构。UML包图是表示项层架构的适当机制。建立软件系统顶层架构的基本方法是,结合实际需求,从既往的架构设计经验模型中选取适当者,再进行微调或局部改造。目前有以下几种主要的架构模式。 (1)流程处理模式。流程处理系统以算法和数据结构为中心,其系统功能由一系列的处理步骤构成,相邻的处理步骤之间以数据流通管道相互连接。该模式仅适合于采用批处理方式的软件系统,不适合于交互式系统。 (2)客户/服务器模式。客户端负责用户输入和处理结果的呈现,服务器端则负责后台的业务逻辑处理。 (3)模型视图控制器(MVC)模式。该模式将整个软件系统划分为模型、视图和控制器3个部分。模型负责维护并保存具有持久性的业务数据,实现业务处理功能,并将业务数据的变化情况及时通知视图;视图负责呈现模型的业务数据,响应模型变化通知,更新呈现形式,并向控制器传递用户的界面动作;控制器负责将用户的界面动作映射为模型中业务处理功能并实际调用之,然后根据模型返回的业务处理结果选择新的视图。MVC模式特别适合于分布式应用软件,尤其是Web应用系统。 (4)分层模式。该模式将整个软件系统分为若干层次,最顶层直接面向用户提供软件系统的操作界面,其余各层为紧邻其上的层次提供服务。层次划时分的主要原则是,较易变化的软件部分(例如用户界面和与业务逻辑紧密相关的部件)置于较高层次,较稳定的软件部分(例如公共的技术服务部件)则位于较低层次;每一层次尽量只访问其紧邻下层提供的服务,避免越级访问,尤其要避免逆向访问(上层模块为下层模块提供服务);在许多情况下,可以将目标软件系统的外部接口置入较低层次,目标软件系统其余部分对外部系统的访问或操作均通过这些外部接口所提供的公共服务来完成。分层模式可以有效地降低软件系统的耦合度,因此其应用十分普遍。在全面了解软件架构样式的前提下,对于具体的应用需求而言,影响顶层架构选取的主要因素在于系统架构师的经验及他们对每种架构样式与当前软件项目之间匹配程度的判断。事实上,大型软件的顶层架构往往需要复合使用多种架构样式。例如,整个目标软件系统采用分层结构,在系统的不同层次内再分别使用适宜的其他种类的架构模式。在确立顶层架构的过程中,需要综合考虑以下因素。 (1)架构中包的数量。原则上,如果每个包中包含的软件元素(例如类)的数量过多,应考虑将其进一步细分;如果过少,则说明架构过早地陷入了细节,架构划分返工的可能性较大,同时也不合理地限制了后续分析和设计活动的自由空间。 (2)架构中包之间的耦合度。包之间的依赖关系和连接关系应尽量简单、稀疏,例如,在分层结构中,通常要求某一层中的软件元素只与同层及相邻下一层的元素之间存在依赖关系。 (3)软件元素的稳定性。要尽量抽取不稳定的软件元素之中相对稳定的部分,将不稳定的软件元素分类聚集于少数几个包中,以提高软件系统的可维护性。 (4)软件元素的必然性。可以将可选功能和必须实现的功能分置于架构中不同的包或子包之中。 (5)作为软件系统运行环境的物理网络拓扑。根据软件元素在分布环境的部署情况,区分顶层架构中的包,可以使包之间的消息传递与物理节点之间的通信相吻合,使后续的分析和设计活动受益于顶层架构中明确定义的通信关系。 (6)软件元素的安全和保密级别。根据安全访问的权限划分顶层架构中的包或者子包。 (7)开发团队的技术专长。根据开发人员在问题领域和软件技术领域不同的专长划分顶层架构中的包,使每个包都能分配给最适合的开发人员进行后续的分析、设计、编码和测试等,从而有利于并行开发。 如需了解更多系统架构设计师资讯,请看希赛软考学院!
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!