[答疑]“大展鸿图”的不变式君子不贪杯这一题,貌似C选项也可以?

DDD领域驱动设计批评文集

做强化自测题获得“软件方法建模师”称号

《软件方法》各章合集

小树 2025-7-28 18:26

君子不贪杯这题,您给的答案是B,貌似C也可以,要么贪杯,要么君子,我的理解对吗?

图片

UMLChina潘加宇

C不对。你的理解也不对,“要么A,要么B”不是or(或)的意思,而是xor(异或)。

我们设定:

P: 某个人是君子,即oclIsKindOf(君子)

Q: 某个人不贪杯,即24小时内摄入酒精克数<=20

把四个选项用P和Q替换,如下图:

图片

君子不贪杯,意思是:如果一个人是君子,那么他不贪杯,即P→Q。

P→Q 等价于 (not P) or Q,这是逻辑学的基本定义。

也就是B选项:not oclIsKindOf(君子) or 24小时内摄入酒精克数<=20

C选项

24小时内摄入酒精克数>20 or oclIsKindOf(君子)

相当于(not Q) or P,等价于Q→P,意思是,如果一个人不贪杯,那么他是君子。

这个意思就变掉了,原来的意思,不贪杯只是君子的必要条件,现在变成了充分条件。

还可以比较一下真值表,特别注意结果为假的(P,Q)结合

图片

本来我们给类加约束是防止“贪杯的君子”出现,如果改成下面,则变成防止“不贪杯的非君子”出现了。

用无间道的话来说,一个是警察抓内鬼,一个是腐蚀黑帮里的好人。

贪杯不贪杯的可能只是小事情,最近空难较多,我们换成飞机事故看看。

P: 发动机故障

Q: 警报响

真值表如下:

图片

从“杜绝漏报”变成了“杜绝假警报”。

**********

再看你说的“要么贪杯,要么君子”。

根据前面的定义:

P:君子

Q:不贪杯

“要么贪杯,要么君子”相当于 (not Q) xor P。

(not Q) xor P

=((not Q) or P) and not((not Q) and P)

=((not Q) or P) and (Q or (not P))

=((not Q) or P) and ((not P) or Q)

=(Q→P) and (P→Q)

=Q↔P

相当于“君子”和“不贪杯”是双重蕴含的,这个就更严格,既杜绝了“贪杯的君子”,也杜绝了“不贪杯的非君子”。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值