日历

September 2020
M T W T F S S
 123456
78910111213
14151617181920
21222324252627
282930  

Reply To: class invariant

Home Forums 《冒号课堂》讨论区 class invariant Reply To: class invariant

#1236
Todd
Member

>>如果还依赖外部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的本质。

 请您评分1星(很差)2星(不行)3星(一般)4星(不错)5星(很棒)