问题标签 [post-conditions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
2719 浏览

inheritance - 弱化前置条件和加强后置条件不也违反里氏替换原则吗?

子类型的实际前提条件是通过组合(使用逻辑OR基类型的前提条件和子类型的前提条件来创建的,这使得生成的前提条件 限制较少。

子类型的实际后置条件是通过组合(使用逻辑AND基本类型的置条件和子类型的后置条件来创建的,这使得生成的后置条件 更具限制性。

以下是加强前置条件削弱后置条件的示例,因此违反了 LSP(链接):

  1. 假设您的基类与成员 int 一起使用。现在您的子类型要求该 int 为正数。这是强化的先决条件,现在任何以前使用负整数都可以正常工作的代码都被破坏了。

  2. 同样,假设相同的场景,但用于保证成员在被调用后为正的基类。然后子类型改变行为以允许负整数。对对象起作用的代码(并假设后置条件是一个正整数)现在被破坏了,因为后置条件没有得到支持。

a) 为什么当被覆盖的方法削弱了先决条件时,它也被认为是违反 LSP的,因为该方法可能使用基本类型的合约不可接受的参数。因此,我们不能声称违反了基本类型的合同,因此也违反了 LSP 吗?

b) 为什么当被覆盖的方法增强后置条件时,它也不被认为是违反 LSP的,因为调用此方法的客户端只会收到原始方法可能结果的子集。因此,我们不能声称违反了基本类型的合同,因此也违反了 LSP 吗?

例子:

基类后置条件保证方法的返回值在范围内1-10,但随后子类型将后置条件更改为只允许返回值在范围内2-9。现在,处理从此方法返回的对象的代码(并假设后置条件在一个范围内1-10)被破坏了,因为后置条件没有得到支持。

0 投票
1 回答
485 浏览

c# - 为什么 CodeContracts 静态检查器在我 Contract.Ensure(a) 之后建议我 Contract.Assume(a)?

基本上,我有一个虚拟方法可以将某些强制性后置条件传播到子类。这是一个简化版本和静态检查器生成的奇怪警告(编辑 - 我的示例不完整。现在):

这是另一类:

事实上,这两个警告都指向方法的右花括号,在 Contract.Ensure 调用下面的行中。我的代码有什么问题?

0 投票
5 回答
27124 浏览

java - java中的前置条件与后置条件?

例如我有以下代码:

我只是对这些术语的确切含义感到困惑?上面的代码是我认为的,但是任何人都可以用我的理论指出我正确的方向吗?

0 投票
3 回答
5110 浏览

ocl - OCL Post 条件可以在 if then 语句中吗?

我是 OCL 的新手,我对前置条件和后置条件的工作方式有一些疑问。

后置条件可以放在 if then 语句中吗?

例如,以下代码是有效的还是我只是在混合概念?

非常感谢您的帮助

0 投票
2 回答
1065 浏览

java - Java数据封装、初始化和后置条件?

我的任务是完成如下所示的日期课程。Date 类通过将月、日和年存储在私有实例变量中来封装日期。

下面的代码是我到目前为止所拥有的。坦率地说,我对我应该做什么感到很困惑,而且我没有教练可以问。输出为“ 2/2/0 ”

编辑更新:如果我输入一个无效的年份,例如 200,它不会打印错误消息......我使用 if 语句的目的是捕捉年份不是 4 位数的错误。它是否正确?感谢您的任何帮助!

0 投票
2 回答
216 浏览

exception - 埃菲尔例外不起作用

我正在尝试使用下面类中的异常,但是当我调用该kivetel方法时程序总是失败。我认为它只会调用重试部分,而不是满足后置条件。但它因违反“y_above_zero”而失败。

0 投票
2 回答
695 浏览

java - Java - 方法前置条件和后置条件执行

我的问题很简短。编译器是否强制执行方法前置条件和后置条件?

0 投票
1 回答
341 浏览

proof - 证明算法的正确性

我想知道是否有人可以帮助我回答这个问题。它来自以前的试卷,我可以知道为今年考试准备的答案。

这个问题似乎很简单,以至于我完全迷失了,它到底在问什么?以下算法找到最大值是否正确?

答案必须基于算法最弱前提的计算。

你如何验证这一点?似乎很简单。

谢谢。

0 投票
2 回答
2650 浏览

c# - 什么是后置条件异常?

我正在做一些有问题的作业:

你会如何前置条件例外?
您将如何使用后置条件异常?

因此,对于第一个问题,我假设前提条件是必须满足的条件才能使函数运行。例如,参数不能为空,我们可以抛出异常:

但是,我无法弄清楚后置条件异常的用途是什么,以及为什么我们要在这种情况下抛出异常(例如,如果不满足条件而不是返回 false)。

任何人都可以为此提供一个例子吗?

0 投票
3 回答
4102 浏览

c# - 前置条件和后置条件的解释?

我最近的任务要求我有这个遵循标准

“所有方法都有明确的后置条件和带有参数的前置条件”

我已经阅读了一些试图解释前置/后置条件的网页,但似乎可以掌握它们,有人可以向我解释它们是什么,它们的用途以及如何编写它们吗?

谢谢

(顺便说一下,我正在学习的语言是 C#)