1、 软件设计师考试模拟题及答案-试题一 阅读下列说明和图,回答问题1至问题3,将解答填入对应栏内。【说明】 某营销企业拟开发一个销售管理系统,其主要功能描述如下: 1接受客户订单,检查库存货物是否满足订单要求。如果满足,进行供货处理:修改库存记录文件,给库房开具备货单并且保留客户订单至订单记录文件;否则进行缺货处理:将缺货订单录入缺货记录文件。 2根据缺货记录文件进行缺货统计,将缺货通知单发给采购部门。 3根据采购部门提供的进货通知单进行进货处理:修改库存记录文件,并从缺货记录文件中取出缺货订单进行供货处理。 4根据保留的客户订单进行销售统计,打印统计报表给经理。 现采用结构化方法对销售管理系统
2、进行分析与设计,获得如下图所示的顶层数据流图和0层数据流图。 1、【问题1】 使用说明中的词语,给出上述顶层数据流图中的外部实体E1E4的名称。2、【问题2】 使用说明中的词语,给出上述0层数据流图中的数据存储D1D3的名称。3、【问题3】 上述0层数据流图中缺少了4条数据流,根据说明及顶层数据流图提供的信息,分别指出这4条数据流的起点和终点。起点终点试题二 阅读下列说明和图,回答问题1至问题4,将解答填入对应栏内。【说明】 某宾馆拟开发一个宾馆客房预订子系统,主要是针对客房的预订和入住等情况进行管理。【需求分析结果】 1员工信息主要包括:员工号、姓名、出生年月、性别、部门、岗位、住址、联系电
3、话和密码等信息。岗位有管理和服务两种。岗位为“管理”的员工可以更改(添加、删除和修改)员工表中本部门员工的岗位和密码,要求将每一次更改前的信息保留;岗位为“服务”的员工只能修改员工表中本人的密码,且负责多个客房的清理等工作。 2部门信息主要包括:部门号、部门名称、部门负责人、电话等信息。一个员工只能属于一个部门,一个部门只有一位负责人。 3客房信息包括:客房号、类型、价格、状态等信息。其中类型是指单人间、三人间、普通标准间、豪华标准间等;状态是指空闲、入住和维修。 4客户信息包括:身份证号、姓名、性别、单位和联系电话。 5客房预定情况包括:客房号、预定日期、预定入住日期、预定入住天数、身份证号
4、等信息。一条预定信息必须且仅对应一位客户,但一位客户可以有多条预定信息。【概念模型设计】 根据需求阶段收集的信息,设计的实体联系图(不完整)如下图所示。 【逻辑结构设计】 逻辑结构设计阶段设计的部分关系模式(不完整)如下: 员工( 4 ,姓名,出生年月,性别,岗位,住址,联系电话,密码) 权限(岗位,操作权限) 部门(部门号,部门名称,部门负责人,电话) 客房( 5 ,类型,价格,状态,入住日期,入住时间,员工号) 客户( 6 ,姓名,性别,单位,联系电话) 更改权限(员工号, 7 ,密码,更改日期,更改时间,管理员号) 预定情况( 8 ,预定日期,预定入住日期,预定入住天数)4、【问题1】
5、根据问题描述,填写上图中(1)(3)处联系的类型。联系类型分为一对一、一对多和多对多三种,分别使用1:1,1:n或1:*,m:n或*:*表示。5、【问题2】 补充上图中的联系并指明其联系类型。6、【问题3】 根据需求分析结果和上图,将逻辑结构设计阶段生成的关系模式中的空(4)(8)补充完整。(注:一个空可能需要填多个属性)7、【问题4】 若去掉权限表,并将权限表中的操作权限属性放在员工表中(仍保持管理和服务岗位的操作权限规定),则与原有设计相比有什么优缺点(请从数据库设计的角度进行说明)。试题三 阅读下列说明和图,回答问题1至问题4,将解答填入对应栏内。【说明】 在线会议审稿系统(Online
6、 Reviewing System,ORS)主要处理会议前期的投稿和审稿事务,其功能描述如下: 1用户在初始使用系统时,必须在系统中注册(register)成为作者或审稿人。 2作者登录(login)后提交稿件和浏览稿件审阅结果。提交稿件必须在规定提交时间范围内,其过程为先输入标题和摘要、选择稿件所属主题类型、选择稿件所在位置 (存储位置)。上述几步若未完成,则重复;若完成,则上传稿件至数据库中,系统发送通知。 3审稿人登录后可设置兴趣领域、审阅稿件给出意见以及罗列录用和(或)拒绝的稿件。 4会议委员会主席是一个特殊审稿人,可以浏览提交的稿件、给审稿人分配稿件、罗列录用和(或)拒绝的稿件以及关
7、闭审稿过程。其中,关闭审稿过程须包括罗列录用和(或)拒绝的稿件。 系统采用面向对象方法开发,使用UMi进行建模。在建模用例图时,常用的方式是先识别参与者,然后确定参与者如何使用系统来确定用例,每个用例可以构造一个活动图。参与者名称、用例和活动名称分别参见以下各表。参与者列表名称说明名称说明User用户Author作者Reviewer审稿人PCChair委员会主席 用例名称列表 名称说明名称说明login登录系统register注册submit paper 提交稿件browse review results 浏览稿件审阅结果close reviewing procss 关闭审稿过程assign
8、paper to reviewer 分配稿件给审稿人set preferences 设定兴趣领域enter review 审阅稿件给出意见listaccepted/rejected papers罗列录用或/和拒 绝的稿件browsesubmitted papers浏览提交的稿件活动名称列表名称说明名称说明select paper location 选择稿件位置upload paper 上传稿件select subject group 选择主题类型send notification 发送通知enter title and abstract 输入标题和摘要系统的部分用例图和提交稿件的活动图分别见下
9、图。 8、【问题1】 根据说明中的描述,使用参与者列表的英文名称,给出ORS用例图中A1A4所对应的参与者。9、【问题2】 根据说明中的描述,使用用例名称列表中的英文名称,给出ORS用例图中U1一 U3所对应的用例。10、【问题3】 根据说明中的描述,给出ORS用例图中 (1) 和 (2) 所对应的关系。11、【问题4】 根据说明中的描述,使用用例名称列表和活动名称列表中的英文名称,给出提交稿件过程的活动图中ActionlAction4对应的活动。试题四 阅读下列说明,回答问题1至问题3,将解答填入对应栏内。【说明】 某餐厅供应各种标准的营养套餐。假设菜单上共有n项食物m1,m2,mn,每项食
10、物mi的营养价值为vi,价格为pi其中i1,2,n,套餐中每项食物至多出现一次。客人常需要一个算法来求解总价格不超过M的营养价值最大的套餐。12、【问题1】 下面是用动态规划策略求解该问题的伪代码,请填充其中的空缺(1)、(2)和(3)处。 伪代码中的主要变量说明如下。 n:总的食物项数; v:营养价值数组,下标从1到n,对应第1到第n项食物的营养价值; p:价格数组,下标从1到n,对应第1到第n项食物的价格; M:总价格标准,即套餐的价格不超过M; x:解向量(数组),下标从1到n,其元素值为0或1,其中元素值为0表示对应的食物不出现在套餐中,元素值为1表示对应的食物出现在套餐中; nv:n
11、+1行M+1列的二维数组,其中行和列的下标均从0开始,nvij表示由前i项食物组合且价格不超过j的套餐的最大营养价值。问题最终要求的套餐的最大营养价值为nvnM。 伪代码如下: MaxNutrientValue(n,v,p,M,x) 1 for i0 to n 2 nvi0 0 3 for j1 to M 4 nv0j0 5 for i1 to n 6 for j1 to M 7 if jpi /若食物mi不能加入到套餐中 8 nvij nvi-1j 9 else if (1) 10 nvij nvi-1j 11 else 12 nvij nvi-1j-pi + vi 13 j M 14 fo
12、r in downto 1 15 if (2) 16 xi 0 17 else 18 xi 1 19 (3) 20 return x and nvnM13、【问题2】 现有5项食物,每项食物的营养价值和价格如下表所示。编码营养价值价格m120050m218030m322545m420025m5505食物营养价值及价格表若要求总价格不超过100的营养价值最大的套餐,则套餐应包含的食物有 (4) (用食物项的编码表示),对应的最大营养价值为 (5) 。14、【问题3】 问题1中伪代码的时间复杂度为 (6) (用O符号表示)。试题五 阅读下列说明和C函数,将应填入 (n) 处的字句写在对应栏内。15
13、、【说明】 已知集合A和B的元素分别用不含头结点的单链表存储,函数Difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A5,10, 20,15,25,30,集合B5,15,35,25,如图(a)所示,运算完成后的结果如图(b)所示。 链表结点的结构类型定义如下: typedef struct Node ElemType elem; struct Node *next; NodeType;【C函数】 void Difference(NodeType *LA,NodeType *LB. NodeType *pa, *pb, *pre, *q; preNUL
14、L; (1) ; while (pa) pbLB; while( (2) ) pbpb-next; if( (3) ) if(!pre) *LA (4) ; else (5) pa-next; q pa; papa-next; free(q); else (6) ; papa-next; 试题六 阅读下列说明和C+代码,将应填入 (n) 处的字句写在对应栏内。16、【说明】 已知某类库开发商提供了一套类库,类库中定义了Application类和Document类,它们之间的关系如下图所示。其中,Application类表示应用程序自身,而Document类则表示应用程序打开的文档。Applic
15、ation类负责打开一个已有的以外部形式存储的文档,如一个文件,一旦从该文件中读出信息后,它就由一个Document对象表示。 当开发一个具体的应用程序时,开发者需要分别创建自己的Application和Document子类,例如上图中的类MyApplication和类MyDocument,并分别实现Application和 Document类中的某些方法。 已知Application类中的openDocument方法采用了模板方法(Template Method)设计模式,该方法定义了打开文档的每一个主要步骤,如下所示: 1首先检查文档是否能够被打开,若不能打开,则给出出错信息并返回; 2创
16、建文档对象; 3通过文档对象打开文档; 4通过文档对象读取文档信息; 5将文档对象加入到Application的文档对象集合中。【C+代码】 #includeiostream #includevector using namespace std; class Document public: void save()/*存储文档数据,此处代码省略*/) void open(string docName) /*打开文档,此处代码省略*/) void close() /*关闭文档,此处代码省略*/) virtual void read(string docName) 0; ; class Apppl
17、ication private: vector (1) docs; /*文档对象集合*/ public: bool canOpenDocument(string docName) /*判断是否可以打开指定文档,返回真值时表示可以打开, 返回假值表示不可打开,此处代码省略*/ void addDocument(Document * aDocument) /*将文档对象添加到文档对象集合中*/ docs.push_back( (2) ); virtual Document * doCreateDocument()0;/*创建一个文档对象*/ void openDocument(string doc
18、Name)/*打开文档*/ if ( (3) ) cout“文档无法打开!”endl; return; (4) adoc (5) ; (6) ; (7) ; (8) ; ;试题七 阅读下列说明和Java代码,将应填入 (n) 处的字句写在对应栏内。17、【说明】 已知某类库开发商捉供了一套类库,类库中定义了Application类和Document类,它们之间的关系如下图所示,其中,Application类表示应用程序自身,而Document类则表示应用程序打开的文档。Application类负责打开一个已有的以外部形式存储的文档,如一个文件,一旦从该文件中读出信息后,它就由一个Documen
19、t对象表示。 当开发一个具体的应用程序时,开发者需要分别创建自己的Application和Document子类,例如上图中的类MyApplication和类MyDocument,并分别实现Application和 Document类中的某些方法。 已知Application类中的openDocument方法采用了模板方法(Template Method)设计模式,该方法定义了打开文档的每一个主要步骤,如下所示: 1首先检查文档是否能够被打开,若不能打开,则给出出错信息并返回; 2创建文档对象; 3通过文档对象打开文档; 4通过文档对象读取文档信息; 5将文档对象加入到Application的文
20、档对象集合中。【Java代码】 abstract class Document public void save()/*存储文档数据,此处代码省略*/ ) public void open(String docName) /*打开文档,此处代码省略*/) public void close() /*关闭文档,此处代码省略*/) public abstract void read(String docName); ; abstract class Appplication private Vector (1) docs; /*文档对象集合*/ public boolean canOpenDocu
21、ment(String docName) /*判断是否可以打开指定文档,返回真值时表示可以打开,返回假值表示不可打开,此处代码省略*/ public void addDocument(Document aDocument) /*将文档对象添加到文档对象集合中*/ docsadd( (2) ); public abstract Document doCreateDocument();/*创建一个文档对象*/ public void openDocument(String docName)/*打开文档*/ if ( (3) ) Systemoutprintln(“文档无法打开!”); return
22、; (4) adoc (5) ; (6) ; (7) ; (8) ; ;答案:试题一1、E1:客户 E2:采购部门 E3:库房 E4:经理 2、D1:缺货记录文件 D2:库存记录文件 D3:订单记录文件 3、起点终点库存记录文件或D2处理订单进货处理供货处理订单记录文件或D3销售统计缺货记录文件或D1进货处理注:数据流之间没有顺序关系试题一分析 本题考查DFD的应用,属于比较传统的题目,需要细心分析题目中所描述的内容。 数据流图(Data Flow Diagram,DFD)是一种便于用户理解、分析系统数据流程的图形工具。它摆脱了系统的物理内容,精确地在逻辑上描述系统的功能、输入、输出和数据存储
23、等,是系统逻辑模型的重要组成部分。问题1 考查顶层DFD。顶层DFD通常用来确定系统边界,其中只包含一个唯一的加工(即待开发的系统)、外部实体以及外部实体与系统之间的输入输出数据流。题目要求根据描述确定图中的外部实体。分析题干中描述并结合已给出的顶层数据流图,可知该销售管理系统中有客户、采购部门、库房、经理。题干中提供的关键信息如下:接受客户订单;给库房开具备货单;将缺货通知单发给采购部门;打印统计报表给经理。问题2 考查0层DFD,要求确定0层数据流图中的数据存储,题目中提到的数据存储有订单记录文件、库存记录文件和缺货记录文件。在题中给出的0层DFD中,与数据存储 D1相关的数据流有两条,来
24、自“处理订单”;到达“缺货统计”,分析“1接受客户订单,检查库存货物是否满足订单要求。如果满足,进行供货处理:修改库存记录文件,给库房开具备货单并且保留客户订单至订单记录文件;否则进行缺货处理:将缺货订单录入缺货记录文件。”,确定D1应是“缺货记录文件”。 分析0层数据流图,到达D2的数据流分别来自“供货处理”和“进货处理”,由“3根据采购部门提供的进货通知单进行进货处理:修改库存记录文件,并从缺货记录文件中取出缺货订单进行供货处理。”,确定D2为“库存记录文件”。由描述“给库房开具备货单并且保留客户订单至订单记录文件”,确定D3为“订单记录文件”。问题3 考查缺失的数据流。比较顶层和0层数据
25、流图可知,顶层数据流图中的数据流已全部体现在0层数据流图中。图中缺失数据流最明显的地方是“销售统计”加工只有流出的数据流而没有流入的数据流,由“给库房开具备货单并且保留客户订单至订单记录文件,根据保留的客户订单进行销售统计”可知,应存在一条从D3(订单记录文件)至销售统计的数据流。 由“接受客户订单,检查库存货物是否满足订单要求”可知,处理订单时需要来自库存记录文件的数据流。当发生缺货情况时,除了“根据缺货记录文件进行缺货统计,将缺货通知单发给采购部门”,采购部门还需根据缺货记录文件进行进货处理。一旦进货成功,就可进行供货处理。试题二4、(1)n,或m,或, (2)n,或m,或: (3)n,或
26、m,或。 5、需要增加员工和权限之间m:1的联系。 或者 6、问题3 (4)员工号,部门号 (5)客房号 (6)身份证号 (7)岗位 (8)客房号,身份证号 7、若将权限表中的操作权限属性放在员工表中,则相同岗位的操作权限在员工表中重复存储,存在数据冗余。试题二分析 本题考查数据库系统中实体联系模型(E-R模型)的设计和关系模式的设计。 两个实体型之间的联系可以分为三类:一对一联系(1:1)、一对多联系(1:n)和多对多联系(m:n)。 本题中员工和部门之间的所属联系类型为m:1,因为题中一个员工只能属于一个部门,一个部门可以有多名员工。所以空(1)应填m。 本题中客户和客房之间的预定联系类型
27、为m:n,因为题中一位客户可以预订多间客房,而客房在不同的时间段可以被多个客户预订。所以空(2)、空(3)应分别填m和n。 根据题意,岗位有管理和服务两种。岗位为“管理”的员工可以更改(添加、删除和修改)员工表中本部门员工的岗位和密码,要求将每一次更改前的信息保留;岗位为“服务”的员工只能修改员工表中本人的密码,且负责多个客房的清理等工作。所以,需要增加管理员和权限之间m:1的联系。 或者表示为 主键也称为主码,是关系中的一个或一组属性,其值能唯一标识一个元组。根据题意,该宾馆客房预订子系统中,逻辑结构设计阶段设计的部分不完整关系模式空(4) (8)应补充的内容分析如下。 空(4)应增加一个主
28、键“员工号”和一个外键“部门号”。因为“员工号”能唯一标识员工关系中的每一个元组;又因为一个员工只能属于一个部门,一个部门可以有多名员工,员工和部门之间的所属联系类型为m:1,所以需要将1端的码并入多端,即将“部门号”加入员工关系模式中。 空(5)应增加一个主键“客房号”,用来唯一标识客房关系中的每一个元组。 空(6)应增加一个主键“身份证号”,用来唯一标识客户关系中的每一个元组。 空(7)应填岗位,因为不同的岗位具有不同的权限,所以需要增加岗位属性。 空(8)应增加“客房号”和“身份证号”。因为对于预定情况是客户与客房之间多对多的联系,所以应该将两端的码作为联系的主键。 若去掉权限表,那么需
29、要将权限表中的操作权限属性放在员工表中,则相同岗位的操作权限在员工表中重复存储,存在数据冗余。试题三8、A1:User A2:Author A3:Reviewer A4:PCChair 9、U1:list accepted/rejected papers U2:browse submitted papers U3:assign paper to reviewer 注:U2和U3的答案可互换 10、(1):extend(2):include 11、Action1:enter title and abstract Action2:select subject group Action3:selec
30、t paper location Action4:upload paper试题三分析 本题涉及面向对象系统开发时的UML用例图、活动图以及用例之间的关联关系。 构建用例图时,常用的方式是先识别参与者,然后确定用例。创建参与者之间的继承关系是为了简化绘图。继承关系可以通过子类型“是一种”父类型进行判定。在本题中,作者和审稿人分别是一种用户,委员会主席是一种特殊审稿人。因此,A1:User、 A2:Author、A3:Reviewer、A4:PCChair。 考查用例时,通过判断用例是哪一个特定参与者发起或者触发,来建立和参与者之间的关联。审稿人可以设定兴趣领域、审阅稿件给出意见和罗列录用或/和拒
31、绝的稿件,因此U1:list accepted/rejiected papers,会议委员会主席可以浏览提交的稿件、给审稿人分配稿件、罗列录用和(或)拒绝的稿件以及关闭审稿过程,U2和U3分别为browse submitted papers和assign paper to reviewer(可互换)。 考查用例之间的关系时,extend(扩展)关系可以通过判断是否可以从一个用例的执行中,在需要时转向执行另一个用例,执行完返回继续,即存在extend关系。include(包含)定义了用例之间的包含关系,用于一个用例包含另一个用例的行为的建模,通过这种方式,可以把抽象(公共)行为从多个行为中分离出
32、来。本题中,只有作者能提交稿件,“提交稿件”时判断是否登录,如果没有登录,先“登录”,然后返回继续提交稿件,所以(1)处应填extend。审稿人可以罗列录用和(或)拒绝的稿件,会议委员会主席在关闭审稿过程时须包括罗列录用和(或)拒绝的稿件,即用例“list accepted/rejected papers”和用例“close reviewing process”存在包含关系,所以(2)处应填include。 可以通过为每个用例构造一个活动图对用例进一步细化。构造活动图时可以通过如下步骤进行:从一个作为起点的初始节点开始;为用例的每个主要步骤添加一个动作:从一个活动到另一个活动、决策点或终点添加
33、一条流;在流分解成不同路线的地方添加决策,并用一个合并将各个流重新合并;在有并行执行活动的地方添加分支和联合;用一个单一的活动终止符号结束。本题中,根据说明中条目2中描述的提交稿件的过程构建活动图,所以Actionl处填enter title and abstract、Action2处填select subject group、 Action3处填select paper location、Action4处填upload paper。试题四12、(1)nvi-1jnvi-1j-pi+vi (2)nvijnvi-1j (3)jj-pi 13、(4)m2,m3,m4 (注:答案中食物编码无前后顺序
34、关系) (5) 605 14、(6)O(nM),或O(nM),或O(n*M)试题四分析 本题实质上是一个0-1背包问题,该最优化问题的目标函数是 maxViXi(Xi0,1) i1 约束函数是 PiXiM (xi0,1) 0-1背包问题可用动态规划策略求得最优解,求解的递归式为 其中,nvij表示由前i项食物组合且价格不超过j的套餐的最大营养价值。问题最终要求的套餐的最大营养价值为nvnM。根据上述递归式,可以很容易以自底向上的方式编写伪代码。问题1中伪代码的第1行到第12行计算数组nv的元素值,第1行到第4行计算i为0或者j为0时nvij的值,对应递归式的第一种情况;第7行和第8行计算当jp
35、i时即不能选择mi时nvij的值,对应递归式的第二种情况:第9到第12行对应递归式的第三种情况,故根据递归式,空(1)的答案为nvi-1jnvi-1j-pi +vi。伪代码的第13行到第19行求解哪些食物放入到套餐中,食物项从后向前考虑,若nvijnvi-1j,表示食物mi没有放入套餐中,即xi0,故空(2)的答案为nvijnvi-1j。相反,若食物mi放入套餐中,则xi1,同时套餐还能选择不超过j-pi的价格的食物,故空(3)的答案为jj-pi。 问题2的实例要求总价格不超过100,根据上述递归式,计算出要选择的食物项为 m2、m3和m4,对应的总价值为605,总价格为100。 根据问题1的
36、伪代码,第1行到第2行、第3行到第4行以及第14行到19行的时间复杂度为O(n),第5行到第12行的时间复杂度为O(nM)。故算法总的时间复杂度为 O(nM)。试题五15、(1)pa*LA (2)pb & pb-elem!pa-elem,或其等价表示 (3)pb或pb!=NULL (4)pa-next,或(*pa).next,或其等价表示 (5)pre-next,或(*pre)next (6)prepa解析 本题考查链表结构上的基本运算。 集合A与B的差是指在集合A中而不在集合B中的元素。本题用链表表示集合并将运算结果用表示集合A的链表存储,因此涉及到链表上的查找、删除基本运算。 基本思路为:
37、对于集合A中的每个元素,在集合B中进行查找,若找到,则应将该元素从集合A中去掉;否则保留,用两层循环实现,外层循环用于遍历集合A,内层循环遍历集合B。 代码中的指针pa用于指向集合A的元素;pb指向集合B的元素;临时指针q指向需要被删除的元素;pre用于实现删除时结点的链接,与pa保持所指结点的前后继关系。 显然,pa需要一个初始值,即指向集合A的第一个元素结点。由于参数LA是指向集合A第一个结点的指针的指针,因此空(1)处应填入pa*LA。 在内层循环中遍历集合B时,初始时令pb指向B的第一个元素(pbLB),此后应在链表中查找与A中当前元素相同者,因此空(2)处应填入pb & pb-ele
38、m ! pa-elem。 此后,应判断在B中是否找到指定元素。显然,若找到(即pb-elempa-elem),则指针pb不为空,否则,pb为空。因此,空(3)处填入pb或pb!=NULL,空(6)处则填入prepa。 由于链表不带头结点,因此,当需要删除集合A的第一个元素时,表示该集合的链表头指针会被修改。pre初始值为NULL,可标志删除的是否为A的第一个元素。因此查找成功时,pre为空(!pre成立)表示需要删除A的第一个元素(pa指针所指),使得 A的头指针指向第二个元素,即应将*LA更新为pa-next,空(4)处填入pa-next。如果删除的不是第一个元素,则由于pa指向被删除的元素
39、,而且pre与pa所指元素保持前后继关系,因此空(5)处应填入pre-next。试题六16、(1)Document* (2)aDocument (3)!canOpenDocument(docName) (4)Document* (5)doCreateDocument() (6)adoc-open(docName) (7)adoc-read(docName) (8)addDocument(adoc)解析 本题考查了C+语言的应用能力和模板方法设计模式。空(1)考查了C+标准库中Vector模板类的使用,由于Vector模板类可以存储任意类型,在定义时需要指定其存储类型,根据后面的代码,能够加入到
40、该文档集合对象中的元素是各个文档的指针,因此空(1)处的类型应该为文档指针类型。空(2)处将文档指针加入文档集合对象中。从空(3)开始的代码属于图中Application类的OpenDocument方法,该方法是模板方法,因此,需根据题目给出的步骤一一对应填空。空(3)处判断能否打开文档,需要调用父类自己的方法canOpenDocument。其次需要创建文档对象,调用doCreateDocument方法,接着通过文档对象打开和读取文档,最后通过addDocument方法将该文档对象加入到文档对象集合中。所有这些方法都是在父类或文档对象中进行定义,不涉及到具体的子类,子类负责要实现这些模板方法中
41、需要调用的方法以便运行时被调用。试题七17、(1)Document (2)aDocument (3)!canOpenDocument(docName) (4)Document (5)doCreateDocument() (6)adoc.open(docName) (7)adoc.read(docName) (8)addDocument(adoc)解析 本题考查了Java语言的应用能力和模板方法设计模式。空(1)考查了Java库中Vector模板类的使用,由于Vector模板类可以存储任意类型,在定义时需要指定其存储类型,根据后面的代码,能够加入到该文档集合对象的类型为文档类型,因此空(1)处的类型应该为Document。空(2)处将文档对象加入文档集合对象中。从空(3)开始的代码属于图中Application类的OpenDocument方法,该方法是模板方法,因此,需根据题目给出的步骤一一对应填空。空(3)处判断能否打开文档,需要调用父类自己的方法canO