[计算机类试卷]软件水平考试中级软件设计师下午应用技术(面向对象程序设计)模拟试卷1及答案与解析.doc
《[计算机类试卷]软件水平考试中级软件设计师下午应用技术(面向对象程序设计)模拟试卷1及答案与解析.doc》由会员分享,可在线阅读,更多相关《[计算机类试卷]软件水平考试中级软件设计师下午应用技术(面向对象程序设计)模拟试卷1及答案与解析.doc(10页珍藏版)》请在麦多课文档分享上搜索。
1、软件水平考试中级软件设计师下午应用技术(面向对象程序设计)模拟试卷 1及答案与解析 一、选答题(共 3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效。 1 现欲实现一个图像浏览系统,要求该系统能够显示 BMP、 JPEG和 GIF三种格式的文件,并且能够在 Windows和 Linux两种操作系统上运行。系统首先将BMP、 JPEG和 GIF三种格式的文件解析为像素矩阵,然后将像素矩阵显示在屏幕上。系统需具有较好的扩展性以支持新的文件格式和操作系统。为满足上 述需求并减少所需生成的子类数目,采用桥接 (Bridge)设计模
2、式进行设计所得类图如图16 1所示。 采用该设计模式的原因在于:系统解析 BMP、 GIF与 IPEG文件的代码仅与文件格式相关,而在屏幕上显示像素矩阵的代码则仅与操作系统相关。【 C+代码】 class Matrix 各种格式的文件最终都被转化为像素矩阵 ;此处代码省略 ; class ImageImp public: virtUal void doPaint(Matrix m): 0; 显示像素矩阵 m ; class WinImp: public ImageImp public: void doPaint(Matrix m) *调用 Windows系统的绘制函数绘制像素矩阵 * ; cl
3、ass LinuxImp:public ImageImp public: void doPaint(Matrix m) *调用 Linux系统的绘制函数绘制像素矩阵 * ; class Image public: void setImp(ImageImp*imp) (1) =imp; ) virtual void parseFi le(string fileName)=0; protected: (2) *imp; ; class BMP:public Image public: void parseFile(string fileName) 此处解析 BMP文件并获得一个像素矩阵对象 m (
4、3);显示像素矩阵 m ; class GIF : public Image 此处代码省略 ; class JPEG : public Image 此处代码省略 ; void main( ) 在 windows操作系统上 查看 demo bmp图像文件 Image*imagel= (4); ImageImp*imageImpl= (5); (6); imagel一 parseFile(“demo bmp” ); 现假设该系统需要支持 10种格式的图像文件和 5种操作系统,不考虑类 Matrix,若采用桥接设计模式则至少需要设计 (7)个类。 2 某大型商场内安装了多个简易的纸巾售卖机,自动出售
5、 2元钱一包的纸巾,且每次仅售出一包纸巾。纸巾售卖机的状态图如图 16-2所示。 采用状态 (State)模式来实现该纸巾售卖机,得到如图 16-3所示的类图。其中类 State为抽象类,定义了投币、退币、出纸巾等方法接口。类 SoldState、 SoldOutState、 NoQuarterState和HasQuarterState分别对应图 16-2中纸巾售卖机的 4种状态:售出纸巾、纸巾售完、没有投币、有 2元钱。 【 C+代码】 #includeusing namespace std;以下为类的定义部分 class TissueMachine; 类的提前引用 Class State
6、fpublic: virtual void insertQuarter()=0;投币 virtual void ejectQuarter()=0;退币 virtual void turnCrank()=0; 按 “出纸巾 ”按钮 virtual void dispense()=0; 出纸巾 ; *类 SoidOutState、 NoQuarterState、 HasQuarterState、 SoldState的定义省略,每个类中均定义了私有数据成员 TissueMachine*tissueMachine; * clasS TiSsueMachine private: (1) *soldOut
7、State, *noQuarterState, *hasQuarterState,*soldState, *state; int count; 纸巾数 public: TiSSueMachine(int numbers); void SetState(State*state); State* qetHasQuarterState(); State* qetNoQuarterState(); State*getSoldState(); State*getSoldOutState(); int getCount(); 其余代码省略 ; 以下为类的实现部分 void NoQuarterState :
8、 insertQuarter() tissueMachine一 setState( (2) ); void HasQuarterState: ej ectQuarter() tissueMachine一 setState( (3) ); void SoldState:dispense() if(tissueMachine一 getCount() 0) tissueMachine一 setState( (4) ); else tissueMachine一 setState( (5) ); 其余代码省略 3 某咖啡店当卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费
9、用。咖啡店所供应的咖啡及配料的种类和价格如表 16-1所示。 现采用装饰器 (Decorator)模式来实现计算费用的功能,得到如图 16-4所示的类图。 【 C+代码】 #include#includeUS ing namespace std; const int ESPRESSO PRICE=2 5; const int DRAKROAST PRICE=20; const int MOCHA PRICE=10; const int WHIP PRICE=8; class Beverage 饮料 (1) : string description; public;(2) ()f return
10、description; ) (3); ; class condimentDecorator :public Beverage 配料 protected: (4); ; class Espresso: public Beverage 蒸馏咖啡 public: Espresso ( ) description=“Espresso”; int cost()return ESPRESSOPRICE; ; class DarkRoast: public Beverage 深度烘焙咖啡public: DarkRoast( ) description=“DardRoast”; ) int cost()re
11、turn DRAKROASTPRICE; ; class Mocha : public condimentDecorator 摩卡 public:Mocha(Beverage*beverage) this一 beverage=beVerage; string getDescription()return beverage一 getDescription()+”, Mocha”; int cost( ) return MOCHA PR工 CE+beVerage一 COSt(); ; class Whip : public condimentDecorator 奶泡 public: Whip(Be
12、verage*beVerage)this一 beVerage=beVerage; string getDescription() return beverage一 getDescription( )+“, Whip”; int cost() return WHI P PRICE+beVerage一 cost( ); ) ; int meln() Beverage*beverage=new DarkRoast(); beverage=new Mocha( (5) ); beverage=new Whip(6); coutgetDescription ()cost() endl; return 0
13、; 编译运行上述程序,其输出结果为: DarkRoast, Mocha, Whip Y38 4 己知某类库开发商提供了一套类库,类库中定义了 Application类和 Document类,它们之间的关系如图 165所示。其中, Application类表示应用程序自身,而Document类则表示应用程序打开的文档。 Application类负责打开一个已有的以外部形式存储的文档, 如一个文件,一旦从该文件中读出信息后,它就由一个Document对象表示了。 当开发一个具体的应用程序时,开发者需要分别创建自己的 Application和 Document子类。例如,图 16-5中的类 MyAp
14、plication和类MyDocument,并分别实现 Application和 Document类中的某些方法。已知Application类中的 openDocument方法采用了模板方法 (Template Method)设计模式,该方法定义了打开文档的每一个主要步骤如下: (1)首先检查文档是否能够被打开,若 不能打开,则给出出错信息并返回。 (2)创建文档对象。 (3)通过文档对象打开文档。 (4)通过文档对象读取文档信息。 (5)将文档对象加入到 Application的文档对象集合中。 Java代码 abstract class Documentpublic void save()
15、 *存储文档数据,此处代码省略 * public void open(String docName) *打开文档,此处代码省略 * public void close() *关闭文档,此处代码省略 * public abstract void read(String docName); ; abstract class Appplicationprivate Vectordocs; *文档对象集合 * publ ic boolean canOpenDocument( String docName ) *判断是否可以打开指定文档,返回真值时表示可以打开,返回假值表示不可打开,此处代码省略 * p
16、ublic void addDocument(Document aDocument) *将文档对象添加到文档对象集合中 * docs add(2); public abstract Document doCreateDocument(); *创建一个文档对象 * public void openDocument(String docName) *打开文档 * if(3)System out println(“文档无法打开 !”); return; (4)adoc= (5); (6); (7);( 8); ; 5 某大型商场内安装了多个简易的纸巾售卖机,自动出售 2元钱一包的纸巾,且每次仅售出一
17、包纸巾。纸巾售卖机的状态图如 图 16-6所示。 采用状态 (State)模式来实现该纸巾售卖机,得到如图 16-7所示的类图。其中,类 State为抽象类,定义了投币、退币、出纸巾等方法接口。类 SoldState、 SoldOutState、 NoQuarterState和HasQuarterState分别对应图 16-6中纸巾售卖机的 4种状态:售出纸巾、纸巾售完、没有投币、有 2元钱。 【 Java代码】 import j ava util *; interface State public void insertQuarter(); 投币 public void ejectQuart
18、er(); 退币 public void turnCrank(); 按下 “出纸巾 ”按钮 public void dispense(); 出纸巾 class TissueMachine (1) soldoutState, noQuarterstate, hasQuarterState, soldState,state; state=soldoutState; int count=0; 纸巾数 public TissueMachine(int numbers) *实现代码省略 * public State getHasQuarterState() return hasQuarterState;
19、 public State getNoQuarterState() return noQuarterState; public State getSoldState() return soldState; publ ic State getSoldOutState() return soldOutState; public int getCount() return count; 其余代码省略 class NoQuarterState implements State TiSsueMachine tiSsueMachine; public void insertQuarter() tissue
20、Machine setState(2); 构造方法以及其余代码省略 clasS HasQuarterState implements State TiSsueMachine tiSsueMachine; public void ej ectQuarter(); tissueMachine setState( (3) ); 构造方法以及其余代码省略 class SoldState implements State TissueMachine tiSsueMachine; public void dispense() if(tissueMachine getCount() 0) tissueMac
21、hine setState(4); else tissueMachine setState(5); 6 某咖啡店当卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格如表 16-2所示。 现采用装饰器 (Decorator)模式来实现计算费用的功能,得到如图 16-8所示的类图。 Java代码 import java util *: (1) class Beverage 饮料 String description=“Unknown Beverage”; public (2) () return description; )pu
22、blic (3) ; abstract clas s CondimentDecorator extends Beverage 配料 (4); ; class Espresso extends Beverage 蒸馏咖啡 private final int ESPRESSO PRICE=2 5;publ ic Espres s 0() description=”Espres so”; public int cost()return ESPRESSO PRICE; clas s DarkRoast extends Beverage 深度烘焙咖啡 private finalint DARKROAST
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 试卷 软件 水平 考试 中级 设计师 下午 应用技术 面向 对象 程序设计 模拟 答案 解析 DOC

链接地址:http://www.mydoc123.com/p-506738.html