Skip to content

Instantly share code, notes, and snippets.

@sunaot sunaot/gist:613113
Created Oct 6, 2010

Embed
What would you like to do?
結合性

結合性 (coupling)

課題

凝集性を誤解し、とにかくひとつのルーチンになんでも多くのことを詰めこもうとする。さらに詰めこんだため、ルーチンとルーチンの間で膨大で複雑な引数を介してデータ構造を共有しようとする。

解決策

ルーチンとルーチンの間の関係をなるべく小さく保ちましょう。あるルーチンを変更した結果が、別のルーチンへ与える影響を0にするのが理想的です。このルーチンとルーチンの間の関係を結合性と呼びます。結合性は低く保つのがよく、結合性が低い状態を疎結合と呼びます。

結合性が低いかどうかを測るのには、4つの基準があります。

  • 結合量
  • 親密度
  • ビジビリティ
  • 柔軟性

結合量について。ルーチンとルーチンの間で共有される要素の数が少なければ少ないほど、結合性は低くなります。引数やグローバル変数を介しての要素のやりとりを一つでも少なく保ちましょう。

親密度について。ルーチン間での結合がより直接的に行われるほど、親密度が高くよい状態とされます。たとえば、引数での結合はもっとも親密な結合で、グローバル変数やデータベースを介したデータのやりとりよりもよい状態です。

ビジビリティについて。ルーチン間での結合がより明示的に行われるほど、ビジビリティが高くよい状態とされます。たとえば、引数での結合はもっとも明示的(どこで結合されているかがわかりやすい。)な結合で、よい状態とされます。

柔軟性について。ルーチン間での変更がより容易に行えるほど、柔軟性が高くよい状態とされます。たとえば、ルーチン内では必要ない要素を含むデータを引数として渡されると、余計なデータ構造への依存が発生し、インターフェースの変更がむずかしくなります。これは柔軟性が低い状態です。

結合のレベルには5つの段階があり、言語標準のプリミティブなデータ(例:Integer, Boolean, String, など)のみを引数リストとしてやりとりする単純データ結合がもっともよい結合の状態です。

  • 単純データ結合 (プリミティブなデータだけを引数リストでやり取りする結合)
  • データ構造結合 (単純データ結合と同じく引数リストでやり取りするが、引数に構造化されたデータを含む結合)
  • 制御結合 (呼出元ルーチンから渡されたデータが相手のルーチンの動作を制御する結合)
  • グローバルデータ結合 (二つのルーチンがグローバルデータを通してデータを共有している結合)
  • 病的結合 (ルーチンが相手のルーチンの内部動作・構造に依存している結合)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.