大老二和德州扑克-属性值没变,状态怎么变了
邬俊杰 2023-10-31 21:20
课上说状态是由属性值决定的,比如身高>170算高,某人身高175,算高。如果规则改了,身高>180算高,某人身高没变,但现在不算高了。属性值没变,状态变了,这还算是由属性值决定吗?
UMLChina潘加宇
算。
由属性值决定,又没有说怎么决定,状态=f(x,y,z),x,y,z没变,f变了,结果还是由x,y,z推出,但可能不是原来那个结果。而且,这种变化是规则上的变化,影响的是所有的实例,影响远比某个对象的属性值变化引起的状态变化要激烈。
状态机是描述类的规则的一种形式,有了规则之后,所有对象按照规则行事。对象的属性值改变,对象可能会从一个状态转到另一个状态,但状态机图本身是不变的。
而规则的改变,则是换了一张新的状态机图。“>170算高改为>180算高”这种改动只是微调,改动的可能是迁移上的警戒条件。激烈的改动,有可能“高”的状态就从状态图机上直接消失了,这时还谈什么高不高的。
用玩扑克牌类比。抓牌抓到的都是一张黑桃2,玩大老二(锄大地)的人会很开心,觉得拿到了“强”牌,但玩德州扑克的就可能不开心了,觉得拿到的是“弱”牌。