日历

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

#1237
hui
Keymaster

>>我认为class invariant应该强调的是各个public方法之间的关系

不是,class invariant强调的是一个类的任何对象都应时时处于一个正常/合法的状态中。之所以提到public方法,是因为客户只有通过它才有可能破坏这个invariant(当然前提是constructor的postcondition满足这个invariant)。

你提到的LIFO是Stack的一个类级别规范(你所说的整体规范应当指的就是这个吧),但该规范只能通过push/pop/pushAll/popAll等具体API的precondition/postcondition来体现。换言之,class invariant是类级别规范的一部分,但不是全部。或者说,class invariant的成立对于保证一个类的行为正确性来说,是一个必要但不充分的条件。你正确意识到了有些规范具有整体性,不能孤立地只看某个public方法,但却把类级别规范与class invariant混同了。

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