- 冒号空间 - https://blog.zhenghui.org -

Reply To: class invariant

>>如果还依赖外部context的话,那便不是invariant了。


我不知道Pair(x, y).Left() == x, Pair(x, y).Right() == y这样的invariant是否算作对外部context的依赖。我认为这是类对外部输入进行的“变换”,变换之间保持了某种不变。我认为class invariant应该强调的是各个public方法之间的关系,比如:对于stack类孤立地测试(或保证)push方法,并检查内部状态是不可取的,而应该从外部测试(或保证)push和pop之间保持的LIFO invariant。所以,更具体地说,我认为class invariant应该强调类的特征,即公有方法间所保持的某种不变性。基于内部状态检查class invariant的方式可以达到目的,但是我认为没有抓住class invariant的本质。


Share