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