オブジェクト指向とモジュール設計
オブジェクト指向とモジュール設計は、ソフトウェアを意味のある単位に分割し、その単位どうしの関係を適切に組み立てるための考え方である。オブジェクト指向では、クラス間の汎化や継承によって共通する性質を整理する。モジュール設計では、モジュール間の結合度を低くし、モジュール内の結束性を高くすることで、変更の影響が広がりにくい構造を目指す。
汎化と継承の仕組み
複数のクラスに共通する性質を取り出し、それらをまとめた上位のクラスを定義する関係を汎化という。汎化によって上位のクラスに定義された属性や操作は、下位のクラスに継承される。既存のクラスに性質を加えて新しい下位のクラスを定義する考え方は、汎化ではなく特化に当たる。
下位のクラスは、継承した操作をそのまま利用するだけでなく、必要に応じて同じ名前の操作を再定義(オーバーライド)できる。このとき、再定義された操作は下位のクラスのインスタンスが自ら実行するものであり、処理のたびに上位のクラスのインスタンスへ依頼する必要はない。
モジュールの結合度を判断する基準
モジュールの独立性を高めるには、モジュール間の結合度を低くする必要がある。結合度はモジュール間でどのようにデータを受け渡すかによって決まり、必要なデータ項目だけを引数として渡す方式が、一般的な受渡し方式の中で最も低い。
単一のデータ項目を引数で受け渡す方式はデータ結合に当たり、結合度の最も低い方式とされる。 一方、データ構造全体を引数で渡す方式はスタンプ結合となる。受け手が使わない項目にも依存し得るため、データ結合より結合度は高くなる。
大域的データ(グローバル変数)を介して値を共有する方式は共通結合となり、複数のモジュールが共有データの内容や構造に依存する。 共通域に置いたデータを参照する方式や、外部宣言されたデータを共有する方式も、共有データへの依存を生むため結合度は高い。
制御パラメータで相手モジュールの処理内容や実行順序を指定する方式は制御結合となる。呼び出し側が相手の動作を制御するため、単なるデータの受渡しより結合度が高くなる。
モジュールの結束性を判断する基準
結束性は、モジュール内の要素がどのような関係でまとめられているかを示す指標であり、結束性が強いほどモジュールは変更に強くなる。最も強いのは、あるデータとそのデータを扱う機能を一つにまとめ、データの内部表現を外部から見えないようにする設計である。これは情報隠蔽や抽象データ型に相当する。
この節の続き
- 実務での設計判断
- 試験で問われやすい区別
ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。
アプリでこの節を読む