モジュール設計
(応用情報技術者合格教本のp498あたり)
モジュール分割技法には「データの流れ」に注目した技法と「データの構造」に注目した技法に分けられる。
データの流れに注目した技法
- STS分割
- プログラムは入力→処理→出力の構造でできているという前提に立った分割技法
- 入力処理機能(Source)、変換処理機能(Transform)、出力処理機能(Sink)の3つにモジュールを分割する
- 最大抽象入力点と最大抽象出力点でモジュールを分割する
- TR分割
- トランザクション分割の意
- 下記の3つのモジュールに分割する
- トランザクションを入力するモジュール
- トランザクションを属性ごとに各モジュールに振り分けるモジュール
- トランザクションごとの処理モジュール
- 共通機能分割
- 上記のモジュールの中で共通する機能を持ったモジュールがあった時、そのモジュールを共通モジュールとして独立させる方法
データの構造に注目した技法
- ジャクソン法
- JSP木(基本・連続・繰り返し・選択の要素を組み合わせた木構造)に則ってプログラムを構造化する
- ワーニエ法
- 集合論に基づいてプログラムを構造化する
- ジャクソン法は出力データに注目してデータを構造化するが、ワーニエ法は入力データに注目し、「いつどこで何回」という考え方で展開する
モジュール結合度
モジュール結合度の種類は6種類。
下記の表では下に行くほど結合度が低いため望ましい。
覚え方は結合度が弱い順(=良い順)に「デスセガキナ」(Death SEGA 来な)
種類名 | 説明 | 具体例 |
---|---|---|
データ結合 | 必要なデータだけを引数として渡す | 得点と順位を表示するクラスがあった場合、得点と順位のデータのみを渡す |
スタンプ結合 | 構造体データを引数として渡す | structやdata classで作成したデータの塊を渡す |
制御結合 | モジュール内の処理を制御するデータを引数として渡す | 得点を表示するかどうかを引数の内容によって決める |
外部結合 | 必要なデータだけを外部宣言し、他のモジュールからの参照を許可する | データをpublicで宣言し、他のクラスから参照する |
共通結合 | 共通領域に参照したデータを参照する | データ格納庫的なクラスを作り、そのクラスのデータを参照する |
内容結合 | 他のモジュールを直接参照している | goto文で他のモジュールのデータを参照しにいく |
※具体例は人によって捉え方がまちまちらしいのであくまで一例