Как написать предварительное условие в псевдокоде

Мне было просто интересно, если бы кто-нибудь знал, как представить предварительное условие в псевдокоде, так как я осмотрелся вокруг, ничего не могу найти по этому вопросу.

Спасибо

2 ответа

Псевдокод, по определению, не формализованный код. Примером использования псевдокода для определения предварительного условия для метода 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. Если вы можете сформулировать свои условия в реальном коде, я бы попробовал Программирование с утверждениями (или.NET-эквивалент Debug.Assert). Таким образом, вы можете проверить ваши условия во время выполнения с помощью assert condition

  2. Если это не так или вы просто не хотите этого, вы можете записать условие pre и post в ваш JavaDoc.

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

Вы даже можете определить эти аннотации JavaDoc, чтобы они появлялись в документации, сгенерированной JavaDoc. Таким образом, вы можете использовать естественный язык, вы определяете, что вы хотите утверждать.

Вы также можете выразить свои предварительные и постусловия более математически, чтобы я мог увеличить краткость ваших условий, что может сделать их более понятными:

Для простого сравнения чисел вы можете использовать <, <=, >, >=и т. д. Но допустим, что вы хотите определить инвариант для 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

Это действительно зависит от того, для кого вы пишете, поэтому я рекомендую использовать естественный язык. Это может понять каждый и особенно для объектно-ориентированных программ, которые легче всего сформулировать.

Другие вопросы по тегам