软件设计与体系结构练习题 下载本文

内容发布更新时间 : 2024/4/19 18:18:57星期一 下面是文章的全部内容请认真阅读。

软件设计与体系结构复习

一、 填空题

(一) Chapter 1

1.软件设计模式通常包含4个基本要素:模式名称、问题、解决方案以及效果。 2.软件设计模式可以分为三个层次:架构模式、设计模式、习惯用法。 3.软件设计模式是对软件设计经验的总结,是对软件设计中特定环境下反复出现的设计问题的、经过验证的、成功解决方案的描述。

(二) chapter 5

1.早在1968年,计算机领域的大师Dijstra指出:项目规模越大,其整体架构就越重要。 2. 软件体系结构的三个基本要素是:构件、连接件、约束 3. 对软件质量的关注正是软件架构师与一般的软件设计师的不同之处,一般的软件设计师主要关注软件功能的设计,并要遵循架构师给出的设计准则。

4. IEEE 1471-2000标准定义软件体系结构是“系统的基本组织结构,包括系统构成要素、这些构成要素相互之间以及运行环境之间的关系,还包括系统设计及演化时应遵循的原则”。

(三) chapter 2

1.创建型软件设计模式是解决_对象创建机制_的设计模式。 2.创建型软件设计模式的两个主导思想:封装了系统使用的具体类的知识,隐藏这些具体类的实例被创建与结合的细节。

3.简单工厂方法模式的特点是仅仅有一个具体的创建者类,并且在此类中包含一个__静态工厂_____方法。

4.生成器模式是一步一步创建一个复杂的对象,允许用户通过制定复杂对象的类型和内容就可以构建它们,用户不知道内部的具体构建细节

5. 单例模式是指确保一个仅有一个唯一的实例,并提供一个全局的访问点。

6. 在单例模式中,为了防止客户程序利用构造方法创建多个对象,要将构造方法声明为private(或私有)类型。

(四) chapter 3

1. 结构型软件设计模式的主要目的是将不同的类和对象组合在一起,形成更大或者更复杂的结构体。

2. 组合模式指将对象组合成树形结构,以表示“部分-整体”的层次结构。该模式使得对单个对象和组合对象的使用具有一致性。

3.适配器模式可以分为两种:类适配器和对象适配器 4. 类适配器模式通过继承的方式改变已经存在的接口而形成新的接口,使之适合客户类调用的需要;对象适配器模式使用调用或者聚合的方式选择调用多个类中的方法,形成新的接口。 5. 适配器模式与外观模式都是为了设计新的接口而存在。它们的区别在于:适配器模式是转换接口,外观模式是简化接口。

(五) chapter 4

1. 行为型软件设计模式解释对象之间是怎样进行交互的。

2. 迭代器模式能够提供一种方法按照顺序访问一个聚合对象中的所有元素,而又不需要暴露该对象的内部表示。

3. 中介者模式的要点是将所有对象之间的交互细节抽象到一个独立的类中,这个类叫做中介者类。

4. 访问者模式封装了分布于多个类之间的行为。

(六) Chapter 6

1. 利用调用-返回风格软件体系结构设计的软件系统使用的是_分而治之_策略,其主要思想是将一个复杂的大系统分解为一些子系统,以便降低复杂度,并且增加可修改性。

2. 在管道-过滤器软件体系结构中,每个组件都有一组输入和输出,组件读入数据流,经过数据处理,然后产生输出数据流。

3. 顺序批处理软件体系结构是数据流风格体系结构的一个子类型。在该系统种,组件为独立的程序,并且这些组件按照先后顺序处理,即只有当一个组件运行彻底结束以后,下一个组件才能开始执行。

4. 主程序-子程序软件体系结构特别关注功能的实现。面向对象软件体系结构特别关注数据与功能的封装。

二、 简答题

(一) Chapter1

1. 软件体系结构为什么重要?

答:软件体系结构: ①是软件相关人员进行交流的手段;(2分) ②是一种高层次的设计复用手段;(2分) ③是早期关键设计决策的体现。(1分) 2. 软件体系结构与软件框架的区别? 答:

①呈现形式不同:体系结构的呈现形式是一个设计规约,而框架则是程序代码 。(2分) ②目的不同:体系结构的首要目的大多是指导一个软件系统的实施与开发;而框架的首要目的是为复用.因此,一个框架可有其体系结构,用于指导该框架的开发,反之不然.(3分) 3. 解释开闭原则、Liskov替换原则、依赖倒置原则

答:①开闭原则:构件应该对扩展具有开放性,对修改具有封闭性。(2分) ②Liskov替换原则:子类可以替换它们的父类。(2分)

③依赖倒置原则:依赖于抽象,而非具体实现。(1分)

(二) chapter2

4. 说明工厂方法、简单工厂模式、抽象工厂模式三个模式的主要区别。

答:①简单工厂模式只有一个工厂类,该工厂类的静态工厂方法负责所有产品的创建。(1分)②工厂方法模式中,一个产品类层次对应一个工厂类层次,每个具体工厂负责创建一个具体的产品。(2分)③抽象工厂模式中,一个工厂类层次对应多个产品类层次,每个具体工厂负责一个产品簇中产品的创建。(2分)

5. 实现单例模式的三个关键要点是什么?

答:①将构造方法私有化;(1分)②定义一个静态实例;(2分)③提供一个可以返回静态实例的静态方法。(2分)

6. 简述生成器模式与抽象工厂模式的区别。

答:①前者按照步骤创建一个复杂的对象,而后者强调一类产品对象,创建一个产品族中的某个产品对象(简单或复杂)。(3分)

②前者将所建造的产品(通常建造一个复合体)最后一次性返回,而不是一点一点返回,而抽象工厂所创建的产品对象立即被返回。(2分)

(三) Chapter3

7. 简述外观模式与适配器模式的区别?

答:①外观模式简化接口是为了更好地使用某个类库

②适配器模式转换接口的目的是将一个不适合使用的接口转换为可以被使用的接口,或者将一些接口不同但功能相同或相近的接口加以转换,以便统一使用。 8. 简述结构型模式的分类。

答:分为两类:

①结构型类模式:关心类的组合,使用继承来组合接口或类,提供了类之间的关联方式。(2分)

②结构型对象模式:关心类和对象的组合,描述了如何对一些对象进行组合,从而实现新功能的一些方法。具体来说,通过关联关系,可以在一个类中定义另一个类的对象,然后通过该对象调用其方法。(3分)

(四) Chapter 4

9. 简述迭代器模式的主要功能? 答:提供对聚合对象的迭代访问:

①以不同的方式遍历聚合对象,如向前、向后 ②对同一聚合同时进行多个遍历 ③以不同的遍历策略遍历聚合

④多态迭代:为不同的聚合结构提供统一的迭代接口,即,通过一个迭代接口访问不同的聚合结构。

10. 简述访问者模式中形成的回调访问通路?

答:visit()与accept()方法构成一个调用通路。(1分)

①visit(X):访问者类告知具体元素X类,我要访问你,即调用它的方法。(2分)

②accept(Visitor):具体元素X类告知Visitor,我接受你的访问。Visitor访问具体元素X类的目的是什么,具体元素X类不管。(2分) 11. 策略模式和状态模式的区别。

答:①策略模式用来处理一组具有相同目的但是实现方法不同的算法,这些算法方案之间一般来说没有状态变迁。(2分)

②状态模式则有所不同,它实现的一个概念可以叫做动态继承,也就是继承的子类都可以发生变化。状态的变化可以由一个状态迁移图表示。(2分)

③一般来说,实现状态模式更复杂一点,用户需要仔细考虑由谁来负责状态转换问题,是由Context类负责还是由状态类的超类负责,还是由状态类的子类负责。(2分)

(五) Chapter 6

12. 简述面向对象体系结构,并画出面向对象体系结构图?

答:面向对象体系结构中,把系统看作是由一些对象的集合组成(而不是由函数或方法组成),消息从一个对象发送到另外一个对象。每个对象都有其相关功能。一个对象是数据以对数据操作的封装体,外界通过接口与其进行交互。(3分)面向对象体系结构图如下:(2分,下面这幅图不需要一模一样,表达清楚意思即可)

13. 简述主程序-子程序软件体系结构与面向对象体系结构的不同之处。

答:①在设计思想上的区别:主程序-子程序关注功能的实现,即系统是由一个个过程构成。面向对象体系结构关注数据与功能的封装(对象)。系统是由一系列对象构成,这些对象按一定规则通信,完成具体功能。(3分)

②在系统分析设计方面的区别。前者采用结构化分析设计方法(如数据流图、面向数据流的设计),后者采用面向对象分析设计,使用用例图、类图、时序图等模型。(2分) 14. 画出MVC体系结构的一般形式的结构类图。

15. 画出应用了观察者机制的MVC体系结构设计类图。

三、 设计题

(一) chapter 2创建型设计模式

1. 一个房屋销售查询系统,以便查询不同类型的房屋的介绍、价格和地址等。为简单起见,只

考虑两种类型的房屋:别墅(House)和公寓(Condo),并假设每种房屋类型都包含:豪华(Super)、中等(Medium)两个等级。要求能够查看房屋信息和房屋价格,请使用创建型设计模式解决该问题,画出设计类图。

答:参考错误!未找到引用源。

图 1 抽象工厂模式参考图

2. 假设有一个web托管公司,该公司在Windows和UNIX平台上托管服务。该Web托管公司

在这两种平台上提供三种不同类型的托管包:基本(Basic)、高级(Senior)和更高级(Super)。使用“抽象工厂”模式设计一个应用,查询该托管公司提供的不同类型的托管包功能,画出设计类图。

答:参考错误!未找到引用源。

图 2 抽象工厂模式解决win、Unix服务创建问题

3. 生成器模式可以用于描述肯德基KFC如何创建套餐:套餐是一个复杂对象,它一般包含主食

(如汉堡、牛肉饭等)、配餐(如新奥尔良烤翅、香辣鸡翅、吮指原味鸡等)和饮料(如果汁、可乐等)等三个组成部分,不同的套餐有不同的组成部分,而KFC的服务员可以根据顾客的要求,一步一步装配这些组成部分,构造一份完整的套餐,然后返回给顾客。套餐假设目前有如下几个套餐:午餐套餐(Lunch Suit)、晚餐套餐(Supper Suit)、豪华套餐(Luxury Suit)。请用生成器模式设计该应用,画出其设计类图。 答:参见错误!未找到引用源。

图 3 生成器模式——KFC套餐构造

4. 下图所示设计类图是关于游戏软件的设计。在该设计中,SlowGameFactory类负责创建

SlowFighter对象与SlowMonster对象,并且将创建完的对象以其超类类型返回给ClientGUI对象。然后,ClientGUI对象将操纵SlowFighter对象与SlowMonster对象,使得它们互相打斗。

(1) 上述设计使用了什么设计模式?

抽象工厂

(2) 请在以上设计中添加SuperFighter和SuperMonster,SuperFighter与SuperMonster是对应的,请绘制新的设计类图。 修正一下该答案 5. 某公司要设计一个房屋选购系统,系统内的房屋分为三种类型:经济型(Economic

House)、普通型(Normal House)与豪华型(Luxury House)。不同房型的区别体现在面积大小(Area)以及卧室(Bedroom)、卫生间(Bathroom)、车库(Garage)、花园(Garden)、游泳池(Swimming Pool)的数量上。请用生成器模式设计该选购系统,画出设计类图。

(二) chapter 3 结构型设计模式

6. 使用组合模式设计一款使用不同国家的语言做为问候语的软件,需要一个用于用户输入的用

户图形界面。在该用户图形界面上,有各个主要国家的列表。用户可以选择一个国家,然后,单击产生问候语的按钮,程序将显示该国家见面时所使用的问候语。①使用安全形式设计,画出设计类图。②使用透明形式设计,画出设计类图。

答:①参见错误!未找到引用源。 ②参见错误!未找到引用源。

图 4 组合模式设计-安全形式 图 5 组合模式设计-透明模式

7. 下图所示为一个整数排序的Java程序设计类图。该设计使用类适配器模式。 问题:

(1) 请说明使用该设计有什么问题?

Java是单继承语言,不支持多继承

(2) 画出新的设计类图。

答:参见错误!未找到引用源。

图 6 对象适配器解决多继承问题

8. 考察一个电源总开关的例子。为了使用方便,一个电源总开关可以控制四盏灯、一个风扇、一台空调和一台电视机的启动和关闭。通过该电源总开关可以同时控制上述所有电器设备。请使用外观模式设计该系统,画出设计类图。

答:参见错误!未找到引用源。

图 7 电源开关的例子

9. 美国和加拿大的邮政编码有不同的格式,美国的邮政编码由5位阿拉伯数字组成加破折号,再加4位阿拉伯数字组成,即美国的邮政编码形状为ddddd-dddd,其中d是介于0与9之间的整数。加拿大的邮政编码是由6位字母与数字混合组成,格式为:cdc dcd,其中第1,3,5位是英语字母,第2,4,6位是阿拉伯数字,如:M4B 1G5。假设有一个网上贸易软件,原来的客户是美国公民,但是,随着业务的扩展,将要允许加拿大公民使用该系统。假如已经有两个经过充分测试的类,一个是USZipCode,另外一个是CAPostalCode。这两个类中分别有一个方法,isValidZipCode(zip:String), 和isValidCaPostalCode(pcode: String),用于确认用户输入的邮政编码是否正确。虽然这两个接口(方法)的参数都是String类型的,但是方法名字是不同的,而且,它们的具体的确认算法是不同的。现在要写一个网上邮政编码确认程序,该程序使用一个统一的接口,允许客户程序使用该接口的时候,既可以使用美国的邮政编码又可以使用加拿大的邮政编码。请使用适配器模式进行设计,画出设计类图。 10. 假如公司需要设计一个特工信息系统。特工的信息被加密并且被存入文本文档或者数据库。

有三种方法加密特工的名字和代码,该加密名字和代码的任务由三个类完成,这三个类是