1、2009年上半年软件水平考试(中级)软件设计师下午(应用技术)试题真题试卷及答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 阅读下列说明,回答问题 1和问题 2,将解答填入答题纸的对应栏内。【说明】假设某大型商业企业由商品配送中心和连锁超市组成,其中商品配送中心包括采购、财务、配送等部门。为实现高效管理,设计了商品配送中心信息管理系统,其主要功能描述如下: 1系统接收由连锁超市提出的供货请求,并将其记录到供货请求记录文件。 2在接到供货请求后,从商品库存记录文件中进行商品库存信息查询。如果库存满足 供货请求,则给配送处理发送配送通知;否则,向采购部门发出缺货通知。 3配送处理接到
2、配送通知后,查询供货请求记录文件,更新商品库存记录文件,并向配送部门发送配送单,在配送货品的同时记录配送信息至商品配送记录文件。 4采购部门接到缺货通知后,与供货商洽谈,进行商品采购处理,合格商品入库,并记录采购清单至采购清单记录文件、向配送处理发出配送通知,同时通知财务部门给供货商支付货款。该系统采用结构化方法进行开发,得到待修改的数据流图 (如图 51所示 )。1 使用【说明】中的词语,给出图 5一 l中外部实体 El至 E4的名称和数据存储D1至 D4的名称。 2 图 5 1中存在四处错误数据流,请指出各自的起点和终点;若将上述四条错误数据流删除,为保证数据流图的正确性,应补充三条数据流
3、,请给出所补充数据流的起点和终点。 (起点和终点请采用数据流图 51中的符号或名称 ) 3 阅读下列说明,回答问题 1至问题 3,将解答填入答题纸的对应栏内。【说明】某集团公司拥有多个大型连锁商场,公司需要构建一个数据库系统以方便管理其业务运作活动。【需求分析结果】 1.商场需要记录的信息包括商场编号 (编号唯一 ),商场名称,地址和联系电话。某商场信 息如表 51所示。 2每个商场包含有不同的部门,部门需要记录的信息包括部门编号 (集团公司分配 ),部门名称,位置分布和联系电话。某商场的部门信息如表 52所示。3每个部门雇用多名员工处理日常事务,每名员工只能隶属于一个部门 (新进员工在培训期
4、不隶属于任何部门 )。员工需要记录的信息包括员工编号 (集团公司分配 ),姓名,岗位,电话号码和工资。员工信息如表 53所示。4每个部门的员工中有一名是经理,每个经理只能管理一个部门,系统需要记录每个经理的任职时间。【概念模型设计】根据需求阶段收集的信息,设计的实体联 系图和关系模式 (不完整 )如下: 【关系模式设计】商场 (商场编号,商场名称,地址,联系电话 )部门 (部门编号,部门名称,位置分布,联系电话, (a) )员工 (员工编号,员工姓名,岗位,电话号码,工资,(b)经理 ( (c) ,任职时间 ) 3 根据问题描述,补充四个联系,完善图 52的实体联系图。联系名可用联系 l、联系
5、 2、联系 3和联系 4代替,联系的类型分为 l: 1、 l: n和 m: n。 4 根据实体联系图,将关系模式中的空 (a) (c)补充完整,并分别给出部门、员工和经理关系模式的主键和外键。 5 为了使商场有紧急事务时能联系到轮休的员工,要求每位员工必须且只能登记一位紧急联系人的姓名和联系电话,不同的员工可以登记相同的紧急联系人。则在图52中还需添加的实体是 (1) ,该实体和图 52中的员工存在 (2) 联系 (填写联系类型 )。给出该实体的关系模式。 6 阅读下列说明和图,回答问题 l至问题 3,将解答填入答题纸的对应栏内。【说明】某银行计划开发一个自动存提款机模拟系统 (ATM Sys
6、tem)。系统通过读卡器(: ardReader)读取 ATM卡;系统与客户 (Customer)的交互由客户控制台(CustomerConsole)实现;银行操作员 ()perator)可控制系统的启动 (System Startup)和停止 (SystemShutdown);系统通过网络和银行系统 (Bank)实现通信。当读卡器判断用户已将 ATM卡插入后,创建会话 (Session)。会话开始后,读卡器进行读卡,并要求客户输入个人验证码 (PIN)。系统将卡号和个人验证码信息送到银行系统进行验证。验证通过后,客户可从菜单选择如下事务 (Transaction): 1从 ATM卡账户取款
7、(withdraw); 2向 ATM卡账户存款 (Deposit); 3进行转账 (Transfer);4查询 (Inquire)ATM卡账户信息。一次会话可以包含多个事务,每个事务处理也会将卡号和个人验证码信息送到银行系统进行验证。若个人验证码错误,则转个人验证码错误处理 (Invalid PIN Process)。每个事务完成后,客户可选择继续上述事务或退卡。选择退卡时,系统弹出 ATM卡,会话结束。系统采用面向对象方法开发,使用 uML进行建模。系统的顶层用例图如图 53所示,一次会话的序列图(不考虑验证 )如图 54所示。消息名称参见表 54。 6 根据【说明】中的描述,给出图 53中
8、 A1和 A2所对应的参与者, u1至u3所对应的用例,以及该图中空 (1) 所对应的关系。 (ul至 u3的可选用例包括:Session、 Trans-action、 Inserl Card、 Invalid PIN Process和 Transfer) 7 根据【说明】中的描述,使用表 53中的英文名称,给出图 54中 6 9对应的消息。 8 解释图 53中用例 u3和用例 Withdraw、 Deposit等四个用例之间的关系及其内涵。9 阅读下列说明,回答问题 l和问题 2,将解答填入答题纸的对应栏内。 【说明】 现需在某城市中选择一个社区建一个大型超市,使该城市的其他社区到该超市的距
9、离总和最小。用图模型表示该城市的地图,其中顶点表示社区,边表示社区间的路线,边上的权重表示该路线的长度。 现设计一个算法来找到该大型超市的最佳位置:即在给定图中选择一个顶点,使该顶点到其他各顶点的最短路径之和最小。算法首先需要求出每个顶点到其他任一顶点的最短路径,即需要计算任意两个顶点之间的最短路径;然后对每个顶点,计算其他各顶点到该顶点的最短路径之和;最后,选择最短路径之和最小的顶点作 为建大型超市的最佳位置。 9 下面是求解该问题的伪代码,请填充其中空缺的 (1)至 (6)处。伪代码中的主要变量说明如下: W:权重矩阵 n:图的顶点个数 sP:最短路径权重之和数组, SPi表示顶点 i到其
10、他各顶点的最短路径权重之和, i从 1到 nrain_SP:最小的最短路径权重之和 min_v:具有最小的最短路径权重之和的顶点 i:循环控制变量 j:循环控制变量 k:循环控制变量 LOCATE-SHOPPINGMALL(W, n)1 D(0)=W2 for(1)3 for i=1 t0 n4 for j=1 t0 n5 6 (2)7 else8 (3)9 for i=1 to n10 sPi =O11 for j=1 to n12 (4)13 min sP=sP114 (5)15 for i=2 t0 n16 if min sPsPi17 min sP=sPi18 min V=i19 re
11、turn (6) 10 问题 1中伪代码的时间复杂度为 (7) (用 0符号表示 )。 二、选答题(共 3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效 。 11 阅读下列说明和 c函数代码,将应填入 (n) 处的字句写在答题纸的对应栏内。【说明】对二叉树进行遍历是二叉树的一个基本运算。遍历是指按某种策略访问二叉树的每个结点,且每个结点仅访问一次的过程。函数 InOrder。 ()借助栈实现二叉树的非递归中序遍历运算。设二叉树采用二叉链表存储,结点类型定义如下:typedef struct BtNodeElemTypeda
12、ta; *结点的数据域, ElemType的具体定义省略 * struct BtNode*ichiid, *rchild; *结点的左、右弦子 指针域 * )BtNode,*BTree;在函数 InOrder()中,用栈暂存二叉树中各个结点的指针,并将栈表示为不含头结点的单向链表 (简称链栈 ),其结点类型定义如下: typedef struct StNode *链栈的结点类型 * BTree elem; *栈中的元素是指向二叉链表结点的指针 * struct StNode*link; S Node;假设从栈顶到栈底的元素为 en、 en-1、 、 e1,则不含头结点的链栈示意图如图 55所示
13、。【 C函数】 int InOrder(BTree root) *实现 二叉树的非递归中序遍历 * BTree ptr; *ptr用于指向二又树中的结点 * StNode*q; *q暂存链栈中新创建或待删除的结点指针 +StNode*stacktop=NULL; *初始化空栈的栈顶指针 stacktop* ptr=root; *ptr指向二叉树的根结点 * while( (1 ) I I stacktop!=NULL)while(ptr!=NULL)q=(StNode*)malloc(sizeof(StNode);if(q=NULL)return-1; q-elem=ptr; (2) ; st
14、acktop=q; *stacktop指向新的栈顶 * ptr=(3 ) ; *进入左子树 * q=stacktop; (4) ; *栈顶元素出栈 * visit(q); *visit是访问结点的函数,其具体定义省略 * ptr= (5) ; *进入右子树 *free(q); *释放原栈顶元素的结点空间 * return 0; *InOrder* 12 阅读下列说明和 c+代码,将应填入 (n) 处的字句写在答题纸的对应栏内。【说明】现欲实现一个图像浏览系统,要求该系统能够 显示 BMP、 JPEG和 GIF三种格式的文件,并且能够在 Windows和 Linux 两种操作系统上运行。系统首先
15、将BMP、 JPEG和 GIF三种格式的文件解析为像素矩阵,然后将像素矩阵显示在屏幕上。系统需具有较好的扩展性以支持新的文件格式和操作系统。为满足上述需求并减少所需生成的子类数目,采用桥接 (Bridge)设计模式进行设计所得类图如图 56所示。 采用该设计模式的原因在于:系统解析 BMP、 GIF与 JPEG文件的代码仅与文件格式相关,而在屏幕上显示像素矩阵的代码则仅与操作系统相关。【 c+代码】 class Matrix各种格式的文件最终都被转化为像素矩阵 st处代码省略 ; class ImageImppublic: virtual void doPaint(Matrix m)=0; 显
16、示像素矩阵 m; class WinImp: public ImageImppublic: void doPaint(Matrix m) *调用 windows系统的绘制函数绘制像素矩阵 * ); class LinuxImp: public ImageImppublic: void doPaint(Matrix m) *调 用 Linux系统的绘制函数绘制像素矩阵 * ); class Imagepublic; void setImp(ImageImp*imp) (1) =imp; )virtual void parseFile(string fileName)=0 ;protected:
17、(2) *imp; ; classBMP: public Imagepublic: void parseFile(string fileName)此处解析 BMP文件并获得一个像素矩阵对象 m(3) ;显示像素矩阵 m; classGIF: public Image此处代码省略 ; classJPEG: public Image( gh处代码省略 ; void main()在 windows操作系统上查看demo bmp图像文件 Image*imagel= (4) ; ImageImp*imageImpl= (5) ; (6) ;imagel-parseFile(“demo bmp”); 现假
18、设该系统需要支持 10种格式的图像文件和5种操作系统,不考虑类 Matrix,若采用桥接设计模式则至少需要设计 (7) 个类。 13 阅读下列说明和 Java代码 ,将应填入 (n) 处的字句写在答题纸的对应栏内。【说明】现欲实现一个图像浏览系统,要求该系统能够显示 BMP、 JPEG和 GIF三种格式的文件,并且能够在 Windows和 Linux两种操作系统上运行。系统首先将BMP、 JPEG和 GIF三种格式的文件解析为像素矩阵,然后将像素矩阵显示在屏幕上。系统需具有较好的扩展性以支持新的文件格式和操作系统。为满足上述需求并减少所需生成的子类数目,采用桥接 (Bridge)设计模式进行设
19、计所得类图如图 57所示。采用该设计模式的原因在于:系统解析 BMP、 GIF与 JPEG文件的代 码仅与文件格式相关,而在屏幕上显示像素矩阵的代码则仅与操作系统相关。【 Java代码】 class Matrix各种格式的文件最终都被转化为像素矩阵 gt处代码省略 ; abstract class ImageImppublic abstract void doPaint(Matrix m); 显示像素矩阵 m; class WinImp extends ImageImppublic void doPaint(Matrix m) *调用 windows系统的绘制函数绘制像素矩阵 * ; clas
20、s LinuxImp extends ImageImppublic void doPaint(Matrix m) *调用 Linux系统的绘制函数绘制像素矩阵 * ; abstract class Imagepublic void setImp(ImageImp imp)(1) =imp; public abstract void parseFile(String fiieName);protected (2) imp; ; class BMP extends Imagepublic void parseFile(String fiieName)此处解析 BMP文件并获得一个像素矩阵对 象 m
21、(3) ;显示像素矩阵 m; classGIF extends Image此处代码省略 ; class JPEG extends Image此处代码省略 ; publ ic class j avaMainpublic static v。 id main (stringargs) 在 windows操作系统上查看 demO bmp图像文件 Image imagel= (4) ; ImageImp imageImpl= (5) , (6鱼 ) ;imagel parseFile(“demo bmp”); 现假设该系统需要支持 10种格式的图像文件和 5种操作系统,不考虑类 Matrix和类 ja.
22、vaMain,若采用桥接设计模式则至少需要设计 (7) 个类。 2009年上半年软件水平考试(中级)软件设计师下午(应用技术)试题真题试卷答案与解析 一、必答题(共 4道大题,每道大题 15分) 1 【正确答案】 El:财务部门 E2:采购门 E3:连锁超市 F4:配送部门 D1:采购清单记录文件 D2:商品库存记录文件 D3:商品配送记录文件 D4:供货请求记录文件 2 【正确答案 】 错误数据流 【试题解析】 问题一主要考查 DFD中的外部实体和数据存储,由于在题干中已经提到 “系统接收由连锁超市提出的供货请求,并将其记录到供货请求记录文件 ”,因此可以明确出 “连锁超市 ”外部实体和 “
23、供货请求记录文件 ”数据存储;对应到 DFD图中为 E3和 D4。描述中的第二项提出 “从商品库存记录文件中进行商品库存信息查询。如果库存满足供货请求,则给配送处理发送配送通知,否则,向采购部门发出缺货通知 ”,因为配送通知需要发送到采购部门,因此采购部门将成为系统的外部实体。同时,商品库存记录文件能够提供库存信 息,所以 DFD图中E2和 D2分别为采购部门和商品配送记录文件。第三项需求 “配送处理接到配送通知后,查询供货请求记录文件,更新商品库存记录文件,并向配送部门发 送配送单,在配送货品的同时记录配送信息至商品配送记录文件 ”,所以配送处理需要查询供货请求记录文件,更新商品库存记录文件
24、与商品配送记录文件,因此D3为商品配送记录文件;采购处理需要记录采购清单同时通知财务部门,所以 E1应该为财务部门, D1为采购清单记录文件,剩下的 E4则为配送部门。问题二需要补充的数据流为: E2 到采购处理,因为 E2 是采购部门、采购部门需要 经采购部提供入库商品信息;采购处到 D2需要一条数据流,因为采购处理需要更改库存信息;供货请求处理到 D4需要一条数据流,因为供货请求需要记录供货请求信息。 3 【正确答案】 【试题解析】 此类题目要求考生认真阅读题目对现实问题的描述,经过分类、聚集和概括等方法从中确定实体及其联系。题目己经给出了实体,需要根据需求描述给出实体间的联系。 问题 1
25、:由 “每个商场包含有不同的部门 ”可知商场与部门问为 1: m联系;由 “每个部门雇用了多名员工处理日常事务 ”可知部门与员工问为 l: n联系;由 “每个部门的员工中有一 个经理 每个经理只能管理一个部门 ”可知部门与经理间为 1: 1联系,并且员工是经理的超类型,经理是员工的子类型。 4 【正确答案】 (a)商场编号 (b)部门编号 (c)员工编号 部门关系模式的主键:部门编号 外键:商场编号 员工关系模式的主键:员工编号 外键:部门编号 经理关系模式的主键:员工编号 外键:员工编号 【试题解析】 商场的属性信息中,商场编号由集团公司分配。不会重复,可作为商场的主键属性:部门的属性信息中
26、,部门编号由集团公司分配,不会重复,可作为部门的主键属性,商场与部门的联系需要通过将 商场的主键 (商场编号 )加入到部门中来表达;员工的属性信息中,员工编号由集团公司分配,不会重复,可作为员工的主键属性,部门与员工的联系需要通过将部门的主键 (部门编号 )加入到员工中来表达。经理除了包含员工的属性信息外,还需要任职时间属性。完整的关系模式如下: 商场 (商场编号,商场名称,地址,联系电话 ) 部门 (部门编号,部门名称,位置分布,联系电话,商场编号 ) 员工 (员工编号,姓名,岗位,电话号码,工资,部门编号 ) 经理 (员工编号,任职时间 ) 5 【正确答案】 (d)紧急联系人 (e)1:
27、n 关系模式:紧急联 系人 (员工编号,姓名,联系电话 ) 【试题解析】 员工的紧急联系人信息通过添加紧急联系人关系来实现,由 “每位员工必须且只能登记一位紧急联系人的姓名和联系电话 ”,但可能存在多位员工登记同一位家属,可知员工与家属间为 n: 1联系;由 “不同的员工可以登记相同的紧急联系人 ”可知,员工编号可作为家属的主键属性。所以需要添加的关系模式如下:紧急联系人 (员工编号,姓名,联系电话 ) 6 【正确答案】 A1: Customer A2: Bank Ul: Session U2: Invalid PIN Process U3: Transaction(1): 7 【正确答案】
28、6: readPIN() 7: PIN 8: creat(atm, this, card, pin) 9: performFransaction() 8 【正确答案】 Transaction是一个抽象泛化用例,具有其他事务类型共有的属性和行为,每个具体的事务类型继承它,并实现适合自己的特定的操作。 【试题解析】 问题 1:识别参与者时,考查和系统交互的人员和外部系统。本题中,与系统交互的人员包括客户 (Customer)和银行操作员 ()perator),与本模拟系统交互的外部系统包括银行系统 (Sank)。考查用例时,通过判断哪一个特定参与者发起或者触发了与系统的哪些交互,来识别用例并建立和
29、参与者之间的关联。考查用例之间的关系时, -include; (包含 )定义了用例之问的包含关系,用于一个用例包含另一个用例的行为的建模;如果可以从一个用例的执行中,在需要时转向执行另一个用例,执行完返回之前的用例继续执行,用例间即存在 关系。 问题 2:序列图是场景的图形化表示,描述了以时间顺序组织的对象之间的交互活动。构造序列图时遵循如下指导 原则:确定顺序图的范围,描述这个用例场景或一个步骤;绘制参与者和接口类,如果范围包括这些内容的话;沿左手边列出用例步骤:对控制器类及必须在顺序中协作的每个实体类,基于它拥有的属性或已经分配给它的行为绘制框;为持续类和系统类绘制框;绘制所需消息,并把每
30、条消息指到将实现响应消息的责任的类上;添加活动条指示每个对象实例的生命期;为清晰起见,添加所需的返回消息;如果需要,为循环、可选步骤和替代步骤等添加框架。 问题 3:用例之间的继承关系表示子类型 “是一种 ”父类型。其中父类型通常是一个抽象泛化用例,具有子类型共有的属 性和行为,每个具体的子类型继承它,并实现适合自己的特定的操作。本题中 Transaction、 Withdraw 和 Deposit等四个用例之间的关系即为继承关系, Transaction 即是一个抽象泛化用例,具有其他事务类型共有的属性和行为,每个具体的事务类型继承它,并实现适合自己的特定的操作。 9 【正确答案】 (1)
31、k=1 tO n (5)rain_v=1(6)min_v 10 【正确答案】 (7)O(n3) 【试题解析】 问题 1:本问题考查算法流程。第 (1)空表示主循环, k是循环控制变量,故第 (1)空填 k=1to n。第 (2)和 (3)空根据题意和递归式,可分别得到答案为和计算了任意两个顶点之问的最短路径之后,对每个顶点,开始统计其到所有其他顶点的最短路径之和,因此第 (4)空填 SPi=SPi+dy(n)。第 13和第 14行初始化,假设最小的到所有其他顶点的最短路径之和为第一个顶点的最小路径之和,大型超市的最佳位置为第一个顶点,故第 (5)空填 rain_v=l。最后要求返回大型超市的最
32、佳位置,即到所有其他顶点的最短路径之和最小的顶点。问题 2:本问题考查 问题 1中的伪代码 28行,计算任意两点之间的 最短路径,有三重循环,故时间复杂度 0(n3)。第 9 12行,计算任意两点之间的最短路径之和,有两重循环,故时间复杂度为 0(n2)。第 1518行,在所有点的最短路径之和中找到最小的最短路径之和,时间复杂度为 O(n)。故算法总的时间复杂度为 O(n3)。 二、选答题(共 3道大题,每道大题 15分) 从下列 3道试题中任选 1道解答,如果解答的试题数超过 1道,则仅题号小的 1道题解答有效。 11 【正确答案】 (1)ptr! =NULL或 ptr! =0或 ptr(2
33、)q-link=stacktop(3)ptr-lchild(4)stacktop=stacktop-link或 stacktop=q-link(5)q-elem-rchild 【试题解析】 对非空二叉树进行中序遍历的方法是:先中序遍历根节点的左子树,然后访问根节点,最后中序遍历根节点的右子树。从以上算法的执行过程可知,从树根出发进行遍历时,递归调用 InOrderTraversing(root-LeftChild)使得遍历过程沿着左孩子分支一直走向下层节点,直到到达二叉树中最左下方的节点 (设为 f)的空左子树为止,然后返回节点,再由递归调用 InOrder Traversing(root-R
34、ightChild)进入 f的右子树,并重复以上过程。在递归算法执行过程中,辅助实现递归调用和返回处理的控制栈实际上起着保存从根节点到当前节点的路径信息。用非递归算法实现二叉树的中序遍历时,可以由一个循环语句实现从指定的根节点 m发,沿着左孩子分支一直到头 (到达一个没有左子树的节点 )的处理,从根节点到当前节点的路径信息 (节点序列 )可以明确构造一个栈来保存。 12 【正确答案】 (1)this-imp(2)Imagelmp(3)imp-doPaint(m)(4)newBMP()(5)new WinImp()(6)imagel-setImp(imageImpl)(7) 17 【试题解析】
35、根据题目描述,在设计该图像显示系统时主要分为两个步骤:一是读取各种文件并将文件内容转换成像素矩阵,因为各种图片格式不同,因此需要针对每一种图片格式编写文件读取代码,而该代码与操作系统平台无关。将像素矩阵显示到屏幕上时,由于和操作系统相关,因此需要把该代码和读取文件代码相分离。设计巾的 Image类表示抽象的图像概念 Image类中就包含了读取文件接口和设置实现平台接口。 Image的子类 BMP、 GIP和 IPEG分别负责读取各种不同格式的文件; ImageImp 的主要任务是将像素矩阵显示在屏幕上,因此,它存在两个子类,分别实现 Windows 系统和 L,inux 系统上的图像显示代码。
36、空缺 (1)处主要是设置将在哪个平台上进行实现,因此该处应该存储参数所传递的对象,由于该类的、成员变量也是 imp,与参数相同,因此需要填写 thiswimp,同理,该成员变量的类和参数的类 M应该保持相同。空 (2)处应该填写 Imagelmp,空 (3)处需要根据 imp 成员变量存储的实现对象来显示图像;在空 (4)处需要生成一个BMP对象;由于需要在 Windows平台上实现,因此空 (5)处需要生成一个 winImp对象,同时,还需设置该 BMlP对象,应采用 winImp 对象来实现显示。采用桥接模式能够将文件分析代码和图像显示代码分解在不同的类层次结构中,如果不考虑中间使用的 M
37、atrix 等类,那么最后需要设计的类包括两个父类,对应文件格式子类,对应操作系统平台类,因此 10种图像格式和 5种操作系统需要 17个类。 13 【正确答案】 (1)this imp(2)ImageImp(3)imp doPaint(m)(4)newBmp()(5)new WinImp()(6)imagel setImp(imageImpl)(7) 17 【试题解析】 根据题目描述,在设计该图像显示系统时主要分为两个步骤:一是读取各种文件并将文件内容转换为像素矩阵,因为各种图片格式不同,所以需要针对每一种图片格式编写文件读取代码,而该代码与操作系统平台无关。将像素矩阵显示到屏幕上时,由于和
38、操作系统相关,因此需要把该代码和读取文件代码相分离。设计中的 Image类表示抽象的图像概念, image类中就包含了读取文件接口和设置实现平台接口: Image的子类 BMP, GIF和 JPEG分别负责读取各种不同格式的文件; Imagelmp 的主要任务是将像素矩阵显示在屏幕上,因此,它存在两个子类,分别实现 Windows系统和 IJnux系统上的图像显示代码。空缺 (1)处主要是设置将在哪个平台上进行实现,因此该处应该存储参数所传递的对象,由于该类的成员变量也是 imp,与参数相同,因此需要填写 this imp;同理,该成员变量的类型和参数的类型应该保持相同,空 (2)处应该填写 Imagelmp;空 (3)处需要根据 imp 成员变量存储的实现对象来显示图像。在空 (4)处需要生成一 个 BMP对象;由于需要在 Win dows 平台上实现,因此空 (5)处需要生成一个 WinImp 对象,同时,还需设置该 BMP对象,应采用 WinImP对象来实现显示。采用桥接模式能够将文件分析代码和图像显示代码分解在不同的类层次结构中,如果不考虑中间使用的 Matrix 等类,那么最后需要设计的类包括两个父类,对应文件格式数目的子类,对应操作系统数目的平台类,因此 10种图像格式和 5种操作系统需要17个类。