如何在伪代码中编写前置条件

时间:2012-08-01 11:18:42

标签: c# java mysql pseudocode preconditions

我只是想知道是否有人知道如何在伪代码中表示一个前提条件,因为我看了一遍就找不到任何关于这个主题的内容。

谢谢

2 个答案:

答案 0 :(得分:3)

伪代码,是按照定义,而非正式代码。使用伪代码定义C#方法的前提条件的示例是:

// Precondition: Object must have been initialized by calling init() or by
// manually setting properties X and Y such that X.Foo >= Y.Bar.
public void doUsefulWork() {
    ...
}

显然,由于伪代码没有形式化,编译器无法验证它。

  • 该方法的用户的职责是确保满足前提条件,并且
  • 该方法的开发人员有责任确认更改前提条件(通常)是一次重大变更。

答案 1 :(得分:3)

我在这里看到两种可能性:

  1. 如果您可以将您的条件表达为实际代码,我会尝试Programming With Assertions(或等效的.NET Debug.Assert)。这样,您可以在运行时使用assert condition

  2. 实际检查条件
  3. 如果不是这种情况或您根本不想这样做,您可以将前置条件和后置条件写入JavaDoc。

    /**
     * @precondition: the connection has been established.
     * 
     * @postcondition: the schema is created.
     * 
     */
    
  4. 您甚至可以定义这些JavaDoc annotations,以便它们出现在JavaDoc生成的文档中。通过这种方式,您可以使用自然语言定义要声明的内容。

    你还可以用数学的方式表达你的前后条件我为了增加你的条件的简洁性,这可能使它们更容易理解:

    对于简单的数字比较,您肯定可以使用<<=>>=等。但是,假设您要为{{定义不变量1}}然后你可以表达为:

    Set

    因此利用假设/伪函数来表达你的条件。

    如果您喜欢功能语言,可以进一步发展。我的数据结构和算法教授使用 Haskell 为新引入的数据结构定义前置条件,后置条件和不变量:

    /**
      * @invariant: set == filterDuplicates(set)
      *
      */
    

    这实际上取决于你是谁写的,因此我的建议是使用自然语言。每个人都可以理解,特别是面向对象的程序最容易制定。