モジュール設計とは(全体像)
モジュール設計とは、大きなプログラムを、「機能ごとのまとまった部品(モジュール)」に分けて作る設計の進め方のことだ。
ぜんぶを1つのかたまりで作ると、直すのも使い回すのも大変。そこで、役割ごとに小さな部品に分けておくと、分かりやすく、直しやすく、使い回しやすくなる。
この「部品の分け方が、良いか・悪いか」を測るものさしが2つある。凝集度と結合度だ。次でやさしく見ていこう。
詳しく:凝集度と結合度
ここが心臓部。2つのものさしを表で押さえよう。向き(高いほど良いか、低いほど良いか)がポイントだ。
2つのものさし
| ものさし | 何を見るか | 良いのは |
|---|---|---|
| 凝集度 | 1つの部品の中身が、どれだけ1つの仕事に集中しているか | 高いほど良い |
| 結合度 | 部品どうしが、どれだけ依存し合っているか | 低いほど良い |
- 凝集度 … 1つの部品の中身が、どれだけ「1つの仕事」に集中しているか。あれもこれも詰め込まず、1つの役割にまとまっているほど良い。だから高いほど良い。
- 結合度 … 部品どうしが、どれだけ依存し合っているか(つながりの強さ)。つながりが強いと、片方を直すともう片方も巻き込む。だから低い(つながりがゆるい)ほど良い。
そして目標が、高凝集・低結合(High Cohesion, Low Coupling)。中身は1つの仕事に集中させ(凝集度を高く)、部品どうしのつながりはゆるく(結合度を低く)する、ということだ。
ここで一番のひっかけ。「結合度は高いほど良い」と思い込むと誤り。結合度は低いほど良い。ものさしの向きが逆なので注意だ。
わかりやすく言い換えると
身近なたとえで整理しよう。
モジュール設計は、「料理を、下ごしらえ・焼く・盛り付けと、役割ごとの担当に分ける」イメージ。1人で全部やるより、役割で分けたほうが直しやすい。要するに、仕事を役割ごとの部品に切り分ける考え方だ。
凝集度は、「1人の担当が、1つの仕事に集中しているか」。1人があれもこれも兼ねるより、1つに集中しているほうが良い(だから高いほど良い)。
結合度は、「担当どうしの連絡が、どれだけ密に絡んでいるか」。お互いべったり依存していると、1人の変更が全員に波及する。だから、つながりはゆるいほうが良い(低いほど良い)。つまり、中身は集中・つながりはゆるく、と覚えておこう。
試験のツボ
🔴 一番出る:2つのものさしの向き
①凝集度は高いほど良い(中身が1つの仕事に集中)
②結合度は低いほど良い(部品どうしのつながりがゆるい)
🔴 次に出る:目標は高凝集・低結合
①中身は集中(高凝集)、つながりはゆるく(低結合)
②直しやすく、使い回しやすい部品になる
🟡 押さえると安定:凝集度と結合度の違い
①凝集度は「部品の中身」を見る
②結合度は「部品どうしのつながり」を見る
よくある間違い
①「結合度は、高いほど良い」→ ✗ 結合度は低いほど良い。つながりがゆるいほうが、直しやすく独立している。
②「凝集度と結合度は、同じことを指す言葉だ」→ ✗ 凝集度は「部品の中身」、結合度は「部品どうしのつながり」。見ているものが違う。
③「凝集度は、低いほど良い」→ ✗ 凝集度は高いほど良い。中身が1つの仕事に集中しているほうが良い。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(モジュール設計の正体)
モジュール設計に関する次の記述のうち、最も適切なものはどれか。
- プログラムを、機能ごとの部品(モジュール)に分けて作る設計である
- 社員の出退勤を記録して、毎月の給与を計算するためのしくみのことである
- 取引先へ毎月の請求書を郵送する、決まった事務作業のことを指す
- 完成したシステムを宣伝して、より多く売るための広告活動である
解答は 1 だよ。
モジュール設計は、プログラムを、機能ごとの部品(モジュール)に分けて作る設計だよ。役割ごとに分けると、直しやすく使い回しやすいんだ。
選択肢2は給与計算、選択肢3は請求書の事務、選択肢4は広告で、どれも違うよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | 機能ごとの部品に分ける設計で正しい |
| 2 | ✗ | 給与計算のしくみではない |
| 3 | ✗ | 請求書の事務の話 |
| 4 | ✗ | 広告活動ではない |
オリジナル問題2(ものさしの向き)
凝集度と結合度の良し悪しに関する次の記述のうち、最も適切なものはどれか。
- 凝集度も結合度も、ともに低いほど良い設計だとされている
- 凝集度は低いほど、結合度は高いほど良い設計だとされている
- 凝集度も結合度も、ともに高いほど良い設計だとされている
- 凝集度は高いほど、結合度は低いほど良い設計だとされている
解答は 4 だよ。
凝集度は高いほど、結合度は低いほど良いよ。これが「高凝集・低結合」という目標だね。
選択肢1・2・3は、ものさしの向きが違っていて誤りだよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 凝集度は高いほど良い |
| 2 | ✗ | 向きが逆 |
| 3 | ✗ | 結合度は低いほど良い |
| 4 | ✓ | 高凝集・低結合で正しい |
オリジナル問題3(凝集度と結合度の違い)
凝集度と結合度の違いに関する次の記述のうち、最も適切なものはどれか。
- 凝集度も結合度も、社員の給与を計算することだけを指している
- 凝集度は部品の中身、結合度は部品どうしのつながりを見るものさしである
- 凝集度も結合度も同じ意味で、呼び名が2つあるだけで違いはないとされる
- 凝集度は、取引先へ請求書を郵送する事務だけを表すものさしである
解答は 2 だよ。
凝集度は部品の中身、結合度は部品どうしのつながりを見るものさしだよ。見ているものが違うんだ。
選択肢1は給与計算、選択肢3は「違いはない」、選択肢4は請求書の事務で、いずれも誤りだよ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 給与計算のものではない |
| 2 | ✓ | 中身とつながりの違いで正しい |
| 3 | ✗ | 両者には違いがある |
| 4 | ✗ | 請求書の事務のものではない |
まとめ
押さえどころ
- 🔴 モジュール設計 = プログラムを、機能ごとの部品(モジュール)に分けて作る設計。
- 🔴 2つのものさし = 凝集度(高いほど良い)・結合度(低いほど良い)。
- 🟡 目標 = 高凝集・低結合。中身は1つの仕事に集中させ、部品どうしのつながりはゆるくする。
次に学ぶ
- オブジェクト指向 ── データと処理をまとめる考え方。部品をうまく分ける設計につながる。
執筆: SikakuQuest編集部