软考下午题--UML建模练习(五)
例:阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
某公司欲开发一个管理选民信息的软件系统。系统的基本需求描述如下:
(1)每个人(Person)可以是一个合法选民(Eligible)或者无效的选民(Ineligible)。
(2)每个合法选民必须通过该系统对其投票所在区域(即选区,Riding)进行注册( Registration)。每个合法选民仅能注册一个选区。
(3)选民所属选区由其居住地址(Address)决定。假设每个人只有一个地址,地址可以是镇(Town)或者城市(City)。
(4)某些选区可能包含多个镇;而某些较大的城市也可能包含多个选区。
现采用面向对象方法对该系统进行分析与设计,得到如图1-1所示的初始类图。
【问题1】
根据说明中的描述,给出图1-1中C1~C4所对应的类名(类名使用说明中给出的英文词汇)。
【问题2】
根据说明中的描述,给出图1-1中M1~M6处的多重度。
【问题3】
对该系统提出了以下新需求:
(1)某些人拥有在多个选区投票的权利,因此需要注册多个选区;
(2)对于满足(1)的选民,需要划定其“主要居住地”,以确定他们应该在哪个选区进行投票。
为了满足上述需求,需要对阁3-1所示的类图进行哪些修改?请用100字以内文字说明。
解析:
【问题1】这道题就是因为我问题一答错了,导致后面很多都错了,所以有连锁反应,问题1和问题2绝对不能打错,这样会导致后面的题目连续答错的。
先说下多重度。类A->类B 一个类A对应0..1类B,那么这个0..就写在B的那一侧。一个类B对应0..1类A,那么这个0..1就写在A的那一侧。
对于C1和C2的选择,我们可以用代入法,带进去根据多重度进行验证。
所以
C1:Address C2:Riding
【问题2】
多重度有
1:一个
1…1:一个
0..*:零个或多个
*:零个或多个
1..*:一个或多个
0..1:零个或一个
对于联系的多重度的判定,应注意题目中关于不同概念之间关联数量的描述。
M1、M2这一对多重度,刻画的是“Person”和“Address”之间的关系。由【说明】中的“假设每个人只有一个地址”,可以得出M1和M2处分别为1和*。
M3和M4描述的是合法选民与选区之间的关系。由【说明】中的“每个合法选民仅能注册一个选区”,可知M3和M4分别为*和1。
M5和M6描述的是选区和地址之间的关系。在【说明】中假设,每个合法选民在选区中只注册一个地址,因为M5和M6处分别为*和1。
【问题3】
(1) M1处改为1..*,在Registration类中增加address属性,指明注册时使用的是哪个地址。
(2) 增加一个类“主要居住地”,作为类Address的子类;类Person与类“主要居住地”之间具有关系联系,且每个人只有一个主要居住地。
解析:需求1:某些人拥有在多个选区投票的权利,因此需要注册多个选区。由于选区由住址确定,能够在多个选区注册,意味着其居住地址不止一个。所以“Person”和“Address” 之间的多重度会发生变化。在选区注册时所使用的地址也不唯一了,因此需要增加属性来记录在注册选区时所使用的地址,从而对C2和C4之间的关联类进行修改,增加其属性。
需求2:对于满足需求1的选民,需要划定其“主要居住地”,以确定他们应该在哪个选区进行投票。这个需求对选民的地址信息提出了更为详细的需求,按照面向对象方法将“不变部分和可变部分分离”的思想,在类图中增加一个新的类,并采用继承机制继承原有Address类中的共性元素。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!