系列文章目录
1.【软考之软件设计师】PPT课件
2.【软考之软件设计师】学习笔记
3.【软考之软件设计师】上午题—信管网(每天更新)
4.【软考之软件设计师】上午题—希赛网(每天更新)
5.【软件设计师真题】下午题第一大题—数据流图设计
6.【软件设计师真题】下午题第二大题—数据库设计
7.【软件设计师真题】下午题第三大题—UML 分析与设计
8.【软件设计师真题】下午题第四大题—算法设计
9.【软件设计师真题】下午题第五大题—面向对象程序设计
历年考题主要集中在用例图、类图、顺序图及状态图上,尤其是类图、类的属性和方法的识别,以及类间的各种关系需要重点掌握。
一、真题一
1、题目
某软件公司欲设计实现一个虚拟世界仿真系统。系统中的虚拟世界用于模拟现实世界中的不同环境(由用户设置并创建),用户通过操作仿真系统中的 1~2 个机器人来探索虚拟世界。机器人维护两个变量b1和b2,用来保存从虚拟世界中读取的字符。
该系统的主要功能描述如下,
(1)机器人探索虚拟世界(Run Robots)。用户使用编辑器(Editor)编写文件以设置想要模拟的环境,将文件导入系统(Load File)从而在仿真系统中建立虚拟世界(Setup World)。机器人在虚拟世界中的行为也在文件中进行定义,建立机器人的探索行为程序(Setup Program)。机器人在虚拟世界中探索时(Run Program),有两种运行模式。
① 自动控制(Run):事先编排好机器人的动作序列(指令(Instruction)),执行指令,使机
器人可以连续动作。若干条指令构成机器人的指令集(Instruction Set)。
② 单步控制(Step):自动控制方式的一种特殊形式,只执行指定指令中的一个动作。
(2)手动控制机器人(Manipulate Robots)。选定1个机器人(Select Robot)后,可以采用手动方式控制它。手动控制有4种方式。
①Move:机器人朝着正前方移动一个交叉点。
② Left:机器人原地沿逆时针方向旋转 90 度。
③ Read:机器人读取其所在位置的字符,并将这个字符的值赋给 b1;如果这个位置上没有字符,则不改变 b1 的当前值。
④ Write:将 b1中的字符写入机器人当前所在的位置,如果这个位置上已经有字符,该字符的值将会被 b1 的值替代。如果这时 b1 没有值,即在执行 Write 动作之前没有执行过任何 Read 动作,那么需要提示用户相应的错误信息(Show Errors)。
手动控制与单步控制的区别在于,单步控制时执行的是指令中的动作,只有一种控制方式,即执行下个动作;而手动控制时有4种动作。
现采用面向对象方法设计并实现该仿真系统,得到如图 3-2所示的用例图和图 3-3 所示的初始类图。图 3-3 中的类“Interpreter”和“Parser”用于解析描述虚拟世界的文件以及机器人行为文件中的指令集。
【问题 1】(6 分)
根据说明中的描述,给出图 3-2 中 U1~U6 所对应的用例名。
【问题 2】(4 分)
图 3-2 中用例 U1~U6 分别与哪个(哪些)用例之间有关系,是何种关系?
【问题 3】(5 分)
根据说明中的描述,给出图 3-3 中 C1~C5 所对应的类名。
2、解析
本题考查面向对象分析中的用例图和类图,用例图描述了一组用例、参与者及它们之间的关系,包括以下几个部分:用例(Case)、参与者(Actor)。
【问题1】
根据系统的主要功能描述可知,机器人在虚拟世界中探索时(Run Program),有两种运行模式:自动控制(Run)和单步控制(Step)。所以 U1/U2为 Run、Step;根据手动控制机器人(Manipulate Robots),手动控制有 4种方式,由描述可知 U3 为 Write,U4/U5/U6为 Move、Left、 Read。
【问题 2】
UML,用例图中有包含(include)、扩展(extend)和泛化(generalization)三种关系用例 U1 和 U2 是“Run Program”用例的继承,且表现出更特别的行为,所以 U1 和U2 与“Ru Program”之间是实际应用中很少使用的泛化关系;U3~U6 用例是“Select Robot’用例中相对独立且可选的动作,是对“SelectRobot”用例的功能扩展,即扩展关系
【问题 3】
由图 3-3 中的类“Interpreter”和“Parser”是用于解析描述虚拟世界的文件以及机器人行为文件中的指令集可知,C4 为机器人的指令集(Instruction Set),C3 为机器人动作序列(指令(Instruction));由功能描述中用户使用编辑器(Editor)编写文件,可知 C1 为文件类,由 C2类聚集到 C1 即上面分析的文件类,可知 C2为机器人在虚拟世界的行为,C5 则表示整个仿真系统。
3、答案
【问题 1】
U1/U2: Run、Step.
U3:Write.
U4/U5/U6: Move、Left、Read.
【问题 2】
U1、U2和Run Program有泛化关系
U3、U4、U5、U6和 Select Robot有扩展关系
【问题 3】
C1:文件。
C2:机器人在虚拟世界的行为
C3:Instruction.
C4: Instruction Set.
C5:仿真系统。
二、真题二
1、题目
某出版社拟开发一个在线销售各种学术出版物的网上商店(ACShop),其主要功能需求描述如下。
(1)ACShop 在线销售的学术出版物包括论文、学术报告或讲座资料等。
(2)ACShop的客户分为两种:未注册客户和注册客户。
(3)未注册客户可以浏览或检索出版物,将出版物添加到购物车中。未注册客户进行注册操作之后,成为 ACShop 注册客户。
(4)注册客户登录之后,可将待购买的出版物添加到购物车中,并进行结账操作。结账操作的具体流程描述如下。
① 从预先填写的地址列表中选择一个作为本次交易的收货地址。如果没有地址信息则可以添加新地址。
② 选择付款方式。ACShop 支持信用卡付款和银行转账两种方式。注册客户可以从预先填写的信用卡或银行账号中选择一个付款。若没有付款方式信息,则可以添加新付款方式。
③ 确认提交购物车中待购买的出版物后,ACShop 会自动生成与之相对应的订单。
(5)管理员负责维护在线销售的出版物目录,包括添加新出版物或者更新在售出版物信息等操作。
现采用面向对象方法分析并设计该网上商店 ACShop,得到如图 3-4 所示的用例图和图 3-5 所示的类图。
【问题 1】(4 分)
根据说明中的描述,给出图 3-4 中(1)~(4)所对应的用例名。
【问题 2】(4 分)
根据说明中的描述,分别说明用例“添加新地址”和“添加新付款方式”会在何种情况下由图 3-4 中的用例(3)和(4)扩展而来?
【问题 3】(7 分)
根据说明中的描述,给出图 3-5 中(1)~(7)所对应的类名。
2、解析
【问题 1】
未注册客户可以浏览或检索出版物,将出版物添加到购物车中:而注册客户在将出版物添加到购物车之后还可以进行结账操作,因此有扩展关系:
而结账又分多个步骤:选择收货地址,选择付款方式。如果没有收货地址,则添加新地址;如果没有付款方式信息,可以添加新的付款方式,显然空(3)、空(4)所对应的用例为“选择收货地址”和“选择付款方式”。
【问题 2】
题干中,在描述具体结账流程时指出,在选择收货地址时,如果没有地址信息,则可以添加新地址;在选择付款方式时,若没有付款方式信息,则可以添加新付款方式。
【问题 3】
类图中,关联关系,这是一种拥有的关系,它使一个类知道另一个类的属性和方法,如老师与学生,丈夫与妻子。关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。泛化关系,这是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。聚合,这是整体与部分的关系,且部分可以离开整体而单独存在。如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。网上商店由出版物目录、管理员、购物车和客户组成。放在购物车中的是“待购买的出版物”:出版物目录是由在线销售的所有学术出版物组成的,而学术出版物又分为论文、学术报告或讲座资料等,得到答案并不难,
3、答案
【问题 1】
(1)添加出版物到购物车
(2)结账。
(3)选择收货地址
(4)选择付款方式
【问题2】
当选择收货地址时,若没有地址信息,则使用扩展用例“添加新地址”来完成新地址的添加。
当选择付款方式时,若没有付款方式信息,则使用扩展用例“添加新付款方式”来完成新付款方式的添加。
【问题 3】
(1)出版物目录。
(2)待购买的出版物。
(3)学术出版物。
(4)~(6)论文、学术报告、讲座资料,
(7)订单。
三、真题三
1、题目
某物品拍卖网站为参与者提供物品拍卖平台,组织拍卖过程,提供在线或线下交易服务。网站主要功能描述如下。
(1)拍卖参与者分为个人参与者和团体参与者两种。不同的团体也可以组成新的团体参与拍卖活动。网站记录每个参与者的名称。
(2)一次拍卖中,参与者或者是买方,或者是卖方
(3)一次拍卖只拍出来自一个卖方的一件拍卖品;多个买方可以出价;卖方接受其中一个出价作为成交价,拍卖过程结束。
(4)在拍卖结算阶段,买卖双方可以选择两种成交方式:线下成交,买卖双方在事先约定好的成交地点,当面完成物价款的支付和拍卖品的交付;在线成交,买方通过网上支付平台支付物价款,拍卖品由卖方通过快递邮寄给买方。
一次拍卖过程的基本事件流描述如下。(1)卖方在网站上发起一次拍卖,并设置本次拍卖的起拍价。(2)确定拍卖标的以及拍卖标的保留价(若在拍卖时间结束时,所有出价均低于拍卖标的保留价,则本次拍卖失败)。
(3)在网站上发布本次拍卖品的介绍。
(4)买方参与拍卖,给出竞拍价。
(5)卖方选择接受一个竞拍价作为成交价,结束拍卖。
(6)系统记录拍卖成交价,进入拍卖结算阶段。
(7)卖方和买方协商拍卖品成交方式,并完成成交,
现采用面向对象方法对系统进行分析与设计,得到如表 3-2所示的类列表以及如图 3-6所示的类图,类中关键属性与方法如表 3-3 所示。
【问题 1】(7 分)
根据说明中的描述,给出图 3-6 中(1)-(7)所对应的类名(类名使用表 3-2 中给出的序号)。
【问题 2】(5 分)
根据说明中的描述,确定表 3-3 中的属性/方法分别属于哪个类(类名、方法/属性名使用表 3-2、表 3-3 中给出的序号)。
【问题3】(3 分)
图 3-6采用了何种设计模式?以100字以内文字说明采用这种设计模式的原因。
2、解析
【问题1】
参与拍卖的为“参与拍卖者”,拍卖参与者又可分为个人参与者和团体参与者两种显然(1)为“参与拍卖者”,属于类 C5,(2)为“团体参与者”,属于类 C9,(3)为“个人参与者”,属于类 C7。拍卖的对象为拍卖品,(7)为“拍卖品”,属于类 C2。拍卖成交后,在结算时有两种成交方式:线下成交和在线成交,显然(4)为“成交方式”,属于类 C6,(5)、(6)为“线下成交”,属于类 C8、“在线成交”,属于类 C10。
【问题 2】“用户名称”name 属性应属于“拍卖参与者”类 C5;“拍卖品描述”description 属性应属于“拍卖品”类 C2;“拍卖的起拍价”minBidPrice 属性、“拍卖成交价”agreePrice属性、“拍卖标的保留价”bidPrice 属性应属于“拍卖活动”类 C3;“线下成交地点”address属性应属于“线下成交”类 C8;“卖方网上支付账户名”sellerAccount 属性、“买方邮寄地址”buyerAddress 属性应属于“在线成交”类 C10;“为拍卖品出竞拍价”placeBidForAuction方法应属于“一次拍卖中的买方”类 C12;“发起一次拍卖”sellNewArticle 方法应属于“一次拍卖中的卖方”类 C1。
【问题 3】略。
3、答案
【问题1】
(1)C5.
(2)C9.
(3)C7.
(4)C6.
(5)(6)C8、C10.
(7)C2.
【问题 2】
MI:C5.
M2:C2.
M3:C3.
M4:C3.
M5:C3.
M6:C8.
M7:CI0.
M8:C10.
M9:C12.
M10:C1.
【问题3】
组合模式,在本题中由于拍卖者分为个人参与者和团体参与者两种,而团体也可以组成新的团体参与拍卖活动。这样的整体-部分关系,适合于使用组合式表达。
四、真题四
1、题目
某公司欲开发一个管理选民信息的软件系统。系统的基本需求描述如下。
(1)每个人(Person)可以是一个合法选民(Eligible)或者无效选民(Ineligible)。
(2)每个合法选民必须通过该系统对其投票所在区域(即选区,Riding)进行注册(Registration)。每个合法选民仅能注册一个选区。
(3)选民所属选区由其居住地址(Address)决定。假设每个人只有一个地址,地址可以是镇(Town)或者城市(City)。
(4)某些选区可能包含多个镇;而某些较大的城市也可能包含多个选区。
现采用面向对象方法对该系统进行分析与设计,得到如图3-7所示的初始类图。
【问题 1】(8 分)
根据说明中的描述,给出图 3-7 中 C1~C4 所对应的类名(类名使用说明中给出的英文词汇)。
【问题 2】(3 分)
根据说明中的描述,给出图 3-7 中 M1~M6 处的多重度。
【问题 3】(4 分)
现对该系统提出了以下新需求。
(1)某些人拥有在多个选区投票的权利,因此需要注册多个选区。
(2)对于满足(1)的选民,需要划定其“主要居住地”,以确定他们应该在哪个选区进行投票。
为了满足上述需求,需要对图3-7所示的类图进行哪些修改?请用100字以内文字说明。
2、解析
【问题 1】
由“每个人可以是一个合法选民或者无效选民”可知 C3 和C4 是这两者中的一个,由C4和 C2关联可知,C4 为合法选民(Eligible),则 C3 为无效选民(Ineligible)。由 City 和 Town共同指向 C1以及描述“选民所属选区由其居住地址(Address)决定。假设每个人只有一个地址,地址可以是镇(Town)或者城市(City)”可知,C1 应该为 Address。由描述“每位合法选民必须通过该系统对其投票所在区域(即选区,Riding)进行注册(Registration)”以及 C4指向C2和 City、Town 同时指向 C2 可知,C2为 Riding,即选区。
【问题 2】
UML,中关联的多重度是指一个类的实例能够与另一个类的多少个实例相关联。具体的取值意义如下。
0…1:0 个或1个。
1:只能1个。
0… * :0个或多个。* :0个或多个。
1…* :1个或多个。
由描述“每个人只有一个地址”可知,MI为1;一个地址可以有0个或多个人,因此M2 为*;一个选区可以有0个或多个选民,一个选民只在一个选区投票,因此,M3为*,M4 为 1;由“某些选区可能包含多个镇”可知每个选区可包含0个或多个地址,M5 应为*;
由于每个选民只有一个地址,每个地址属于一个选区,因此M6为1。
【问题 3】
若对系统提出新的要求:①某些人拥有在多个选区投票的权利,因此需要注册多个选区;②对于满足(1)的选民,需要划定其“主要居住地”,以确定他们应该在哪个选区进行投票。则将 M1与 M4 由1修改为 1.*
3、答案
【问题1】
Cl:Address,
C2:Riding.
C3:Ineligible.
C4:Eligible.
【问题2】
MI:1
M2: *
M3: *
M4:1
M5: *
M6:1
【问题 3】
将M1与 M4 由1修改为 1…*