《面向对象分析及设计复习题38537.pdf》由会员分享,可在线阅读,更多相关《面向对象分析及设计复习题38537.pdf(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-面向对象分析与设计习题 一、单项选择题 1.到 20 世纪末,面向对象软件工程已经逐渐开展成熟,特别是D的 形成和广泛使用,采用面向对象分析与编程的软件开发方法已成为软件开发的主流方法。A.Simula67 语言 B.Smalltalk 语言 C.Java 语言 D.统模语言(UML)的标准 2.面向对象的运动产生了多种面向对象的语言,其中C是一种混合性面向对象语言,既支持面向过程的程序设计方法,又支持面向对象的程序设计方法,有广泛应用的根底和丰富开发环境的支持,因而使面向对象的程序设计能得到很快普及。C.C+D.Java 3以下不属于面向对象技术的根本特征的是B。A.封装性 B.模块性 C
2、.多态性 D.继承性 4.面向对象程序设计将描述事物的数据与(C)封装在一起,作为一个相互依存、不可分割的整体来处理。A.信息 B.数据隐藏 C.对数据的操作 D.数据抽象 5.关于面向对象方法的优点,以下不正确的表达是C。A.与人类习惯的思维方法比拟一致 B.可重用性好 C.以数据操作为中心 D.可维护性好 6.D是从用户使用系统的角度描述系统功能的图形表达方法。A.类图 B.对象图 C.序列图 D.用例图 7.(C)是表达系统类及其相互联系的图示,它是面向对象设计的核心,建立状态图、协作图和其他图的根底。A对象图 B.组件图 C.类图 D.配置图 8.D描述了一组交互对象间的动态协作关系,
3、它表示完成*项行为的对象和这些对象之间传递消息的时间顺序。A对象图 B.协作图 C.状态图 D.序列图 9.D就是用于表示构成分布式系统的节点集和节点之间的联系的图示,它可以表示系统中软件和硬件的物理架构。A.组件图 B.协作图 C.状态图 D.配置图 10.使用 UML 进展关系数据库的B时,需要设计出表达持久数据的实体类及其联系,并把它们映射成为关系数据库表Table)、视图(View)等。A.业务 UseCase 模型设计 B.逻辑数据模型设计 C.物理数据模型设计 C.物理实现设计 11.一个设计得好的 OO 系统具有B A.低聚、低耦合的特征 B.高聚、低耦合的特征 C.高聚、高耦合
4、的特征 D.低聚、高耦合的特征 12.下面不是 UML 的根本构成元素。A A.控制语言 B.根本构造块 C.规则 D.公共机制 13.面向对象的特点主要概括为C。-A.可分解性、可组合性、可分类性 B.继承性、封装性、多态性 C.抽象性、继承性、封装性、多态性 D.封装性、易维护性、可扩展性、可重用性 14构成对象的两个主要因素是A。A.属性和效劳 B.标识和容 C.继承和多态 D.消息和封装 15.以下关于面向对象方法中描述中错误的选项是C。A.使用设计模式有助于在软件开发中应用面向对象技术 B.选择面向对象程序设计语言时需要考虑开发人员对其的熟悉程度 C.UML 作为一种可视化建模语言需
5、要与 RUP 开发过程同时使用 D.目前在软件生命周期的分析、设计、实现和测试中均可以应用面向对象方法 16.顺序图主要可以为设计人员提供A信息。A.消息发送的顺序 B.*个方法的执行流程 C.类之间关联关系的多重性 D.*个对象在不同状态之间的转移 17.类和接口的关系类似于下面哪种类型的关系D。A.关联association和聚集aggregation B.关联association和组合position C.脚本scenario和用例usecase D.包Package和子系统subsystem 18.在类图中,那个类图中的类 Order 所生成的代码具有 PublicclassOrde
6、r PublicCustomerrecipient;的形式?A A.B.C.D.19.下面那个图符表示 UML 中的实现关系?C A.B.C.D.20.一个银行业务系统采用如图琐事的配置图,则错误的选项是D A.与 GUI 有关的类应该部署在 BranchClient 上 B.这个图表示一个三层的体系构造,不管 BranchClient、FinancialAppServer、DatabaseServer 是运行在同一台机器上还是在不同机器上 C.为了系统的可伸缩性scalability,与业务逻辑有关的对象应该部署在FinancialAppServer 上-D.为了系统的可伸缩性,与业务逻辑有
7、关的对象应该部署在 BranchClient 上 21.关于用例与类的比照中D是错误的。A 都属于模型构造元素 B 都存在继承关系 C 类描述系统的局部静态视图,用例描述系统动态的行为视图 D 类描述的是系统的部构成,用例也可以描述系统的部构成 22.Innovation 公司正在为 Rose 开发插入件,使得 Rose 可以把 OOA、OOD 模型以各种图形格式导出,如 JPEG 格式、BMP 格式、GIF 格式等。在导出时,会根据不同的算法来生成相应的图形文件,这些算法很复杂。为了描述这些算法,在下面这些图中,那个是最适合的?A注:活动图可以用来描述细节 A.活动图 B.状态图 C.类图
8、D.用例图 23.计算机puter由中央处理器、存、软盘、硬盘、显示器、键盘、鼠标等组成。则 puter类和其他类CPU、RAM、FloppyDrive、HardDisk、Monitor、Keyboard、Mouse之间的关系是:D A.泛化关系Generalization B.实现关系Realization C.包含关系Inclusion D.聚集关系Aggregation 24.在状态图中不能表示下面那些概念?D A.动作action B.事件event C.转移transition D.类class 25.在数据库设计的阶段开场考虑具体的数据库管理系统DBMS的特性。C A.需求分析 B
9、.概念设计 C.逻辑设计.D 物理设计 26在 UML 中,有 3 种根本构造块,分别是A A.事物、关系和图 B.注释、关系和图 C.事物、关系和构造 D.注释、关系和构造 27在 UML 中,有四种关系,下面哪个不是B A.依赖关系 B.继承关系 C.泛化关系 D.实现关系 28下面哪个不是 UML 中的静态视图 A.状态图 B.用例图 C.对象图 D.类图 29在用例之间,会有三种不同的关系,以下哪个不是它们之间可能的关系 D A.包含 include B.扩展 e*tend C.泛化 generalization D.关联 connect 30用例Use-case用来描述系统在事件做出
10、响应时所采取的行动。用例之间是具有相关性的。在一个订单输入子系统中,创立新订单和更新订单都需要检查用户是否正确。则,用例创立新订单、更新订单与用例检查用户之间是B关系 A.扩展e*tend B.包含include C.分类classification D.聚集aggregation-31UML 中类的有三种,下面哪个不是其中之一B A.实体类 B.抽象类 C.控制类 D.边界类 32阅读图例,判断以下哪个说法是错误的。c A.读者可以使用系统的还书用例 B.每次执行还书用例都要执行图书查询用例 C.每次执行还书用例都要执行交纳罚金用例 D.执行还书用例有可能既执行图书查询用例,又执行交纳罚金用
11、例 33关于协作图的描述,以下哪个不正确B A.协作图作为一种交互图,强调的是参加交互的对象的组织;B.协作图是顺序图的一种特例 C.协作图中有消息流的顺序号;D.在 ROSE 工具中,协作图可在顺序图的根底上按F5”键自动生成;34.设计模式具有的优点a。A适应需求变化 B.程序易于理解 C减少开发过程中的代码开发工作量 D.简化软件系统的设计 35.设计模式一般用来解决什么样的问题(a)。A.同一问题的不同表相 B 不同问题的同一表相 C.不同问题的不同表相 D.以上都不是 36.设计模式的两大主题是(d)。A.系统的维护与开发 B 对象组合与类的继承 C.系统架构与系统开发 D.系统复用
12、与系统扩展 37.以下哪些问题通过应用设计模式不能够解决。c A指定对象的接口 B针对接口编程 C确定软件的功能都正确实现 D设计应支持变化 38.外观模式的作用是b。A当不能采用生成子类的方法进展扩大时,动态地给一个对象添加一些额外的功能。B为了系统中的一组功能调用提供一个一致的接口,这个接口使得这一子系统更加容易使用。C保证一个类仅有一个实例,并提供一个访问他的全局访问点。D在方法中定义算法的框架,而将算法中的一些操作步骤延迟到子类中实现。39.Faade外观模式的意图是a。A.希望简化现有系统的使用方法。你需要定义自己的借口。B将一个无法控制的现有对象与一个特定借口相匹配。C.将一组实现
13、局部从另一组使用它们的对象中别离出来。-D你需要为特定的客户或情况提供特定系列的对象。40.Adapter适配器模式的意图是B。A.希望简化现有系统的使用方法。你需要定义自己的借口。B将一个无法控制的现有对象与一个特定借口相匹配。C.将一组实现局部从另一组使用它们的对象中别离出来。D你需要为特定的客户或情况提供特定系列的对象。41.下面不属于创立型模式的有C。A抽象工厂模式 Abstract Factory B工厂方法模式Factory Method C适配器模式 Adapter D单例模式Singleton 42.将一个类的接口转换成客户希望的另一个接口。这句话是对以下哪种模式的描述C。A.
14、策略模式Strategies B桥接模式Bridge C适配器模式Adapter D单例模式Singleton 43.以下关于构造型模式说法不正确的选项是。B A构造型模式可以在不破坏类封装性的根底上,实现新的功能。B构造型模式主要用于创立一组对象。C构造型模式可以创立一组类的统一访问接口。D构造型模式可以在不破坏类封装性的根底上,使得类可以同不曾估计到的系统进展交互。44.关于继承表述错误的选项是:D。A.继承是一种通过扩展一个已有对象的实现,从而获得新功能的复用方法。B.泛化类超类可以显式地捕获那些公共的属性和方法。特殊类子类则通过附加 属性和方法来进展实现的扩展。C.在一定意义上说破坏了
15、封装性,因为这会将父类的实现细节暴露给子类。D.继承本质上是白盒复用,对父类的修改,不会影响到子类。45.在不破坏类封装性的根底上,使得类可以同不曾估计到的系统进展交互。主要表达在D 。A 外观模式Facade B 装饰模式(Decorator)C 策略模式Strategies D 桥接模式(Bridge)46.行为类模式使用B在类间分派行为。A 接口 B 继承机制 C 对象组合 D 委托 47.下面的类图表示的是哪个设计模式?D。A 抽象工厂模式Abstract Factory B 观察者模式(Observer)C 策略模式Strategies D 桥接模式(Bridge)48.Bridge
16、桥接模式的意图是C。A.希望简化现有系统的使用方法。你需要定义自己的借口。B将一个无法控制的现有对象与一个特定借口相匹配。C.将一组实现局部从另一组使用它们的对象中别离出来。D你需要为特定的客户或情况提供特定系列的对象。49.静态工厂的核心角色是A。-A.抽象产品 B.具体产品 C.静态工厂 D.消费者 50.以下属于创立型模式的是A。A 抽象工厂模式Abstract Factory B 装饰模式(Decorator)C 外观模式(Facade)D 桥接模式(Bridge)51.下面的类图表示的是哪个设计模式?A。A 抽象工厂模式 B 观察者模式 C 策略模式 D 桥接模式 52.Abstra
17、ct Factory抽象工厂模式的意图是D。A.希望简化现有系统的使用方法。你需要定义自己的借口。B将一个无法控制的现有对象与一个特定借口相匹配。C.将一组实现局部从另一组使用它们的对象中别离出来。D提供一个创立一系列相关或相互依赖对象的接口,而无需指定它们具体的类 53.在根据不同的机器选择设备驱动程序的案例中,以下表达不准确的是(D)。A.可以使用 switch 语句选择驱动程序.B.可以使用继承来实现选择驱动程序,但它可能会产生类组合爆炸问题.C.可以选择抽象工厂模式实现,且能防止组合爆炸问题.D.使用继承的解决方案要比 switch 语句有更多的优势.54.应用设计模式的一个优点是A。
18、A适应需求变化 B.程序易于理解 C减少开发过程中的代码开发工作量 D.简化软件系统的设计 55.当我们想创立一个具体的对象而又不希望指定具体的类时,可以使用A模式。A.创立型 B.构造型 C 行为型 D.以上都可以 56.在观察者模式中,表述错误的选项是C。A.观察者角色的更新是被动的。B.被观察者可以通知观察者进展更新 C.观察者可以改变被观察者的状态,再由被观察者通知所有观察者依据被观察者的状态 进展。D.以上表述全部错误。57.下面的类图表示的是哪个设计模式?D。A 策略模式Strategies B 装饰模式Decorator C 桥接模式Bridge D 观察者模式Observer
19、58.当我们想创立一个具体的对象而又不希望指定具体的类时,可以使用A模式。A.创立型 B.构造型 C 行为型 D.以上都可以 59.以下模式中,属于行为模式的是(B)。A.工厂模式 B 观察者 C 适配器 D 以上都是 60.Observer 模式不适用于D。A 当一个抽象模型存在两个方面,其中一个方面依赖于另一方面,将这二者封装在独立的 对象中以使它们可以各自独立的改变和复用。-B 当对一个对象的改变需要同时改变其他对象,而不知道具体有多少个对象有待改变时。C 当一个对象必须通知其它对象,而它又不能假定其它对象是谁,也就是说你不希望这些 对象是紧耦合的。D 一个对象构造包含很多类对象,它们有
20、不同的接口,而想对这些对象实施一些依赖于其具体类的操作。二、判断题 1.一个状态图最多只能由一个初态和一个终态。F 2.协作图中的消息必须要有消息顺序号。(T)3.两个参与者actor之间可以有包含include关系、扩展e*tend关系或泛化generalization关系,而包含关系和扩展关系是依赖dependency关系的版型。(F)4.参与者actor和用例usecase之间的关系是关联association关系。T 5.类 A 和类 B 之间的关系如图 1 所示,则称类 B 中的 getName()方法是对类 A 中的 getName()方法的重载overload。F 图 1getN
21、ame方法之间的关系 图 2 活动图 6.如图 2 所示,活动 Gesture 和 Streamaudio 可以并发进展。T 7.一个软件系统,如果只有源代码,缺乏其他相应的辅助文档,如缺乏顺序图和类图,则可以利用 Rose 进展逆向工程得到顺序图和类图,但得到的顺序图和类图会比拟简单。F 8.CMM 描述了五个级别的软件过程成熟度,即初始级、可重复级、已定义、已管理级、优化级。T 9.UML 由用例视图、物理视图、组件视图、进度视图和配置视图组成。F 10.在设计类图时,可以不用对类图中的每个关联进展命名,但如果需要命名的话,最好用一个动词给关联命名。T 11.适配器模式属于创立型模式。(F
22、)12.在设计模式中,效果只是指原因和结果。(T)13.设计模式使代码编制不能真正工程化。(F)14.设计模式的两大主题是系统复用与系统扩展。(T)15.Faade外观模式不仅可以为方法调用创立更简单的接口,还可以减少客户必须处理 的对象数量。(T)-16.外观模式,当不能采用生成子类的方法进展扩大时,动态地给一个对象添加一些额外的 功能。(F)17.Faade 模式为子系统中的一组接口提供的界面可能不一致。(F)18.Faade 外观模式只能为方法调用创立更简单的接口,不能减少客户必须处理的对象数量。F 19.对象适配器模式是合成聚合复用原则的典型应用。(T)20.Adapter 模式使原本
23、由于接口不兼容而不能一起工作的那些类可以一起工作。(T)21.Faade 模式和 Adapter 模式是一样类型的包装器。(F)22.Adapter 模式不是必须针对*个接口进展设计。(F)23.继承本质上是白盒复用,对父类的修改,不会影响到子类。(F)24.继承是一种通过扩展一个已有对象的实现,从而获得新功能的复用方法。(t)25.抽象工厂模式提供了一系列相关或相互依赖对象的接口且必须指定他们具体的类。F 26.Abstract Factory抽象工厂模式确保系统总能根据当前的情况获得适宜的对象。T 27.在 Abstract Factory 抽象工厂 模式中,客户对象不需要知道向谁请求需要
24、的对象如何使用这些对象。F 28.Decorator装饰模式的意图是为一个对象连接附加的职责。F 29.每个 Decorator 对象在被装饰的功能之前或之后执行自己的附加功能。T 30.Decorator装饰模式适用性是表示对象的局部-整体层次构造。F 三、填空题 1.面向对象开发方法一改正去传统的以_功能分析_为根底的_面向过程_的构造化分析与设计方法,它模拟人们理解和处理客观世界的方式来分析问题,把系统视为一系列_对象_的集合,其_面向对象的设计_又将分析的结果映射到*种面向对象实现工具的构造上,使映射过程有着比拟直接的对应关系,使分析者、设计者和编程者都可使用一样的_概念_,从而使面向
25、对象的软件开发能比拟自然地模拟客观世界的活动,使问题描述空间与_解空间_在构造上尽可能一致。因此,采用面向对象方法可以更有效地开发大型软件系统。面向对象方法的_封装_、_继承_、_多态_等机制不仅支持软件复用,而且使软件维护工作可靠有效,可实现软件系统的柔性制造,更好地克制_软件危机_。因此,它已成为成熟的广为采用的软件开发方法。2.对象是客观实体的抽象表示,是由_描述对象属性的数据_和_对这些数据进展的操作行为_两局部组成。而_类_是对具有一样属性和行为的一组对象的抽象描述。因此,它可作为一种用户自定义类型和创立对象的样板,而按照这种样板所创立的一个个具体对象就是类的_实例_。通过_继承_关
26、系又可形成一种类层次构造。3.UML 中用于描述系统的静态建模的视图称为静态视图,包括_用例图_、_类图_、_对象图_、_包图_和_构件图_。4.UML 从不同的视角为系统架构建模,可产生九种视图:_、_、_、_、_、_、_、_、_。5._是用来反映假设干个对象之间动态协作关系的一种交互图。它主要反映对象之间已发送消息的先后次序和对象之间的交互过程。_是用来描述实现*些效劳所涉及的对象及其相互之间的关系(包括消息通信)的动态视图。建模者可以选择-_来反映对象之间的协作关系;如果需要强调时间和序列,最好选择_;如果需要强调上下文相关,最好选择_。6.适配器模式,分为类的适配器和对象的适配器两种实
27、现。其中类的适配器采用的是继承 关系,而对象适配器采用的是组合聚合 关系。7.Adapter 模式有两种类型有:对象 Adapter 模式、类 Adapter 模式。8.UML 是一种用来创立程序模型的图像语言。9.Adapter 适配器 模式使原本接口不兼容而不能一起工作的类可以一起工作。10.适配器模式,分为类的适配器和对象的适配器两种实现。其中类的适配器采用的是 继承关系,而对象适配器采用的是组合聚类关系。11.在存在继承关系的情况下,方法向(超类方向)集中,而数据向子类方向集中。12.在进展设计以应对变化的过程中,应该遵循两条根本策略:找出变化并 封装变化点;优先使用对象组合,而不是类
28、继承。13.封装性好的代码更容易测试,因为它与其他代码没有耦合。14.抽象工厂模式提供了一系列相关或相互依赖对象的接口而无需指定他们具体的类。15.工厂模式分为简单工厂,工厂方法,(工厂方法)三种类型。四.简答题 1.简述面向对象软件开发方法的优点。2.简述面向对象技术的三大机制。答:1封装性(encapsulation)所谓封装就是把对象的属性和行为结合成一个独立的单位,使外界不能直接访问或修改这些数据和代码,外界只能通过对象提供的接口函数来改变或获取对象的属性数据,这就实现了消息隐蔽。2继承性 如果在一个已定义的类上,增加一些特殊属性或操作,可以形成一个新的类,这个类不仅继承了前一个类的全
29、部特征,而且具有新的特性,因此可看作前一个类的特例,是对前一个类的继承。前一个类称为父类,新产生的类叫做子类。通过继承关系可形成一种类层次构造,叫做继承构造。3多态性 在类层次构造的不同类中,可用一样的函数名实现功能不同的函数。3.简述 OOA 模型的层次构造。答:OOA 模型采用五层次构造,它们分别是:1对象-类层 划分待开发系统及其环境信息的根本构造单位,标出反映问题域的对象和类,并用符号进展规的描述,用信息提供者熟悉的术语为对象和类命名。2属性层 定义对象和*些构造中的数据单元,继承构造中所有类的公共属性可放于通用类中。标识对象类必需的属性并放在适宜的继承层次上,属性的特殊限制和实例连接
30、关系也应标识出来。3效劳层 表示对象的效劳或行为,即是要定义类上的操作。4构造层-标识现实世界中对象之间的关系。当一个对象是另一个对象的一局部时,用整体-局部关系表示;当一个类属于另一个类时,用类之间继承关系表示。5主题层 可将相关类或对象划分为一个主题。4.简述 OOD 模型的总体构造,并画图表示。OOD 体系构造的各个局部容:(1)问题论域局部,在 OOA 模型的根底上,细化分析结果,设计一组构成底层应用模型的类和对象。2 人机交互局部:设计用户界面模型,该用户界面模型中的类和对象提供实现人机交互操作的接口函数。用户界面设计包括菜单设计、窗口设计、输入/输出界面设计等等。3任务管理局部:建
31、立一些类,用以负责处理操作系统级的并发问题、中断、调度以及其它与特定平台有关的问题。4数据管理局部:提供数据管理系统中存储和检索对象的根本构造,包括对永久性数据的访问和管理。数据管理设计包括:数据存放设计:数据存放设计选择数据存放的方式文件存放、关系数据库表格存放或面向对象的数据库存放。设计相应的操作。为每个需要存储的对象和类增加用于存储管理的属性和操作,在类和对象的定义中加以描述。5.分析下面的类图,画出新的类图,将原图中的多对多关系转换为 1:M一对多关系。答案:6信用卡可能处于开放和关闭状态,其中开放状态可以直接进入关闭状态,而从关闭状态必须提供密码验证才能进入开放状态。开放状态又包括透
32、支和正常状态之间的变化,当剩余金额少于零、或者使用额度大于剩余金额、或者结算余额小于零时进入透支状态,反之则为正常状态。画出信用卡的状态图。6 分 7.请判断以下类图中的类关系是否适宜,并说明理由。1飞机有机翼、机身、驾驶舱 2商场里的电器。1 台电器可以是 1 台洗衣机,也可以不是;1 台电器可以是 1 台电视机,也可以不是;1 台电器可以是 1 台空调,也可以不是;3公司的员工很多,包括程序员、分析员、工程经理 1飞机有机翼、机身、驾驶舱 应改为组合-2 商场里的电器。1 台电器可以是 1 台洗衣机,也可以不是;1 台电器可以是 1 台电视机,也可以不是;1 台电器可以是 1 台空调,也可
33、以不是;应该为泛化 3公司的员工很多,包括程序员、分析员、工程经理 应改为泛化 8.假设你从垃圾堆里捡到这样一小纸片如以下图所示。根据现有信息尽可能判断:1小车类有哪几个操作?2指挥小车 UC类的执行任务操作要做哪些工作?采用伪代码描述 图时序图 参考答案:1小车类有哪几个操作?返回小车当前位置 转向和前进 2指挥小车 UC类的执行任务操作要做哪些工作?采用伪代码描述 移动任务:更新行走断表和目的地 移动任务:判断现有信息足以让小车行走 小车:放回小车当前位置 小车:验证小车尚未到达目的地 移动:根据但前位置及断表信息计算出速度、角度 小车:转向和前进 9.简述统模语言 UML 的优点。10.
34、简述面向对象技术的三大机制。11.简述面向对象分析的根本步骤。12.简述 OOD 模型的总体构造,并画图表示。13.应用 UML 进展系统分析和设计所需建立视图有那几种?14.简述开闭原则的根本思想。请举出一个使用了软件开闭原则的软件设计模式,其中何处表达了开闭原则。答:开闭原则:软件实体应当对扩展开放,而对修改关闭,开-闭原则要求软件系统能够在不需要修改原有类的根底上,通过增加类到达扩展功能的目的。Abstract factory 表达了这个原则,如果想增加一类新的 products,只需在 product 类体系中增加各个 products,然后在 factory 类体系构造中增加一个 c
35、oncrete factory 就可以了,而不需要对现有类做任何修改,The Open-closed principleocp在不改动过模块源代码的情况下扩展模块的行为。软件实体类模块 函数等应该是可以扩展的,但是不可以修改的。15.简述依赖例转原则的根本思想。请举出一个使用了软件依赖原则的软件设计模式,其中何处表达了依赖原则。答:依赖倒置原则的根本思想是:高层模块不应该依赖于低层模块,二者都应该依赖于抽象。抽象不应该依赖于细节,细节应该不依赖于抽象。Tomplate method 就表达了这个原则,它定义了一个操作中的算法骨架,而将一些步骤延-迟到子类中,template method 使得
36、子类不改变一个算法的构造,即可重定义该算法的*些特定步骤。16.什么是单一职责原则?请举出一个使用了单一职责原则的软件设计模式,其中何处表达了单一职责原则。答:根本思想:SRP 使得一个类或一个模块承当的责任尽可能的少,使尽可能少的因素或动机影响该类或该模块,即增大类或模块的聚性,减少其耦合度,SRP 是所有原则中最简单的之一,也是最难正确运用的之一。MAND 模式表达了 SRP 原则,大多数类都是一组方法和相应的一组变量的结合,而该模式只是封装了一个没有任何变量的函数,它对函数的关注超过了类,将一个请求封装为一个对象,从而可用不同的请求对客户进展参数化。17.软件复用可采用类的继承方式和类的
37、聚合方式,比拟两者的优缺点。答:聚合:一个对象拥有另一个对象或对另一个对象负责即一个对象包含另一个对象或是另一个对象的一局部 并且聚合对象和其所有具有一样的生命周期即所谓的同生共死关系。聚合复用优点:容器类仅能通过被包含对象的接口来对其进展访问。黑盒复用,因为被包含对象的部细节对外是不可见。包装性好。实现上的相互依赖性比拟小。每一个类只专注于一项任务。通过获取指定其他的具有一样类型的对象的使用,可以在运行期间动态地定义对象的组合。聚合的缺点:导致系统中的对象过多 为了能将多个不同的对象作为组合块来使用,必须仔细地对接口进展定义。类继承:是一种通过扩展一个已有对象的实现,从而获得新功能的复用方法
38、。继承的优点:容易进展新的实现,因为其大多数可继承而来 易于修改或扩展那些被复用的实现。继承的缺点:破坏了封装性,因为这会将父类的实现细节暴露给子类 白盒复用,因为父类的部细节对于子类而言通常是可见的 当父类的实现更改时,子类也不得不随之更改 从父类继承来的实现将不能在运行期间进展改变。18.画出工厂方法模式的构造图。什么情况下适合使用工厂方发模式?其中 product:为工厂模式所要创立的对象类型定义一个接口。Concrete product:实现 product 接口。Creator:声明工厂方法factory method返回值为 product 的一个对象。Concrete creat
39、or:覆写 factory Method(),返回值为 concrete product 的一个具体实例。在下面情况下你可以考虑使用工厂方法模式:1)当客户程序不需要知道要使用对象的创立过程。2)客户程序使用的对象存在变动的可能,或者根本就不知道使用哪一个具体的对象。19.画出合成模式posite的构造图。举例说明一个可以应用合成模式的软件设计实例,说明其中各角色的作用。实例:计算机和立体组合音响这样的设备经常被组装成一局部整体层次构造或者是容器层次构造,例如:底盘可以包含驱动装置和平面板,总线含有多个插件,机柜包括底盘、总线等。这样构造很自然的用posite 模式进展模拟。Equipment
40、 类为在局部整体层次构造中的所有设备定义一个接口。-Equipment 声明一些操作返回一个设备的属性,例如它的能是消耗和价格。子类为指定的设备实现了这些操作,Equipment 还声明了一个 Create Iterator 操作,该操作为访问它的零件返回一个 Iterator,这个操作的缺省实现返回一上NullIterator,它在空集上迭代。posite Equipment是包含其它设备的基类,它也是 Equipment 的子类。20.简述门面模式Facade和中介者模式Mediator的根本思想,两者的差异何在?答:门面模式facade又称外观模式。根本思想:为子系统中的一组接口提供一个
41、一致的界面,Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。中介者模式根本思想:Mediator Pattern 中文译为中介者模式、调停者模式。调停者模式的定义是:用一个调停对象来封装一系列的对象交互。调停者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。简单点来说,将原来两个直接引用或者依赖的对象拆开,在中间参加一个调停对象,使得两头的对象分别和 调停对象引用或者依赖。两者的差异:从目的上看,调停者模式与门面模式有些相似。但是门面模式是介于客户程序与子系统之间的,而调停者模式是介于子系统与子系统之间的。这也注定了它们有很大的区别:
42、门面模式是将原有的复杂逻辑提取到一个统一的接口,简化客户对逻辑的使用。它是被客户所感知的,而原有的复杂逻辑则被隐藏了起来。而调停者模式的参加并没有改变客户原有的使用习惯,它是隐藏在原有逻辑后面的,使得代码逻辑更加清晰可用。21.简述观察者模式的根本思想,如何实现当目标对象发生变化时多个观察者对象的同步更新?画出他们之间的协作图。1Observer观察者根本思想:对象间的一种一对多的依赖关系。当一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动更新。2协作:当 Concrete Subject 发生任何可能导到其参观者与其本身状态不一致的改变时,它将通知它的各个观察者。在得到一个具体的
43、目标改变通知后,Concrete Object 对象可向目标对象查询信息,Concrete Object 使用这个些信息以使它的状态与目标对象的状态一致。3协作图:22.举一适合使用 State 模式的例子。与不使用该模式相比,有哪些优点?举例:抽象状态类定义了一个抽象方法写程序 与不使用该模式相比优点:State 模式将特定的状态相关的行为封装在一个类中,由于所有状态相关的代码都存在于*个 concrete state 中,所以通过定义新的子类可以很容易的增加新的状态和转换。23.有哪些模式的使用可以使得类的复用性增强?说明你的理由。策略模式strategy 属于对象行为型模式,主要定义一系
44、列的算法,把这些算法一个个封装成拥有共同接口的单独的类,并使他们之间互换,客户端调用他们的时候互不影响。算法使用和算法别离,即将变化的具体算法封装起来,降低了代码的耦合度,算法提取起来,使算法得到重用。中介者模式mediator 用一个调停对象来封装一系列的对象交互。调停者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。即,将原来的两个直接引用或者依赖的对象拆开,在中间参加-一个调停对象,使得两头的对象分别和调停对象引用或者依赖。提高了原有系统的可读性,将原有系统的多对多转化为一对多,提高了代码的可复用性。适配器Adapter模式 是的原本由于接口不兼容而不能
45、再一起的那些类可以一起工作。如画图程序中,已实现绘制点,直线等功能。为了让客户程序在使用的时候不用关心不同定义,定义个抽象类规接口,当去实现绘图时,发现系统其它地方已有制图实现,但是系统已有的方法与抽象类中规定方法不一样,这时候用适配器模式可以解决这问题。适配器模式是为了面向接口编程中更好的复用。24.比拟 Adapter 和 Pro*y 模式使用上的异同之处。适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。代理模式有两个英文名字:Pro*y Pattern 和 Surrogate Patt
46、ern。代理模式:为其他对象提供一种代理以控制对这个对象的访问。说白了就是,在一些情况下客户不想或者不能直接引用一个对象,而代理对象可以在客户和目标对象之间起到中介作用,去掉客户不能看到的容和效劳或者增添客户需要的额外效劳。两者的主要区别在于代理模式应用的情况是不改变接口命名的,而且是对已有接口功能的一种控制;而适配器模式则强调接口转换。25.说明 Observer 模式的根本实现方式。如果不用该模式,要到达同样的效果,你会如何做?观察者模式在关于目标角色、观察者角色通信的具体实现中,有两个版本。一种情况便是目标角色在发生变化后,仅仅告诉观察者角色我变化了;观察者角色如果想要知道具体的变化细节
47、,则就要自己从目标角色的接口中得到。这种模式被很形象的称为:拉模式就是说变化的信息是观察者角色主动从目标角色中拉出来的。还有一种方法,那就是我目标角色效劳一条龙,通知你发生变化的同时,通过一个参数将变化的细节传递到观察者角色中去。这就是推模式管你要不要,先给你啦。这两种模式的使用,取决于系统设计时的需要。如果目标角色比拟复杂,并且观察者角色进展更新时必须得到一些具体变化的信息,则推模式比拟适宜。如果目标角色比拟简单,则拉模式就很适宜。如果不使用该模式,可采用策略模式,将不同的情况作为子类封装在一个类中,模拟 observer 模式中目标角色的不同状态,当外部状态发生变化时,可以选择不同的 st
48、rategy1、strategy2改变观察者角色,从而到达与观察者模式同样的效果。26.请列举一个使用装饰模式的例子。画出你的例子的类图构造。JUnit 中的装饰模式:在 JUnit 中,TestCase 是一个很重要的类,允许对其进展功能扩展。在 junit.e*tensions 包中,TestDecorator、RepeatedTest 便是对 TestCase 的装饰模式扩展。下面我们将它们和上面的角色对号入座。27.列举两个可以使我们在程序中不必使用 ifelse 构造的软件设计模式。使用软件设计模式是如何做到这一点的?策略模式strategy和状态模式state 策略模式是将不同算法
49、处理方法封装到 stategy 类中,状态模式是将不-同状态封装到 state 类中。二者都是通过,类中的子类,实现不同情况的调用,从而有效的替换充满在程序中的 if else 语句。28.你认为在 Linu*平台上直接运行 WIN32 程序有可能吗?如认为不可能请说明理由;如认为可能应如何实现这一目标?1 两个 OS 部实现有很大差异,甚至连路径的分隔符都不一样,一个 WIN32程序无论如何到了最后也要调用 Window api,而这些 api 在 linu*上根本没有实现2例如:就用户界面来说,有些 windows 的控件,在 Linu*上根本连对应的具有类似功能的控件都没有怎么执行?如果
50、再涉及进程,线程就更复杂了,差距也更大,如果想用一个 win32 程序在 linu*上执行,必须有一个间接层来缓和二者差距,然后要求 WIN32 程序只能调用这个间接层里面的库函数 29.Java 是一个跨平台的软件语言。为了实现跨平台,你认为采用哪种软件模式来实现跨平台局部更合理?说明你的理由。答:abstract factory 实现跨平台比拟适宜。用 abstract factory 提供一个高层接口,来建造每个所需的 Product,当然具体的实现要用 Concrete factory来实现,然后让每个 os 对应一个 Concrete factory,这样当其它的 Java 类库需要