ソフトウェア設計及び演習2015

モジュール化

まとまりの良い単位を取り出す(モジュール化)

  • ものに注目し,ものに対する操作をインタフェースと考える
  • インタフェースがなるべく小さくなるように
  • 同じモジュールの中に,いろいろな概念が入り込まないように

ソフトウェア開発においては,上記のようなモジュール化の考え方が非常に重要です.

モジュール?

ある機能を実現するための関数群や,データの集合などを,他のものとは独立して閉じた形で扱えるように構成する ことを「モジュール化」と呼びます.

モジュール化の利点

超単純な例として,大量のデータがファイルで与えられ,それをソーティングして出力する,という問題を考えます.

これを実現するには,ファイルを読み込み,適当な手法とパラメータを用いてソーティングアルゴリズムを開始し,得られた結果を画面表示する,という手順が必要なので,プログラムとしては,大きく

  • データファイル読み込みモジュール
  • アルゴリズム本体のモジュール
  • 結果表示モジュール

という3つの単位に分けることができます.これらの処理単位ごとに分割したソースファイルを準備すれば,プログラム開発やデバッグは個別に行うことができます

ソーティングアルゴリズムが何種類も考えられる場合には,データ読み込みと結果表示のモジュールはそのままで,「アルゴリズム本体」モジュールだけを差し替えればいいことになります.このように,上手くモジュール分けされたプログラムであれば,他のユーザが作成したモジュールでも簡単に自分のプログラムに組み込み可能となります.

関数(操作),変数(もの)の隠ぺいと公開(インタフェース決め)

モジュール化を考える上で大事なことは,単に「同様の処理で関連している関数群をまとめる」ことだけではなく,処理されるデータや関数を,

  • そのモジュール内だけで扱われるもの,と
  • 外側や上位のモジュールともやり取りを行わなければならないもの

に分けることです.

前者のモジュール内だけで扱う関数,変数は,例えば static 修飾子などを使用してモジュール内部に隠します.

また,後者の「外部とのやり取りを必要とする関数,変数」は,最小限に抑えておくことが重要です.これがインタフェースに相当します.

モジュールとインタフェースを適切に定めておけば,隠された機能の変更は,その影響をモジュール内部だけに抑えらるので修正が容易です.モジュールを丸ごと入れ替えるのも簡単です.

さらに,他人の作ったモジュールでも,外側からアクセスする関数の動作や変数(インタフェース)にだけ気をつければ,問題なく使用できます.

以上のように,「何を公開して何を隠ぺいするか」といったインタフェースの設計は,(プログラムの修正・変更なども考慮した)プログラミング全体の設計に関わりますので,よく考える必要があります.

(復習)ポーカーゲームのモジュール

モジュール化の例として,ソフトウェア構成論で学んだ

を見直してみましょう.

それぞれ

  • 機能
  • 独立性
  • (インタフェースの)設計

があります.


最終更新日:2015/03/05 10:01:21