この記事ではモジュール結合度についてIT初心者にも分かりやすく解説します。
モジュール結合度
- モジュールはプログラムを構成する部品。
- モジュールは単独では意味がなく、複数のモジュールが組み合わさってプログラムになる。
- 最もモジュール間の関係性が低いのは、必要なデータだけをモジュール間でやり取りするデータ結合。
基本情報ではモジュール結合度に関する問題が出題されます。是非最後までご覧ください。
そもそもモジュールとは?
モジュールとは、プログラムを構成する部品のことです。
例えば、電卓のプログラムには
- 計算をするモジュール
- 計算結果を表示するモジュール
があります。
![](https://shikaku-dou.com/wp-content/uploads/2024/01/7b54f830428955334bad4bf49c668df6-e1704676486943-1024x401.jpg)
モジュールは単独では意味がなく、複数のモジュールが組み合わさって初めてプログラムとして意味を持ちます。
電卓プログラムでは、「計算を行う」モジュールが計算を実行し、計算結果を「結果を表示する」モジュールに引き渡して結果を表示することで初めて電卓としての意味を持ちます。「計算を行う」モジュールだけで動いても「結果を表示する」モジュールだけで動いても意味がありません。
![](https://shikaku-dou.com/wp-content/uploads/2024/01/2a5ea6521ff4edf5b3086b31862f677b-e1704678132571-1024x212.jpg)
このようにモジュール間は少なからずお互いに関係性を持ちます。ただ、この関係性が強過ぎると、プログラムを改修する時に不都合が生じる場合があります。
モジュール間の結合度の強さによって下表の名称で呼ばれます。
![](https://shikaku-dou.com/wp-content/uploads/2024/01/ffd7ea42fced46317e0485d73750554b-e1704693664862-1024x421.jpg)
基本情報では「最も結合度が弱いデータ結合では、必要なデータだけをモジュール間の引数で渡す」だけ覚えていれば大丈夫です。
モジュール結合度
データ結合
データ結合では単一のデータをモジュール間の引数として渡します。
![](https://shikaku-dou.com/wp-content/uploads/2024/01/7e2ddff25e3f48a60c082a2e28bb2835-e1704686520864-1024x493.jpg)
スタンプ結合
スタンプ結合では構造化したデータをモジュール間の引数として渡します。構造化したデータとは、簡単に言うとデータのかたまりです。例えば、『顧客情報』はID・氏名・年齢を一括りにしたデータです。データをかたまりで引き渡すので、データ結合より結合度が強くなります。
![](https://shikaku-dou.com/wp-content/uploads/2024/01/3383e10b0511b3d08ba12bc8b0968f4b-e1704687589300-1024x549.jpg)
制御結合
制御結合では条件分岐に影響を与えるデータをモジュール間の引数として渡します。モジュールAから引き渡された『年齢』によってモジュールBで実行される処理が異なります。
![](https://shikaku-dou.com/wp-content/uploads/2024/01/52c0445260224a2ad69a9bae2f6e2649-e1704688065773-1024x611.jpg)
外部結合
外部結合では共通域で宣言された単一のデータを複数のモジュールで使用します。共通域で宣言されるデータとはどんなデータでしょうか?簡単に言うと、複数のモジュールで参照・変更出来るデータのことです。
![](https://shikaku-dou.com/wp-content/uploads/2024/01/0f540b3e47eb99c95c88467bc4cdf839-1024x621.jpg)
共通域で宣言された変数はどのモジュールでも使うことが出来るので便利なように思えますが、逆に言うと、どのモジュールでも中身を変更出来るということになります。つまり、共通域で宣言された変数はどこのモジュールで変更されたか追跡するのが困難になります。なので共通域で宣言された変数を使えば、それだけでモジュール結合度が高くなるという訳です。
「通販サイトで商品を注文するプログラム」を例に外部宣言を見てみましょう。『エラーフラグ』は共通域で宣言しているので、【モジュールA】でも【モジュールB】でも更新することが出来ますし、【モジュールC】で参照することも出来ます。
![](https://shikaku-dou.com/wp-content/uploads/2024/01/ccf438888ba7dae04066e59e2e0bbf4c-1024x621.jpg)
共通結合
共通結合では共通域で宣言された構造化したデータを複数のモジュールで使用します。外部結合では共通域で宣言された単一のデータを複数のモジュールで使用しましたが、共通結合では構造化したデータを使用します。
![](https://shikaku-dou.com/wp-content/uploads/2024/01/1ea7bc000ef91c0528db41d0117f240c-1024x621.jpg)
内容結合
内容結合では他のモジュールの内容や命令を直接参照します。モジュール間の結合度が最も大きいのが内容結合です。下の例ではモジュールAの処理の中でモジュールBの処理をそのまま参照しています。モジュールBの処理内容が変わればモジュールAにも影響を与える可能性があります。
![](https://shikaku-dou.com/wp-content/uploads/2024/01/080ae4dbe41621b28c73cf2fea70b643-e1704693123814-1024x558.jpg)
基本情報技術者試験での出題例
サンプル問題問39、令和元年度秋期問46、
平成29年度秋期問48
基本情報技術者
科目A サンプル問題問39
午前試験 令和元年度秋期問46、平成29年度秋期問48
モジュール結合度が最も弱くなるものはどれか。
ア 一つのモジュールで,できるだけ多くの機能を実現する。
イ 二つのモジュール間で必要なデータ項目だけを引数として渡す。
ウ 他のモジュールとデータ項目を共有するためにグローバルな領域を使用する。
エ 他のモジュールを呼び出すときに,呼び出したモジュールの論理を制御するための引数を渡す。
正解は”イ”
ア モジュール内の機能の多さとモジュール結合度は関係ありません。沢山の機能を持っていたとしても無駄に多くのデータや構造を引き渡していれば結合度は強くなってしまいます。
イ これはデータ結合です。データ結合は最も結合度が弱いので正解です。
ウ グローバルな領域とは共通域なので、これは外部結合です。
エ これは制御結合です。
平成30年度秋期問48
基本情報技術者
午前試験 平成30年度秋期問48
モジュール間の情報の受渡しがパラメータだけで行われる,結合度が最も弱いモジュール結合はどれか。
ア 共通結合
ウ データ結合
イ 制御結合
エ 内容結合
正解は”ウ”
最も結合度が弱いのはデータ結合です。なので答えはウです。
基本情報に関する他の記事
ハードウェア | ソフトウェア | システム構成 |
ネットワーク | データベース | 開発手法 | 情報セキュリティ |
開発手法に関する記事
プログラムについての記事
【基本情報】午前試験のアルゴリズムの苦手意識を克服する!
【基本情報】関数?手続?再帰的?プログラムの性質を解説!
データ構造についての記事
【基本情報】スタックとキューってなに?どこで使われている?
【基本情報】2分探索木を完全に理解する!
【基本情報】ハッシュ法を完全に理解する!過去問と一緒に解説!
開発の流れについての記事
【基本情報】アジャイルを完全に理解する!過去問と一緒に解説!
【基本情報】UMLやDFDの全てをまとめて解説!
【基本情報】モジュール結合度について分かりやすく解説!
【基本情報】オブジェクト指向で出題されることをまとめた!
【基本情報】基本情報で出題されるテスト手法の全てを解説