对Design By Contract中的不定式理解比较模糊,哪位大牛能举个简单生动的例子?

initora 2003-03-25 03:00:19
解释一下,先谢了!
...全文
42 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Schlemiel 2003-03-27
  • 打赏
  • 举报
回复
不变式只是一个概念,你可以用很多种方法来实现它。譬如你可以让编译器在每个方法的前后加上断言(Eiffel的办法),也可以让虚拟机随时检查(好象没有哪个语言这样做的)。建议你先看看Eiffel的文档,尤其是关于DBC的那一段,自然就明白了。
另外推荐你一本书:裘宗燕翻译的《从规范出发的程序设计》(Programming from Specification)。
initora 2003-03-27
  • 打赏
  • 举报
回复
谢谢Schlemiel(维特根斯坦的扇子) ,那是不是说不变式(invariant)一般都是以类的属性的方式来实现的?
okareo 2003-03-25
  • 打赏
  • 举报
回复
什么意思?
Schlemiel 2003-03-25
  • 打赏
  • 举报
回复
不定式?还是不变式?
termite 2003-03-25
  • 打赏
  • 举报
回复
到文档中心去查阅,那里就有。
Schlemiel 2003-03-25
  • 打赏
  • 举报
回复
早说是不变式就好了嘛。
不变式(invariant)是类的一种属性,该类派生的所有对象必须在所有时候满足不变式的要求。例如,对于一个stack,它的不变式就可能是top>bottom。在任何时候,只要出现了!(top>bottom)的情况,运行时环境就会报一个最严重的错误。
在Eiffel中,不变式是以断言(assert)的形式来实现的。仍以上面的例子:编译器会在每个方法调用的前后加上类似于assert(top>bottom)的语句,一旦某个方法违背了这个不变式,断言即出错,抛出不可捕捉的异常,终止运行。
请注意:在这种实现方式中,实际上并不要求“任何时候”都遵守不变式。在Eiffel中,你可以在每个方法的内部随便操作,只要保证方法开始执行之前和执行完成之后满足不变式就可以了。
initora 2003-03-25
  • 打赏
  • 举报
回复
对不起,写错了,是"不变式".
termite(为了得分,到处接分...别忘放分,多给),能给出链接地址吗?我找不着

1,265

社区成员

发帖
与我相关
我的任务
社区描述
软件工程/管理 管理版
社区管理员
  • 研发管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧