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

Reply To: class invariant

>>我认为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混同了。


Share