コンテンツにスキップ

モジュール化(とインタフェース)

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

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

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

モジュール?

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


構造をつかまえる

モジュール化を行うために,まずは全体の流れを書いてみましょう.

  • ものと操作の洗い出しで決めた言葉を使って,フローチャートや状態遷移図を書いてみます.
  • この際,まだ洗い出されていない言葉が出てきたら,再度,洗い出しからやり直します.

ものや操作の依存関係の把握

  • ものの間の依存関係をグラフ化し,
  • 一つのものをオブジェクト(やクラス)や構造体で表してみます
  • 最終的に,プログラミング言語の言葉(型とか関数とか)になればOKです.

「もの」や「操作」からプログラムへ

例えば,次のように考えると良いかもしれません.

  • 概念はオブジェクト(やクラス)になります.
  • ある概念のある一つの実体は変数
  • 実体の集まりは配列またはリストになります.
  • 操作や処理は関数で表せます.
    • 何に対する操作で,
    • どんな情報が必要で,
    • 何が返されるのか
  • 変化は,状態が変わることを意味し,関数で表します.
  • 状態は変数に記憶し,その値は数値で表します.

インタフェース決め

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

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

に分けることです.

前者の「モジュール内だけで扱う関数(メソッド),変数(プロパティ)」は,後者の「外部とのやり取りを必要とする関数,変数」と切り分けて考えます.また,後者の「外部とのやり取りを必要とする関数,変数」は,最小限に抑えておくことが重要です.これがインタフェースに相当します.

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

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

以上のように,「モジュールの外部へ公開する機能」であるインタフェースの設計は,(プログラムの修正・変更なども考慮した)プログラミング全体の設計に関わりますので,よく考える必要があります.