問題タブ [invariants]

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 投票する
7 に答える
22184 参照

algorithm - 線形探索のループ不変量

Introduction to Algorithms ( http://mitpress.mit.edu/algorithms ) に見られるように、演習では次のように述べられています。

入力:配列A[1..n]と値v

出力: Index i、 whereA[i] = vまたはNILifvが見つからないA

シーケンスをスキャンして v を探す LINEAR-SEARCH の疑似コードを記述します。ループ不変式を使用して、アルゴリズムが正しいことを証明します。(ループ不変条件が 3 つの必要なプロパティ (初期化、保守、終了) を満たしていることを確認してください。)

アルゴリズムの作成に問題はありませんが、得られないのは、ループの不変条件をどのように決定できるかということです。ループ不変の概念、つまり、ループの開始前、各反復の終了/開始時に常に真であり、ループが終了しても真である条件を理解したと思います。通常はこれが目標です。たとえば、sort の挿入、 の繰り返し、jから始まる要素は常にソートされます。これは私には理にかなっています。しかし、線形検索の場合は?ループ不変条件を考えるには単純すぎるように思えます。私は何か間違ったことを理解しましたか?次のような明白なものしか考えられません(NILまたは0とnの間のいずれかです)。よろしくお願いします!j = 2A[1..j-1]

0 投票する
4 に答える
891 参照

java - Javaループ不変条件

上記のコードは、whileループを使用して、指定された正の整数の下位対数を計算して返すためのJavaのメソッドであることが意図されています。上記のループに不変条件をどのように提供しますか?つまり、開始前、ループ本体が終了するたび、およびループ条件の否定が保持されます。

0 投票する
1 に答える
156 参照

.net - ルーチンを呼び出す前後の不変条件をどこで評価しますか?

コントラクトによる設計では、クラス不変条件は、オブジェクトの作成後とルーチンの呼び出し後の2つの場合に満たされる必要があります。ルーチンを呼び出す前に評価を行わなければならない例や条件はありますか?

0 投票する
2 に答える
1432 参照

c# - C# 3.5 共分散の問題?

私は C# の共分散の問題について多くのことを聞いたり読んだりしてきましたが、いくつかの質問とシナリオを提示したかったので、この問題に関する混乱を解消できることを願っています。

これらの例では、以下が常に定義されていると想定してください。

私の最初の例:

これはうまくいくはずですよね?これを C# で数回テストしたところ、正常にコンパイルされ、正常に実行されました (最初の例のテストは、コンソールに情報を出力するポリモーフィック呼び出しがあったため、これよりもわずかに多くなりました)。

2 番目の例:

この 2 番目の例では、これはコンパイルされるべきではなく、.NET 4.0 で解決されている共分散の問題の原因であると私は理解しています。間違っている場合は修正してください。また、.NET 4.0 では具体的な型間の共変性/反変性が許可されておらず、インターフェイスのみが許可されていることも認識しています。

最後に、いくつかの定義を取得したいと思います。これら 3 つの用語の背後にある意味がよくわかりません。

  • 共分散
  • 反変性
  • 不変(不変と同じ?)

最後の単語については、暗黙のルールを持つ変更を参照するために C++ でよく使用しました。たとえば、整数があり、1 から 10 の間の値しか持てない場合、「不変性」とは、1 から 10 の間の値しか持てないということです。私はこれを誤解している可能性があり、この定義は、この特定の説明のために C# に適切に変換されます。

編集

私の目標は、C# のジェネリック インターフェイスに関する共分散またはキャストの問題が何であるかを正確に理解することです。私が投稿した例は、問題がどこにあるのかについての私の理解です。すべての例が正常にコンパイル/機能する場合は、C# で最も一般的な共変性/反変性/キャストの問題を再現する例を提示してください。問題を特定して他の人に説明できるように、これを知る必要があります。

0 投票する
1 に答える
616 参照

oop - 不変条件とは何かを判断するにはどうすればよいですか?

簡単に言えば、新しいクラスを設計するとき、不変条件がどうあるべきかをどのように判断すればよいでしょうか? 不変量を定義するものは何ですか? 有効性に結びついていると聞いたことがありますが、それはまだ曖昧です。特定のインスタンスを有効または無効にするものは議論の余地があります。

「直感」で行くべきでしょうか?不変条件が何であるかを理解するためのガイドラインはありますか?

0 投票する
3 に答える
133 参照

c# - 「違法な」サブタイピングについて警告するコードコントラクトを取得できますか?

この質問が長すぎると思われる場合は申し訳ありません。質問する前に、それがどこから来ているのかを示す必要があります。

設定:

次の不変タイプが与えられますRectangle

…それから型を導き出すことは完全に合法のようですSquare

…派生クラスは、それ自体の不変条件が違反されないようにすることができるためです。

Rectangleしかし、私が可変にするとすぐに:

…との独立したセッターを持つべきではないSquareので、私はもはやそれから派生するべきではありません。SquareWidthHeight

質問:

Square可変Rectangleクラスから派生するとすぐにコントラクト違反を警告するように、コードコントラクトで何ができますか?できれば、コードコントラクトの静的分析により、コンパイル時にすでに警告が表示されます。

言い換えれば、私の目標は、コードコントラクトを使用して次のルールをエンコードすることです。

  • Widthおよびのは、互いに独立して変更Heightすることができます。Rectangle
  • WidthHeightのはSquare互いに独立して変更することはできず、そもそもそれは意味がありません。

…そして、これらのルールが「衝突」するたびにコードコントラクトが気付くような方法でそれを行います。

私がこれまで考えてきたこと:

1.不変条件をRectangle:に追加します

このアプローチの問題は、不変条件が「幅と高さは等しい必要はありませんが、等しくなる可能性があります」と正しく述べている一方で、(1)トートロジーであるため、(2)それがWidth == Height派生クラスの不変条件よりも制限が少なくなりSquareます。おそらく、コードコントラクトがそれを見る前に、コンパイラによって最適化されているのかもしれません。

Rectangle2.のセッターに事後条件を追加します。

これにより、派生クラスが変更されるたびにSquare更新Heightされることは禁止され、その逆も同様です。それ自体がからクラスを派生することを妨げることはありません。しかし、それが私の目標です。コードコントラクトに、可変から派生してはならないことを警告してもらうことです。WidthWidthSquareRectangleSquareRectangle

0 投票する
4 に答える
871 参照

c++ - 同じクラス内でGetter/Setterの使用を強制する(C ++)

クラス内でゲッターまたはセッターの使用を強制する方法はC++にありますか?

私の頭に浮かぶ唯一のことは、すべてのスーパープライベートメンバーをプライベート変数として、保護されたゲッター/セッターを持つ抽象基本クラスに入れることです。

しかし、それは良い習慣のようには聞こえません。

誰もがセッターを使用することを保証するためのより一般的な方法や慣習はありますか?

(私の目的:クラスが大きくなると、どの変数が不変条件を持っているかを思い出すのが難しくなります。現在、変数を設定する前に、ゲッターとセッターのどちらを作成したかを検索します(不変条件を考慮する必要があるかどうかを確認するため)。しかし、私はこの専門的でない検索を毎回取り除きたいと思っています。)

0 投票する
1 に答える
1310 参照

domain-driven-design - DDDと工場

こんにちは私はドメイン駆動設計とファクトリ/ファクトリメソッドの使用に関していくつか質問があります。ドメイン駆動設計ブルーブック(Eric EVan's Book)によると、複雑なコンストラクターはファクトリ/ファクトリメソッド/ビルダー内にカプセル化する必要があると記載されているため、すべての不変条件をチェックする一貫した場所があります。私の質問はこれに関するものです。

魔法の効果(ブログへの投稿+効果の持続時間、使用されるマテリアル(文字列のリスト)、魔法の効果に関連するパターンなどのいくつかの属性など)の操作のようなCRUDを作成できる魔法のオーガナイザーアプリケーションを開発しているとしましょう。不変条件の1つは、魔法の効果には常にタイトル、魔法の効果の内容、期間、およびオプションのパターンが必要であり、アプリケーションに登録されたユーザーによって公開される必要があるということです。

したがって、かなりの数の不変条件があるので、MagicEffectオブジェクトを構築し、すべての不変条件をチェックするEffectBuilderがあります。

ユーザークラスでこのようなことをしても大丈夫ですか?

または私は次のようなことをする必要があります:

そしてどこか他の場所

最初の例では、大量のパラメーターを使用する巨大なメソッドがありますが、ビルド時にすべての不変条件が有効に設定されていることを確認します。他のシナリオでは、流暢なインターフェイスを使用してコードの可読性をプログラムで改善しますが、作成することはできません。不変条件が100%の時間満たされていることを確認してください。

どちらがより良いアプローチですか?それを行うためのよりバランスの取れたアプローチはありますか?

ありがとうパブロ

0 投票する
1 に答える
420 参照

loops - 次のコードのループ不変条件とは何ですか

このサンプルコードのループ不変条件とは何ですか。
これは、Cプログラミング言語で実装された抜粋コードです。

これらは私の最初の答えです(ループ不変条件):

  1. y>=n
  2. x<=m
  3. z>=0

私はまだこれについて確信が持てません。ありがとう。

0 投票する
2 に答える
2086 参照

c# - 事前/事後条件と不変条件を使用して、C#でStackクラスを実装するにはどうすればよいですか?

誰かがC#でStackクラスを実装する方法/最良の方法についての例やアイデアを持っていますか?すでにStackクラスがあることは理解していますが、実際にStackクラスを実装する方法を理解する必要があります。

また、C#でコントラクトを使用して、このクラスの前提条件、事後条件、および不変条件を指定する方法についてのアドバイスも必要です。ASP.NET MVCアーキテクチャでモデルを作成するときに、以前に似たようなものを使用したことがあると思いますが、それが同じものであり、同じように機能するかどうかは完全にはわかりません。(前提条件/事後条件/不変条件については、まだわからない場合は少し迷っています。ご容赦ください。)

私の主な質問-スタックなどのクラスでコントラクトを適切に使用するためのアドバイスを誰かに教えてもらえますか?

はい、私は努力を打ち出しました: