《软件设计师下午试题分析与解答.pdf》由会员分享,可在线阅读,更多相关《软件设计师下午试题分析与解答.pdf(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、软件设计师下午试题分析与解 软件设计师下午试题分析与解答 试题一(S WS)阅读以下说明和图回警何题I至何题3*将解答填入答您纸的对应栏内*【说朝】撰时装邮鞠提供商拟开发订锻竝理系统,用于处理客户通过电话 s SK.邮件或 Web站点茄下订单 b其主饕功能如下:(1)増加容户记录.标新套户侶恵添加到客户丈件川分配一 6 客户号议备后统 使風 2)査询商晶信息。接收容户提交的商靠信息请求.从商品文件中査询商品的价搐 和可订则散量等商品拾息.返回给容户.3)増加订记录.根拥髯户的订购请求及该客户弋录的相关怕息,产生订单井辭 加到订单文件中(4)A生配蛍单根据订单 P 最产生配赏单*井将盘货草发送翁
2、仕库进行备栈;*好境后.发送备贾武貓通知.如果现赏不足,则需向供应商订货.5)推备发甘单屮从订单文件中获取订单记卓从客户文件中获取客户记求.井产 生发赏单.(ft)S.考收到送的备贯就绪適知后,抿据发贡战绪容户岚赁;产生转运 单井爱进豁客户.7)创建需户账型.根据订单文杵中的订罩记亲湘客户文件甲的客户込蘿产生井 境送客户账单.同时更新两品文件中的商品数曲和订单文件中的订单状态.产生应收味户報据客户记烈租订单文件中的1T单倍魁 产生并发送绪财毎部 门应收胀户报股*枣采屈箱梅牝方法对订单处理系较进荷分析与设讯我得如阳i-i所示的mettffi 流谢舉图1-2祈汞的0层救塞漁图口【问题11(3#)便
3、用说明中的词语给出图H中的实休呼E3的名称“IFIH 21(3 分 使用说明中的词语,给出图1-2中的数据存储DID3的喀称 M3)(分)h Cl)给出留1-2中处理(加工)円和吃的名稅血其相应的紋入齡出$債 HE 1-1顶尼数据流图 图12 0足数据流图 (2)除加工P1和P2的输入输出流外,图1-2还缺失了 1条数据流.请给出其起点 和终点.起 点 终 点 注,名称使用论明中的词忙.妃点和终点均使用 ffi 1-2中的符号或词汇.试题一分析 本题考査采用结构化方法进行系统分析与设计的知识,是比较传统的题目,要求考 生细心分析题目中所描述的内容。数据流图(DFD)足一种便于用户理解、分析系统
4、数据流程的图形化建模工具,足 系统逻辑模型的重要组成部分。【问题1】本问题考査顶层DFD.顶层DFD般用来确定系统边界,将待开发系统看作一个 加工,因此图中只有唯一的一个处理和一些外部实体,以及这两者之间的输入输出数据 流。题目要求根据描述确定图中的外部实体。根据题目中的描述,并结合已经在顶层数 据流图中给出的数据流进行分析.从题目的说明中可以看出:客户提交裔品仃息请求、订购请求等;将配货单发送给仓库、仓库向系统发送冬货就绪通知;发送给财务部门 应收戦户报董。由此可知该订单系统有客户、仓库和财务部门三个外部实体。对应 图11中数据流和实体的对应关系,可知E1为客户,E2为财务部门,E3为仓库。
5、本题 中需注盘说明(4)中向供应商订货是系统外部的行为,因此,供应商井非本系统的外韶 实体。AH21 本问题考査0层DFD中数据疗储的确定.根据说明中的以下描述:将新客户信息 添加到客户文件从商品文件中査询商品的价格和可订购数绘等商品信息;产生订单并 添加到订单文件中,得出数据存储为客户文件、商品文洋以及订单文件.再根据图1-2 中D1的输入和输出数据流均为客户记录,D2的输入数据涼为从处理“创建客户账单”来的新商品数盘.输出数据流为到处理“査询商品信息”的商品数播和价格,D3的输入 数据流为从处理“增加衣户订单来的订单.可知,D1为卒户丈件,D2为商品文件,D3为订单文件.【问题3】方问题考
6、査0层DFD中缺失的处理和数据流。从说明中的描述功能和图12,可知 产生配货葷和准冬发货单没有在图12中,即缺少两个处理:产生配货敞和帚冬发货单.根据说明(4)中的描述:根据订单记录产生配货单,并将配货单发送给仓库进行备货;备好贺后,发送备货就绪通知。可知,产生配货单的犍入流为订单记录,该输入流的起 点为订单文件(D3),输出流为配货单.其终点为仓库(E3)根据说明(5)中的描述:从订单文件中获取订单记录,从客户文件中获取玄户记笊,并产生发货单。可知,准名 发货单的输入流为订单记录和客户记录,订单记录的起点为订单文件.客户记录的起点 为客户文件;输出流为发货单.再根据说明6)中处理发货的描述;
7、根堀发货单给客户 发货发货单的终点为处理发货。产生配货单和准备发货单分别对应P1利P2(或P2 和Pl)Pl和P2及其输入输出流均识别出来之后,再对照说明和图12,以找出缺少的另外 一条数据流.对照说明(7)中的描述:根据订单文件中的订单记录和客户文件中的客户 记录;产生并发送客户嫔单。因此,创建客户账单缺少一条输入流;客户记求,其起点 为 0 户文件(D1).参考答案 【问题1】Eh客户 E2:财务部门 E3:仓库【问题2】D1:導户文件 D2:商品文件 D3:订单文件【问题3】(1)处理(加工)名称,数据流.P1:产生配货单 P2:准备发货服 数据流名称 起 点 点 订单记录 D3或订单文
8、件 P1或产生配货煩 配货单 P1或产生配员单 E3或 仓席 订承记录 D3或订单文件 P2或准备发货草 客户记录 D1或客户文件 P2或准笹发货敏 发货单 P2或准备发货单 发货 上表中各行次序无关,但毎条数据流的名妳:起点、终点必须相对应。P1和P2可互换,即P1为“准备发货单”、P2为“产生配货单”。(2)缺少的数据流,起 点 线 点 D1或客户文件 钢建客户账舉 试题二(共15分 阅读以下说明,回答问题1至问题3,将解善填入答題纸的对应栏内。【说明】某公司拟开发一套小区物业收费管锂系统。初步的需求分析结果如下,(1)业主信息主要包括:业主编号、姓名、房号、龙屋面稅、工作单位、联系电话
9、等房号可唯一标识一条业主佶息,且一个房号仅对应一奁房屋&一个业主可以有一套 或多套的房屋。(2)部门信息主要包括;部门号、部门名称、部门负责人、部门电话等.一个员工 只能属于一个部门,一个部门只有一位负责人。(3)员工伯息主要包括;员工号、姓名、出先年月、性别、住址.联系电话、所在 部门号、职务和密码等。根据职务不同,员工可以有不同的权限:职务为“经珂”的员工具有更改(添加、删除和修改)员工衷中本部门员工信息的操作权限:职务为“收费”的员工只具有收费的操作权限。(4)收费信息包括:房号、业主编号、收费日期、收费类型、数量、收费金额、员 工号等。收费类型包括物业费、卫生费、水费和电费.并按月收取
10、,收费标准如表2-1 所示。其中:物业费二房屋面积(平方米)X每平方米敵价,卫生费套房数量(套)X 每套房单价,水费二用水数凰(吨*每吨水单价,电费二用电数虽(度X每度电单价.收费完毕应为业主生成收费单,收费单示例如a2-2所示。【槪念模型设计】根据需求阶段收集的信息,设计的实体联系图(不完整如图21所示。图2“中 收费员和经理是员工的子实体。业主 wn 权限(a)n,或 m,或 收费员-Q 员工 -炜理 图 2】补充完農的实体联寒陌【问题3】业主关系属于第2范式。问题是当某业主有多套住房时.属性“业主编号,姓名.房屋面积,工作欤位,联 系电话”等信息在业主关系表中重复存储,存在数据冗余.试鉅
11、三(共15分 阅读下列说明和图,冋答问题1至问题3,将解答填入答题纸的对应栏内。【说明】某网上药店允许顾客凭借医生开具的处方,通过网络在该药店购买处方上的药品。该网上药店的基本功能描述如下:(1)注册.顾客在买药之前.必须先在网上药店注册注册过程中需填写顾客资料 以及付歡方式(信用卡或者支付宝账户)。此外顾客必须与药店签订一份授权协议书,授 权药店可以向其医生确认处方的真伪.(2)登录。已经注册的顾客可以童录到网上药房购买药品。如果是没有注册的顾客,系统将拒绝其登录。(3)录入及提交处方.晋录成功后,顾客按照“处方录入界面”显示的信息,填写 开具处方的厌生的信息以及处方上的药品信息。填写完成后
12、.提交该处方。(4)验证处方.对子已经提交的处方(系统将其状态设置为“处方已捏交”),其验 证过程为:核实医生倍息如果医生信息不正确,该处方的狀态被汝置为“医生信息无效”,并取消这个处方的购买请求;如果医生侑息是正确的,系统给该医生发送处方确认iff求,并将处方狀态修改为“审核中”。如果陕生回复处方无效,系统取消处方.并将处方状态设置为“无效处方”.如 果医生没有在7天内给出确认答复,系统也会取消处方,并将处方状态设置为“无法 审核 如果医生在7天内给出了确认答复,该处方的状态被修改为“准许付歉”.系统取消所有未通过验证的处方,并自动发送一封电子邮件给顾客,通知顾客处方 被取消以及取消的原因.
13、5)对于通过卷证的处方,系统自动计算药品的价格并邮奇药品给己经付款的顾客。该网上药店采用血向对象方法开发,使用UML进行建模.系统的类图如图3-1 图 3J 类图 【问蝕1】4分)根拯说明中的描述,给田图3“中峡少的C1C5所对应的类名以及(】(6)处所对应的多重度.【问题2】(4分)用32给出了“处方”的部分状态图根据说明中的描述,给出图32中缺少的S1 S4所对应的状态名以及(7)(10)处所对应的迁移(transition)名.【间H31(3分)图3-1中的笛号”f”利“Q”在UML中分别衣示类和对象Z间的哪的种关系?两者之间的区别是什么?试题三分析 本题珥査UML的应用,是比较传统的题
14、日,要求考生细心分析题目中所描述的 内容.【问题1】本问题考g UML的癸图类图展现了一组对歩、接口、协作和它们Z间的关系.在面向对象系统的建模中,最常用的模型之一就是类图.类图用于对系统的静态设计视图建模。这种视图主要支持系统的功能需求,即系统 要 売 供 给 用 户 的 服 务。但 对 系 统 的 静 态 设 计 视 图 建 模 时.通 常 冇 三 种 使 用 方 式:图 32 状态图 (1对系统的词汇建模 对系统的词汇建模涉及做出这样的决定:哪些抽象是考虑中的系统的一部分.哪些 抽彖处于系统边界Z外.用类图详细描述这些抽線和它们的职责。(2)对简单协作畳模 协作是一些共同工作的类、接口和
15、其他元素的群体.该群体提供的一些合作行为强 于所有这些元索的行为Z和。例如肖对分布成系统的事务语义建模时,不能仅仅盯着一 个单独的类来推断要发生什么,而要有相互协作的一组类来实现这些语义用类图对这 组类以及它们Z间的关系进行可视化和详述(3对逻辑数据库模式建模 将模式看作数据库的概念设计的蓝图。在很多领域中,耍在关系数据库或面向对象 数据库中存储永久信息。可以用类图对这些数据库的模式建模。本题主要使用类图对系统词汇进行建橫.题目中已经给出了类图的基本框架及部分 的类.要求考生将类图中其余的类补充完整在解答这类题目时,需要细心阅读说明中 的文字,并记录和整理其中出现的名词这些名词将来有可能成为类
16、。其次应特别关注 类图中出现的特殊关联关系,如继承关系、聚集/组装关系等.在本题中,首先考査类图中的Customer、C2和Doctor这三个类。由说明可知,在 网上购药时.顾客与医生之间不会血接发生交互.而是通过顾客持有的“处方”而发生 C2与C5之间绘聚集关系,其中C2表示整体类,C5表示部分熹 田于已绘确定了 C2表示的是“处方”类,那么C5表示就应该是处方所包含的内容.处方中包含的是药 品.所以C5对应的类应该是“处方上的药品”。下而来分析类图中的继彥关系.继承关系表示类之间的“一般/特殊”关系。C1表 示一般类,C3和C4是C1的两个具体类:并且这三个类与Customer之间具有组装
17、关系.那么在说明中出现的所有名诃词汇中,具有明显的-般/特殊关系的就足“付款方武”、“信用卡”和“支付宝账户”“信用卡”和“支付宝账户”是具体的付款形式,当顾客付 款的时候选择二者中的一个.而且毎一次村款都与一个特定的顾客柱卩类Customer的一 个实例)相关,没有顾客就不会发生付款行为。所以C1对应的类应该足“付隸方式”、C3和C4分别对应的足类“信用卡”、“丸付宝账户”。多重度表加一个类的实例与多少个另一个类的实例发生关阪-因此.在确定多宦度 时需竪关注说明中关于类之何关系的描述.首先来看C2和C5,这两个类之间是暴集关乘。前面己经确定了 C2和C5分别对应 类“处方”和“处方上的药品”
18、。一张处方上应包含1种或赛种药品。这样很容易确定出 处的多重度应该为0.“而一张处方必定是由一名医生开具的,所以(6)处 的多重度应该为1。“顾客”与“处方”之间的关系如下&一个顾客可以持有多张处方来买药,也可以 没有处方,这样就不会发生购买行为。所以(2)处的多重度应该为().*而每张处方一 定属于一名顾客,所以(1)处的多重度应该为1.【问题2】状杰关注系统的动态裡图.它注觅描述可能的状态序列,以及衽特定状态下对象 对外都离做审件的响应动作.本题考査的是类“处方”的对象的状杰变化.关于网上药店对“处方的处理流程,在说明的(4脸证处方中,給出了详细的描述.对该描述进行分析之后,可以用下面的
19、寰来说明“处方”在整个验证流程中所经历的状态.处方状态 产生该状杰的原因 总证结累 医生信息无效 医生信息不正确 不通过 审核中 医生俗恵正确 无效处方 医生回复处方无效 不通逮 无法审檢 匱生没有在7天内给出褂且 不11过 准许付款 医生在7天内館岀确认答复 下一步工作就足把上狡中的信息与题中的状态图对应起来,关联.由此可以确定C2对应的类应该是“处方”.由说明町知,处方提交后的第一步操作就热核实医生信息,而这个慄作会产生两种 结果:医生付息正确,或者不正确。医生信息不正确会使处方的状态变更为“医生信息 无效”,并导致购买行为被取消,即表中的第一行.对于这种情况,“处方”的状态变更 轨迹为:
20、处方已提交一医生信息无效一结来。而在状态图中与这条轨迹匹配的狀态序列 就是:处方己提交一S3结束.由此可以确定,S3对应的就是状态“医生信息无效”,而(7)对应的迁移就显“医生信息不正确”.相应地,就町以判断岀(8)应该代表的是核实保生信息的另一种结果,因此C8)对应的迁移应该是“医生信息正确”.由上表可知,医生信息正确时,处方状态会变更为“审核中”,这样S1对应的状态就是“审核中”.但处方在状态“审核中”时,实际上会有三个后续状态:一个赴图中己经给出的“准 许付款”,另外两个是“无效处方”和“无法审核”。而产生逮两个状态的壕園分别楚“医 生冋宜处方无效”和“医生没有在7天内给出答复”.由此得
21、出,(9)对应“厌生回复处 方无效”,S4对应状态“无效处方”;(10)对应“医生没有在7天内给出答复”,S2对 应“无法审核”.如果S2为状态“无效处方”,那么(10)就对应着“医生回复处方无效”;S4对应 状态“无法审核”,那么(9)就对应者“医生注有在7天内给出答复【问题3】在UML中,|和Q分别表示组合(composition)和聚合(aggregation).两者的主 要区别是,在组合关系中,整体对繚与部分对像具有同一的生存周期。当養体对象不存 在时,部分对象也不存在。而在聚合关系中,对整体对象与部分对彖没有这样的耍來。S1、S3、(7)、(8)同上参考答案【词题 C1:付款方式 C
22、2:处方 C5:处方上的药品(或药品)(1)1(2)0.*(4)1(5)0【问题2】S1:审核中S2:无法审核(7)医生值息不正确(9)医生回复处方无效 或者:.S2:无效处方 S4:无法审核(9)医生没有在7天内给出确认答复 C3t信用卡 C4:支付宝胫户(C3,C4可以互换)(3)1(6)1 S4:无效处方 S3:医生们息无效(8)医生信总正确 GO)医生没有在7天内给出确认答复 C10)医生回复处方无效【问题3】f 表示纽合(composition).Q 表示聚合(aggregsHion).在组合关系中,整体对纵与部分对象具有同一的生存周期。当整体对象不存在时,部分对象也不存在.(1分)
23、而在聚合关系中,对整体对象与部分对彖没有这样的要求.试懸四(共15分)阅读下列说明和C代码,回答问题1至何题3,將解符写在答題纸的对应栏内.【说明】堆数据结构定义如下:对于刃个元素的关键子序列即勺,耳当且仅当满足下列关系时称其为堆。ai V a2i 或 aia2i Ql&角1 ai 如 在一个堆中,若堆顶元素为最大元素,则称为大顶堆;若堆顶元素为最小元素,则 称为小顶堆堆常用完全二叉树表示,图4-】是一个大顶堆的例子。堆数据结构常用于优先队列中,以维护由一组元素构成的集合。对应于两类堆结构,优先队列也有最大优先队列和最小优先队列,其中最大优先队列采用大顶堆,最小优先 队列釆用小顶堆.以下考虑最
24、大优先队列.假设现已建好大顶堆A,且已经实现了调镣堆的的数heapify(A,n,index),下面将C代码中需婴完善的三个函数说明如下:(1)hcapMaximum(A):返回大顶堆A中的坦大元素.(2)hcapExtractMax(A):去掉并返回大顶堆A的疑大元素,将最后一个元素“提前”到堆顶位置,并将剩余元素调舉成大顶堆。3)maxHcapInscrt(A,key);把元素key插入到大顶堆A的最后位宜,再将A调整 成大顶堆。优先队列采用顺序存储方式.Jt存储结构定义如下:其中,m,2,%Idefine PARENT)i/2 typedef struct arrayf int int_
25、array(0);Aarray_9ize;heapify(A/A-array_sze/O);将剌余元素调SE成夬厦堆 zeturn max;1(3)函数maxHcapInsert int maxHeapInsert(ARRAY*Ar int key)int ir ep;if(A-array_size A-capacity)(/存储空间的容呈不够时扩充空何 P realloc(A-int_array#A-capacity*sizeof(int);if(!p)return-1;A-int_arxay p;A-capacity=2 A-capacity;)A-arrav size 1-(3);whi
26、le(i 0&(4)(A-int array(i=Aint_arrayPARENT(i;i PARENT(1););return 0;【问题1】(10分)根据以上说明和C代码,填充C代码中的空(】(5)【问题2J(3分 根据以上 C 代码,函数 hcapMaximum,hwpExtractMax 和 maxHcapInscrt 的时间复 朵炭的紧致上界分别为(6)、(7)和(用O符号表示).【问题3】(2分 若将元素 10 描入到堆 A=15,13,9,5,12,8,7,4,0,6,2,1中,调用 maxBeapInsert 函数进行操作,则新插入的元索在堆A中第(9)个位置(从1开始九 试题
27、四分析 本题考査算法设计与分析以及C程序设计语吉的相关知识.【问趣11 根据题干说明,函数heapMaximum返回大顶堆A的最大元索,即堆顶元索,因此 空(1)处应填 A-int_array0 函数heapExtractMax(A)取出大顶堆A的最大元素.将最后一个元素“提前”到堆 顶位負,并将剩余元素调整成大顶堆。因此在将堆顶元薫賦给max后,应该将堆的最后 个元素移到堆顶位置,即空(2)处应填 A-int_arrayO-A-int_arrayA-array_size-1.函数maxHeaplnserKA,key)把元索key捆入到夬顶堆A的最后位置,再将A调整成 大顶堆。该函数前面的代码
28、行考虎的是当存储空间不够时扩展存储空间.而后面是根据 该函数的定义实现的问题求解的算法表示,A-array_sizc+;示为堆的规模增加1,i 表示堆的最后一个元索的下标,即新插入的元素的下标,应该为A-array_sizc-1#while 循环是自下而上调整堆.当还没有到堆顶位宜,且新描入的元索大于其父亲元素,即 A-int_arrayPARENT(i)int_arrayi=key.【问题2】本问题考查算法的时间复杂度。根据上述C代码.函数heapMaximum返回数组A的第1个元素,闵此为常数时间 即 0(1).函数heapExtractMax首先将数组A的第1个元索的值放到变量max中,
29、然后将最 后一个元素提到堆顶,巅后再逬行堆的调整,因此该时何复杂度实际上是调整堆的时间 复杂度,即0伽)函数maxHcapInscrt将一个元素key插入到堆A中,具体的过程为先将堆的规模增 加I,然后将元素插入到堆的最后一个位迓,最后自下而上调整该元索,其时间复杂度 为堆(二叉树)的高度,即【问题3】将元素 10 插入到堆 A=(!S,13,9.5.12,8,7,4,0,6,2,I)中根据 maxHeap【nsert 函数进行操作.则过程如下图(a)(c)所示.U)Cb U)薪插入的元素10在堆A中处于第3个位置,15和13分别处于第1和第2个位置.参考答案【问题I】(1)A-int_arr
30、ay0(2 A-int array03 A-int_array(A-array_size-1 (3 A-array_size-1 A-int_arrayPARENT(i)int_arrayi key【问题2】(6 0(1)(7)O(lgn)(8)O(lgn)【问题3】(9 3 试题五(共15分)阅读下列说明和CI代码,将应填入处的字句写在答题低的对应栏内.【说聘】某公司的组织结构图如图51所示,现釆用组合(Composition)设计模式来构造该 公司的组织结构,得到如图5-2所示的类图。其中Company为抽象类,定义了在组织结构图上漆加(Add)和删除(Ddg)分 公即办半处或者部门的方法
31、接口。类ConcreteCompany衣示具体的分公司或者办事处,分公闻或办事处下可以设置不同的部门。类lIRDepartment和FinanceDqartnient分别丧 示人力55源部和财务部.name)(1)-name;/划加子公司.办书处或部门 IJ fif除子公司、办事处我棉门【C卄代码】include Iinclude i include strin using namespace std;class Company protected:string name;图5】组织结构图 图52类图 public;Company(string class Cone re t eCompany
32、:public Company private:llst children;/存鴿子公可、办爭处或那门 public:Concretecompany(string name):Company(name)void Add(Company*c)(5),pu9h back(c);void Delete(Company c)(6)remove(c);;class HRDepartment:public Company public:HRDepartnent(string name):Company(na.ne)(/JC他代5省咯);class Fin&nceDepartment:public Comp
33、any public:FinanceDepartnent(string name):Company(name)()/其他代码省昭);void main()ConcretECompany root=nek ConcreteCompany北京总公可J;root-Add(new HRDepartment(n总公可人力资源部”);root-Add(new FinanceDepartment(总公司财务部”);ConcreteCompany comp new ConcreteCompany(上海分公可;comp-Add(new HRDepartment 分公可人力资漁部料);comp-Add(new F
34、inanceDepartment(-上海分公司財务部”);ConcreteCompany compl new ConcreteUoinpany 广南京办事处;compl-Add(new*HRDepartment(-南京办事处人力资源部”);compl-Add(nev FinanceDepartment 京办爭处财务部);;其他代码省路 试题五分析 Composite模式将对象组合成树形结构以表示“整体部分”的层次结构,其中的组 合对彖使得用户可以组合基元对彖以及其他的组合对彖.从而形成任总复杂的结构.Composite模式使得用户对单个对象和组合对彖的使用具有一致性.Composite模式的结
35、构如下图所示 其中:Component为组合中的对象声明接口,在适当的情况下,实现所有类共有接 口的缺省行为,声明一个接口用于访问和管理Component的子部件:类Leaf在组合中表示叶节点对彖,叶节点没有子节点:并在组合中定义图元对 彖的行为:类Composite建义有子部件的那些部件的行为,存储子部件,并在Component 接口中实现与子部件有关的操作:类Client通过Component接口操纵组合部件的对象。下列情况可以使用Composite模式:(1表示对象的轅体部分层次结构:(2)希望用户忽略组合对象与单个对集的不同,用户将统一地使用组合结构中的所 有对象.图5-2中的Comp
36、any对应的就是上图中的类Comporent,ConcreteCompany对应的 是类 Composite:而 1:图中的 FinanccDcpartment 和 IIRDcpartment 粉演的就是类 Leaf 的 角色。由于类Company的作用是为茸子类提供统一的操作接口,所以将其定义为抽象类.在C+中,抽彖类的定义是:至少包含一个纯虚拟函数朋类.而纯虚拟函数是没有函数 体的虚拟函数,其作用是为子类提供统一接口.若要使用纯虚拟曲数,必须在子类中对 其进行靈置。定义纯虎拟函数的语法为:virtual 返回值函数名(参数列表)-0;空(1)(3)考查的址如何定义抽象类Company。Co
37、mpany提供了两个方法接口 Add和Delete,即该类中应包含两个纯虚拟曲数如何确定Add和Delete的函数瓯型呢?这要倍助F Company的子类。因为子类重置父类宜义的虚拟曲数时,不施改变其接口定义.所以从ConcrcteCompany中的Add和Delete方法就能够确定出空(2)和(3)处应 分别填入virtual void Add(Company*c)=0和virtual void Delete(Company*c)=0.空(1)考察的是在构造曲数中如何给数据成员赋初值,当构造函数的参数与类的数据成 员同名时.可以借助this荷针来进行区别,因此空(1)处应填入this-nam
38、eo 空(4)(6)考査对模式中Composite节点的定义。由图5-2可知,ConcreteCompany 与Company Z间是聚集关系,即ConcrgCompany的实例中包含多个Company的子类 的实例.为了衷示这种聚集关系,使用了 C卄标准类库中的类模板list。C-的类模板必 须在实例化之后才能使用。实例化类模板时,要给出类型实参。曲于children表示的是 类Company的子类的实例集合,所以空(4)处应填入Company*.空和Add(comp)o而“南京办事处”是以“上海分公司”为根的子树中的节点,应插入 在“上海分公可”这个节点的下面对彖comp农示的是以“上海分
39、公司”为根的子树 的根节点.所以空(8)处应该填入comp-Add(compl).参考答案(1)this-namc(2)virtual void Add(Company*c)s0(3)virtual void Delete(Company c)0.(4)Company*(5)children(6)children(7)root-Add(comp)(8)comp-Add(compl)试麵六(洪15分)阅读F列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】某公司的组织结构图如图&1所示,现采用组合(Composition设计模式来设计,得到如图Q2所示的类图。其中Comp
40、any为抽象类,定义了衽组织结构阳上添加(Add)和删除(Delete)分 公司/办事处或者部门的方法接口.类ConcreteCompany具体的分公司或者办班处,分公司或办事处卜可以设置不同的部门.类HRDcpartment和FinanceDepartmcnt分别衣 示人力资湖部和财务部。【Jaw代码】inport java.util.:Cl)Company protected String name;public Company(Strinq name 2)a public abstract void Add(Company c);public abstract voxd Delete(C
41、ompany c)class ConereteCompany extends Company private List children*new ArrayList0;u存榛子公司、办审处或部门 public ConcreteCompany(String namel(super(name);publXu void Add(Company c)(&)ydd(;1name;/均加子公同.彷事处我部门/删除子公可.办事处或部门 99 64组织縮构用 图心2类图 public void Delete(Company c)(6)remove(c);)class HRDepartment extends
42、Company public HRDepartment(String name)super(name);/英他代码省賂 class FinanceDepartment extends Company public FinanceDepartment(String name)super(name);其他代码省珞 public class Test public static void main(String(args)ConcreteCompany root-new ConcrtCompany 广北京总公司);root.Addtnev HRDepartment(w总公司人力资源部);root.A
43、dd(nev FinanceDepartment(11 总公司财务部11);ConcreteCompany comp new ConczeteCompany 海分公可;comp.Add(new HRDepartment(上海分公司人力聂源部”);comp.Add(new FinanceDepartment(*上海分公司财务部*);(7);ConcreteCompany cotnpi new ConcreteCompany(w 京办事处 compl.Add(new HRDepartment C哺京办事处人力资源部T);compl.Add(new FinanceDepartment(HiW京办事处
44、财务65);(8);其他代码省略 试题六分析 Composite模武将对欽组合成树形结构以衷示“整体.部分”的层次结构,其中的组 合对象使得你可以组合基元对象以及其他的组合对象,从而形成任意复杂的结构.Composite模式使得用户对单个对象和组合对篆的使用具有一致性。Composite模式的结构如下图所示.其中:类Component为组合中的对彖声明接口,在适当的情况,实现所有类共有接 口的缺省行为,声明一个接口用于访问和行理Component的子部件:类Leaf在组合中表示叶节点对象,叶节点没有子节点;并在组合中定义图元对象的行为;类Composite定义有子部件的那些部件的行为,存储子部
45、件,并在Component 接口中实现与子部件有关的擾作:类Client通过Component接口操纵组合部件的对象。下列情况可以使用Composite模式,(1)表示对象的整体部分层次结构:(2)希望用户忽賂组合对象与单个对象的不同,用户将统一地使用组合结构中的所 有对象.图卜2中的Company对应的就是上图中的类Component.ConcrctcCompany对应的 是类Composite;而上图中的Finance Department和HRDqjartment扮演的就是类Leaf的 角色。由于类Company的作用定为其子栄捉供统一的操作接口,所以将耳定义为抽彖类.空(1)(2)考杳
46、的是如何定义抽象类Company。在Jas中,可以通过在类名之前加 abstract关键字来毬义抽象类,因此空(1)处应填入abMract class。空(2)考查的定在 构址函数中如何给数据成员赋初值。肖构造函歎的参数与类的数拥成员同名时,可以借 助this指针来进行区别,因此空(2)处应填入this.name.空(3)(6)考杳对模式中Composite节点的定义。由图5-2可知,ConcreteCompany 与Company之间是聚集关系,即ConcreteCompany的实例中包含多个Company的子类 的实例。为了衣示这种聚集关系,使用了 Java包中的类模板List,类模板必须
47、在实例化 之后才能使用。实例化类模板时,要给出类規实参。由于children 示的是类Company 的子类的实例集合,所以空(3)和C4)处都应填入Company。空(5)和(6)处分别 使用了 List中提供的方法来实现添加和测除子公司、办事处或部门。children是list的实 例,所以空C5)和(6)处都应填入children.空(7)和(8)考査的是组合模式的实用.由阳61可知,组织结构图的根目录是“北京总公司”,“上海分公司”应该插入在根目录之下所以空(7)处应找入rooLAdd(comp),而“南京办爭处”是以“上海分公可”为根的子树中的节点应插入在“上規分公可”这个节点的下面。对象comp表示的是以“上祥分公丽”为根的子树的根 节点,所以空(8)处应该填入comp.Add(compl)e(1)abstract class(2)this.name(3)Company(4)Company(5)children(6)children(7)root.Add(comp)(8)comp.Add(compl)
限制150内