質問

情報を隠すことは、システムを構成するモジュールを分離するのにどのように役立ちますか?

役に立ちましたか?

解決

カプセル化(情報の隠蔽)を使用すると、絶対最小値のみを外部に公開できます。これは、クライアントに影響を与えることなく、露出されていない部分を思いのままに変更できることを意味します。

適切な事例。配列に文字列を保持するデータ構造を実装したとします。配列を公開すると、データ構造のユーザーは str [7] を使用して、位置7の文字列を取得できます。

今、文字列の検索を高速化するためにバランスのとれたツリーとしてデータ構造を再実装することにした場合はどうなりますか。これを行うには、文字列をツリーに移動し、配列を文字列ではなくツリー内の場所へのポインタに変更します。

クライアントが壊れるのは、ポインタではなく文字列を想定しているためです。すべてのクライアントは、配列からポインターを取得するために変更し、それらをツリーで検索する必要があります。

ただし、実装を完全に隠し、関数を提供しただけの場合:

String getStringAt (int n);

互換性を保つには、データ構造と 関数を変更するだけです。

クライアントは、アプリケーションプログラミングインターフェイス(API)が変更されていないため、壊れません

クラスで従う最も重要なルールの1つは、最大一貫性、最小結合を目指すことです。言い換えれば、単一のクラスには必要なものすべて(それ以上)はなく、外部との情報共有はできるだけ少なくする必要があります。

つまり、クライアントがAPIを呼び出すだけで all できるということです。非APIメソッドを公開したり、パブリック変数に自由にアクセスしたりすることはできません。すべてをセッターとゲッターで行う必要があります。

他のヒント

データ非表示は、モジュールをそれほど切り離さないため、モジュール間の結合を制限するのに役立ちます
これは、非表示の要素が定義されているモジュール以外のモジュールで使用できないため、「結合」する可能性のある結合/依存関係/ call-it-what-you-mayが制限されるためです。モジュールを一緒に。

言い換えれば、モジュール間交換を APIで具体的に定義されたものに限定します。この事実は、特定のモジュールの実装が変更されたときに非常に役立ちます。 APIは同じままなので、モジュール相互運用は機能します。 (モジュールAがモジュールBの変数xを使用したかどうかを確認するためにコードをスカウトする必要はありません(Bがxを隠している場合、それを使用するのはそれだけです!)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top