結合は次の種類に分類でき、結合度を高い順に並べると次のようになります。
1. コンテンツの結合
1 つのモジュールが別のモジュールのコンテンツに直接アクセスする場合、2 つのモジュールはコンテンツ結合されていると言われます。
プログラム内で次のいずれかの状況が発生した場合は、2 つのモジュール間でコンテンツの結合が発生したことを意味します。
1) あるモジュールが別のモジュールの内部データに直接アクセスします。
2) 通常の入口を通らずに、モジュールが直接他のモジュールの内部に入る。
3) 2 つのモジュールにはコードの一部が重複しています (コードのこの部分には特定の独立した機能があります)。
4) モジュールには複数のエントリがあります。
コンテンツの結合はアセンブリ言語で発生する可能性があります。ほとんどの高級言語は、コンテンツの結合を許可しないように設計されています。この結合は最も強い結合と最も弱いモジュール独立性を持ちます。
2. パブリックカップリング
すべてが同じグローバル データ構造にアクセスするモジュールのグループは、パブリック結合と呼ばれます。共通のデータ環境には、グローバル データ構造、共有通信領域、共通のメモリ フットプリントなどがあります。モジュールがパブリック データ環境にデータを入力するだけ、またはパブリック データ環境からデータを取得するだけの場合、これは比較的緩やかなパブリック結合です。モジュールがパブリック データ環境へのデータの入力とパブリック データ環境からのデータの取得の両方を行う場合、これは、より密結合なパブリック結合です。
パブリック結合により、次の問題が発生する可能性があります。
1) 公開データへの各モジュールのアクセスを制御することは不可能であり、ソフトウェア モジュールの信頼性と適応性に重大な影響を与えます。
2) ソフトウェアの保守性を悪化させる。モジュールが公開データを変更すると、関連するモジュールに影響します。
3) ソフトウェアの理解度が低下します。どのデータがどのモジュールで共有されているかを明確に知るのは容易ではなく、トラブルシューティングも困難です。
一般に、パブリック結合は、モジュール間で共有されるデータが大量にあり、パラメーターを渡すのが不便な場合にのみ使用されます。
3. 外部カップリング
モジュールのグループがすべて同じグローバル単純変数にアクセスし、パラメータ テーブルを介してグローバル変数の情報を渡さない場合、それは外部結合と呼ばれます。
4. 制御カップリング
モジュール間で受け渡されるのはデータ情報ではなく、標識やスイッチなどの制御情報であり、あるモジュールが別のモジュールの機能を制御します。
5. ラベルカップリング
呼び出し側モジュールと呼び出されるモジュール間で単純なデータではなくデータ構造を渡すことは、機能結合とも呼ばれます。タグ結合されたモジュール間で受け渡されるのは単なる変数ではなく、高級言語で表現されたデータ名、レコード名、ファイル名などのデータ結果であり、これらがタグであり、実際に受け渡されるのはアドレスである。
6. データ結合
呼び出し側モジュールと呼び出されるモジュールの間で渡されるのは、単純なデータ項目パラメータのみです。高級言語の値渡しに相当します。
7. 間接結合
2 つのモジュール間の関係は、メイン モジュールの制御と呼び出しを通じて完全に実現されます。結合度は最も弱く、モジュールの独立性は最も強い。
要約: 結合はソフトウェアの複雑さと設計品質に影響を与える重要な要素です。モジュールの独立性を高めるためには、モジュール間で可能な限り緩やかなシステムを確立する必要があります。設計では、次の原則を採用する必要があります。可能な限りデータ カップリングを使用し、コントロール カップリングの使用を減らし、パブリック カップリングを慎重にまたは制御された方法で使用し、パブリック カップリングの範囲を制限し、コンテンツ カップリングを回避するように努めてください。
凝集度には次のような種類があり、その度合いを弱い順に並べると次のようになります。
1. 偶然の凝集
モジュール内の処理要素はまったく接続されておらず、偶然に結合されています。このようなモジュールは、偶然の凝集性としても知られており、最も凝集性が低いものです。
2. 論理の一貫性
この種のモジュールは、いくつかの関連する関数を組み合わせており、呼び出されるたびに、モジュールに送信されるパラメータによって、モジュールがどの関数を完了する必要があるかが決まります。
3. 時間内に集合
同時に実行する必要があるアクションを組み合わせて構成されるモジュールを時間集約モジュールと呼びます。
4. プロセスの凝集
コンポーネントまたは操作を組み合わせると、間のデータ転送がない場合でも、前のコンポーネントまたは操作を呼び出した直後に次のコンポーネントまたは操作を呼び出すことができます。簡単に言えば、モジュール内の処理要素が関連しており、特定の順序で実行する必要がある場合、それはプロセスの凝集と呼ばれます。
五、通信内聚
モジュール内のすべての処理要素が同じデータ構造で動作すること、またはすべての処理機能が共通のデータ (情報の凝集性と呼ばれることもあります) を通じて関連付けられていることを意味します。つまり、モジュール内の各コンポーネントは同じデータを使用するか、同じデータ構造を生成します。
6. 逐次的な凝集
モジュール内の各処理要素は同じ機能に密接に関連しており、これらの処理は順番に実行する必要があります。通常、前の処理要素の出力は後者の処理要素の入力になります。
例えば、工業生産額評価の機能をモジュールで完結させる場合、前者の機能要素は総出力値を計算し、後者の機能要素は平均出力値を計算しますが、このモジュール内の 2 つの部分は明らかに密接に関連しています。
逐次的凝集の凝集は比較的高いですが、機能的凝集ほど維持するのが簡単ではないという欠点があります。
七、機能的凝集
モジュール内のすべての要素のすべてのコンポーネントは同じ機能を完了するために存在し、一緒になって単一の機能を完了するため、モジュールを分割することはできなくなります。つまり、モジュールには、ある機能を達成するために必要なすべてのコンポーネントのみが含まれており、これらのコンポーネントは密接に関連しており、不可欠なものです。
機能的凝集は最も強い凝集であり、機能が明確であることが利点です。モジュールが機能的に結合しているかどうかは、通常、モジュール名から判断できます。モジュール名に動詞が 1 つだけあり、特定の目的 (単数名詞) がある場合、「水道料金を計算する」、「出力値を計算する」、その他のモジュールのように、通常は機能的にまとまります。機能の凝集は通常、ソフトウェア アーキテクチャ図の下位レベルで発生します。
機能的結合モジュールの重要な特徴は、それが「カセット ボックス」であることです。モジュールの呼び出し側は、モジュールが何を実行できるかだけを知る必要があり、モジュールがそれをどのように実行するかは知りません。
概要: モジュールを分割するときは、「1 つのモジュール、1 つの機能」の原則に従って、モジュールの機能をできるだけ結合させます。
転載元: https://blog.csdn.net/caoxuecheng001/article/details/80231220