どうも!ひよこSE(@PiyoOct)です。
モジュール結合度ってなに?
ひとことで言えば、「プログラムの部品同士のくっつき度合い」です。モジュールは、プログラムの部品。それがどうくっついているか?
基本情報技術者試験で出題されたときに向けて丸暗記するなら、結合度が弱い順に
(弱い)データ結合>スタンプ結合>制御結合>外部結合>共通結合>内容結合(強い)
であって、データ結合が一番弱くて単一のデータを渡すものです。
「んん?」となってると思います。
もうちょい詳しく解説するので、気になる人はぜひ続きを読んでください。
モジュールとは、プログラムの部品のこと
そもそも、モジュールってなんやねん?
ってなっている人も、いますよね。
1つのプログラム、部品として機能しているのが「モジュール」
モジュールをシンプルに説明すると、「プログラムの部品」のことです。
例えば、ドラクエだと、こんな流れでゲームが始まります。
- 冒険の書をつくる
- オープニングムービーがはじまる
実際に、ドラクエがどういう風に作られているかは分かりません。
あくまでもイメージだと思ってくださいまし(-_-;)。
ドラクエの、オープニングムービーが流れるまでに、
- 冒険の書を作るプログラム
- オープニングムービーを流すプログラム
の2つにプログラムが分かれているとします。
2つに分かれているプログラムはそれぞれ、一つの部品として機能します。
冒険の書を作るプログラムが、一つの部品ってこと?
そういうことです!
冒険の書を作るプログラムであれば、それだけで1つのプログラム、部品として動かせます。
1つのプログラム、部品として機能しているのが「モジュール」です。
モジュールは一つだけあっても意味がない。複数あるもの
モジュールは、あくまでも「プログラムの部品」なので、複数あるものです。
どういうこと?
さっきの例だと、ドラクエというゲームに、「冒険の書を作るプログラム」だけがあっても、意味がないですよね。
そのあとに、オープニングムービーが始まって・・・
のようにストーリーが進行しなければ、「ドラクエ」というゲームの意味がありません。
なので、モジュール(プログラムの部品)は一つだけあっても意味がなく、複数あるものです。
モジュール結合度は全部で6つ
さて、モジュールの意味が、しっかりと理解できていれば怖いものなし。
モジュール結合度は全部で6つです。
- データ結合
- スタンプ結合
- 制御結合
- 外部結合
- 共通結合
- 内容結合
データ結合
データ結合とは、一つのデータを別の部品(=モジュール)にポンッと渡すイメージです。
一つのデータというのは、ドラクエで言えば、「主人公(勇者)の名前」だと思ってください。
仲間と会話をするときなどに、主人公の名前は最初に決めた名前になっていますよね。
ゲームやってればわかるけど、主人公の名前を変えることもできません(「変えることできない」のもポイント)。
あれはまさに、「主人公の名前」という一つのデータを使っているイメージです。
スタンプ結合
スタンプ結合とは、データのかたまりを、別の部品(=モジュール)に渡すイメージです。
ドラクエで例えるなら、味方の攻撃力と敵の防御力の2つ(複数)セットで、ダメージを計算するために使うイメージです。
制御結合
制御結合とは、別の部品の動作をコントロールするイメージです。
戦いのときに、こうげき、ぼうぎょ、逃げるを選ぶと、ちゃんとその通りに動いてくれるイメージです。
外部結合
外部結合とは、一つのデータを読み書きが可能な(書き換えることができる)として、渡すことです。
ドラクエで言えば、攻撃力・守備力は装備によって常に変わります。
例えば、「どうのつるぎ」から「はがねのつるぎ」に装備を変えたら、攻撃力が変わるイメージ。
装備を管理するプログラムが「もとの攻撃力+20」としたいので、攻撃力を管理するプログラムから「もとの攻撃力」をのぞき見して計算までやっちゃうイメージ。
ちなみにですが、「なぜ、のぞき見できるのか?」と言えば、レベルが上がるとき・なんかのイベントが発生したときにも攻撃力が上がるので、いろんなプログラムで、のぞき見ができないと困るわけです。
共通結合
共通結合とは、データのかたまりを、書き換えるときに使います。
例えば、セーブ。
セーブする前のデータが、お祈りした瞬間に、新しいデータに上書きされるイメージです。
セーブする前にいた町、パーティーのレベル、ステータスなどを「セーブ前ワーク」みたいな便利ゾーンに全部持っておいて。
おいのりしたら、今の状態に「セーブ前ワーク」が、ごそっと書き換わる変わる感じ。
この「セーブ前ワーク」も、続きから始めるプログラムと、お祈りするプログラムが使うので、いろんなプログラムでのぞき見できないと困るわけです。
内容結合
内容結合は、あるプログラムが別のプログラムを、直接参照(のぞき見)して、なんなら動かせちゃうイメージです。
共通結合までは、あくまでも「データ」のお話ですが、「プログラム」そのものに次元がアップ。
全く別のプログラムなのに、一心同体のような動きをするものです!
例えば、モンスター図鑑(倒したモンスターの一覧)がそれ・・・だと思います(ここは、ちょいと自信ない)。
モンスター図鑑は、50音順にできたり種別で見ることができたり。
図鑑管理プログラムに直接・・・アクセスして、一覧を見ているかもしれない。(あくまでも「たぶん」)
モジュール結合度が一番弱いのはデータ結合
モジュール結合度が一番弱いのはデータ結合です。
(弱い)データ結合>スタンプ結合>制御結合>外部結合>共通結合>内容結合(強い)
なんで?
モジュール(プログラムの部品)を、別のモジュールに渡すときに、一つのデータしか渡さないからですね。
まぁ、見るからに弱そうだけど・・・。
- 主人公の名前だけをわたすのか?(データ結合)
- 攻撃力・守備力のように、複数セットなのか?(スタンプ結合)
- 別のプログラムを、もとのプログラムがコントロールできるのか?(制御結合)
- あるいは、書き換え可能なデータを渡すのか?(外部結合・共通結合)
- 一心同体。常にのぞき見が可能なのか?(内容結合)
プログラム同士が連携・結合するときに、「渡す内容で強さが変わるんだなぁ~」以上に、ツッコミ始めるとわけわかんなくなるかと。
割り切ってくださいまし(-_-;)。
データ結合が一番弱くて、単一のデータとだけ、覚えておけばよし!
モジュール結合度で一番出るのは、データ結合ですからね(*´ω`)。
まとめ:モジュール結合度とは部品のくっつき度合い。データ結合を覚えるべし
まとめると
モジュール結合度とは部品のくっつき度合いで、データ結合が一番弱くて単一のデータを渡す
とだけ、覚えておけば、最悪どうにかなります(*´ω`)。
モジュールとは、プログラムの部品のこと。プログラムの部品(モジュール)が複数あって、一つの機能(ドラクエ)が完成します。
データ結合に使われるデータは、主人公の名前のように、単一のデータ。
「別のモジュールに、主人公の名前だけを渡すので、モジュール結合度の中で、データ結合が一番弱い」みたいに、なんとなくで覚えて乗り越えてくださいまし(-_-;)。
コメント
途中まですごく分かりやすいのに最後の方力尽きててもったいないw
たいさん
コメントありがとうございます!
なんだか励まされました。
がんばって、力尽きた部分も追記w
今後も読んでいただけるとうれしいです!