分析“关联”需仔细

  程序课程辅助考核系统有4个类,分别是:考生类,试卷类,考题类,考空类,它们有如下关系:

 

 

  可以看出,一个学生拥有一张卷子,一张卷子有若干个考题,一道考题有若干个考空(填空题)。

  这里有一点,reTxt是考生作答,这里把它作为了考空(Blank)的属性,咋一看没问题,确实每一个考空都会有考生的作答信息。但是,因为考空(或者考题,试卷)可以不依赖于考生,独立存在,而作答必须是某位考生的作答,不能脱离考生独立存在,所以不适合作为考空的属性。

  作为考空的属性会有什么问题呢?假如需要保存每个考生的作答,那就必须为每个考生都保存一份试卷,试卷上有考题、考空和作答。然而,试卷的份数是有限的,若干位考生会同时使用同一份试卷,具有相同的考题和考空。因此试卷应该独立出来,给每个使用到该试卷的考生创建一个该试卷对象的引用,而不是分别创建完全相同的试卷对象。

  作答信息不能脱离考生独立存在,一份作答只能属于一位考生,因此应该定义一个“作答”类,封装作答信息,并作为考生对象的一个属性存在。

  因此,类图应该如下:

 

  关键是要明确,虽然“作答信息”和“考空”是一对一关系,但是“作答”是考生的作答,每个考生的作答都不一样,但每个考生使用的试卷可以一样;是考生决定作答,而不是考空决定作答。所以“作答信息”应该是“考生”的属性,而不是“考空”的属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值