2012-08-01 31 views

回答

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() { 
    ... 
} 

显然,因为伪代码是不是正式的,它不能被由编译器验证。

  • 这是用户以确保前提条件得到满足的方法的职责,
  • 它的开发商方法有义务承认改变的前提条件是(通常)一个突破的变化。
3

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

  1. 如果你可以制定你的条件进入真正的代码,我想给Programming With Assertions一试(或相当于.NET Debug.Assert)。通过这种方式,您可以在运行期间实际检查您的条件:assert condition

  2. 如果情况并非如此,或者您只是不想,可以将前置和后置条件写入JavaDoc。

    /** 
    * @precondition: the connection has been established. 
    * 
    * @postcondition: the schema is created. 
    * 
    */ 
    

你甚至可以定义这些JavaDoc annotations,使他们出现在Javadoc生成的文档。这样你可以使用自然语言来定义你想要声明的内容。

你也可以表达你的前置和后置条件更数学我为了增加你的条件,简洁,这可能使它们更容易理解:

对于你一定能使用简单的数字比较<<=>>=等,但是,假设你要定义为Set不变,那么你可以将它表示为:

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

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

如果您喜欢功能性语言,可以进一步开发此功能。我的数据结构和算法,教授使用哈斯克尔定义先决条件,后置条件和不变量新推出的数据结构:

module TreeSets(TreeSet, 
       contains, add, remove, card, traverse) 
where 
data Ord t => TreeSet t = E | N (TreeSet t) t (TreeSet t) 

inv E = True 
inv(N l x r) = all(<x)(abs l) && all(>x)(abs r) && 
    inv l && inv r 

这真的取决于对他们来说,你正在写这一点,因此我的建议是使用自然语言 。每个人都可以理解,特别是面向对象的程序最容易制定。