Skip to main content

クラスの不変とは何ですか?

objectオブジェクト指向のコンピュータープログラミングと設計では、クラスの不変は、オブジェクトインスタンスが有効な状態に存在するかどうかを定義するために使用できる一連のルールです。設計の観点から見ると、クラスの不変は、オブジェクト内のデータが適切な機能状態で考慮されるために落ちる必要がある一連の境界です。クラスの不変は、設計ドキュメントまたはソースコードのコメントで定義できます。また、一部のプログラミング言語では、実行可能なコンピューターコードに直接実装できます。コード化された不変剤とアサーションを使用するプログラムは、不変の条件が満たされていないときにプログラムが実行を停止したり、さまざまなエラーをスローすることができます。標準のエラーチェックとは異なり、クラスの侵入は通常、クラスの内部実装が機能していることを保証するためにのみ使用され、通常は公開文書やプログラミングインターフェイスにリストされていません。本質的には、クラスのアサーションのコレクションです。このアサーションは、簡単に言えば、クラスの状態の一部をチェックし、プログラムの実行を継続するためにTrueに評価する必要がある声明です。アサーションの1つの例は、特定の整数が常に1〜10の間であることを保証するステートメントです。クラスの不変が使用される場合、オブジェクトが保持しているデータのすべての関連部分についてアサーションが評価され、本質的に、オブジェクトは定義された範囲内にあります。Classクラスの不変性を使用することは、標準エラーチェックに非常に似ており、変数が使用可能な境界内にあるか、nullでないことを確認するために標準エラーチェックに大きく似ています。ただし、クラスの不変剤と標準のエラーチェックを使用することの違いは、コードに本質的な欠陥がない限り、発生しないエラーをキャプチャするために主に使用されることです。もう1つの違いは、標準のエラーチェックが回復とプログラム制御フローの変化を伴う傾向があるのに対し、不変障害の結果はプログラム終了である必要があることです。ほとんどのプログラムがクラスの不変チェックに失敗したときに終了する理由は、オブジェクトが侵害された状態にあり、設計ビューから、設計契約を遵守するために必要な前提条件と事後条件を満たすことができないためです。それらが暗黙的に定義されているオブジェクト指向プログラミング言語のクラスの不変のプロパティは、不変がサブクラスによって継承されるメカニズムであるということです。これにより、サブクラスが親クラスで実行される不変のチェックを無効にすることを防ぎます。最終的に、これは、サブクラスがスーパークラスによって確立された設計契約を破ることができないことを意味します。