2

疑似コードで前提条件を表現する方法を誰かが知っているかどうか疑問に思っていました。周りを見回しても、この件について何も見つかりませんでした。

ありがとうございました

4

2 に答える 2

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

明らかに、擬似コードは形式化されていないため、コンパイラで検証することはできません。

  • 前提条件が満たされていることを確認するのは、メソッドのユーザーの義務です。
  • 前提条件の変更は(通常)重大な変更であることを認めるのは、メソッドの開発者の義務です。
于 2012-08-01T11:21:17.647 に答える
3

ここに 2 つの可能性があります。

  1. 条件を実際のコードに定式化できる場合は、アサーションを使用したプログラミング(または .NET の同等のDebug.Assert ) を試してみます。このようにして、実行時に実際に条件をチェックさせることができますassert condition

  2. そうでない場合、または単純にそうしたくない場合は、事前条件と事後条件を JavaDoc に書き込むことができます。

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

これらのJavaDoc アノテーションを定義して、JavaDoc によって生成されたドキュメントに表示されるようにすることもできます。このようにして、主張したいことを定義する自然言語を使用できます。

事前条件と事後条件をより数学的に表現することもできます。これにより、条件がより簡潔になり、より理解しやすくなります。

単純な数値比較には<<=>>=、 などを確実に使用できます。しかし、 a の不変式を定義したい場合は、次のSetように表現できます。

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

したがって、仮説/疑似関数を使用して条件を表現します。

関数型言語が好きなら、これをさらに発展させることができます。私のデータ構造とアルゴリズムの教授は、 Haskellを使用して、新しく導入されたデータ構造の事前条件、事後条件、および不変条件を定義しました。

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

これは、誰のために書いているかによって大きく異なります。そのため、自然言語を使用することをお勧めします。誰でも理解でき、特にオブジェクト指向プログラムの場合は最も簡単に作成できます。

于 2012-08-01T11:23:36.657 に答える