# Chapter14-7「モジュールの分割」 ## 日付() ###### tags:`基本情報技術` さつき: > module > 組み立てユニット。また、装置・機械・システムを構成する、機能的にまとまった部分。 > 各プログラムをモジュールという単位に分解、階層化させることを、**プログラムの構造化設計** といいます。 * モジュールに分ける利点と留意点 * メリット * 作業が分担できる * 再利用が容易 * 修正が一部で済む > でもなんでもかんでも分ければいい、というものではなく。 > モジュールにやたらいろんな機能が入っていたり。 > モジュールの中身がやたら他のモジュールに依存していたりするとつらみ。 * モジュールの分割技法 * STS分割法...入力処理、変換処理、出力処理の3つに分ける方法 * トランザクション分割法...一連の処理単位で分割する方法 * 共通機能...類似機能を切り出して、一つのモジュールにする。 * モジュールの独立性を測る尺度 * モジュール強度 * モジュール内の機能が、内部でどのように関連づいているかを示す尺度 * どれだけ、機能に特化できているか * モジュール結合度 * 他のモジュールとどのように結合するか > できるだけ独立していた方がいい、て聞いた。 > うーん、他のモジュールに引っ張られることが、あまりいいこととは思えない。。 > やむをえない場合を除いて。 * 過去問 * 問1:OK * 問2:OK にわ: - 読み込み * プログラムの構造化設計:プログラムをモジュール単位に分解・階層化させること * プログラムの構造化設計におけるモジュール分割技法 * データの流れに着目 * STS分割法:入力処理、変換処理、出力処理の3つのモジュールに分割する。 * トランザクション分割法:一連の処理(トランザクション)単位で分割する。 * 共通機能分割法:共通機能をモジュールとして分割する。 * データ構造に着目 * ジャクソン法 * 入出力データの構造からプログラムの構造を決定していく方式。マイケルジャクソンが決めたん!?(同名) * ワーニエ法 * 入力データの構造(データがいつ、どこで、何回使われるかなど)を分析してプログラムの構造を決定していく方式。 * https://e-words.jp/w/%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E5%88%86%E5%89%B2.html * モジュールの独立性を測る尺度 * モジュール強度:どれだけ機能的に特化できているか。強い方が好ましい。 * モジュール結合度:他のモジュールとどのように結合するか。弱い方が好ましい。依存度的な? * 例えば、「単一のデータを引数で渡す」のは結合度が弱い。「複数データをまとめたものをグローバル領域のデータとして渡す」のは結合度が強い。 - 過去問 * 問1:OK * 問2:用語覚えてなかった・・・ok ちさと: * プログラムの作成 * 内部設計で切り分けた処理 ⇨ 処理(プログラム)⇨ モジュールに分割して階層構造を作る ⇨ 個々のモジュール単位でプログラミング * モジュールという単位に分解することを、「プログラムの構造化設計」という * モジュールに分ける利点 * モジュールA、モジュールB、モジュールC、、と分けれるので、複数人で並行して作業できる * 共通する部分を使いまわせる * 修正が一部で済む * ただ何でもかんでも分ければいいってわけでもなく…下手に分けると * モジュールの中にごちゃごちゃ色んな機能が詰め込まれてる状態になってたり、 * モジュールの中身が他のモジュールにめっちゃ依存してる…ってことになったりする * 分割技法(データの流れに着目) * STS分割法:データの流れに沿って段階ごとに区切る * 入力処理(Source) * 変換処理(Transform) * 出力処理(Sink) * トランザクション分割法:一連の処理(トランザクション)単位で分ける * 共通機能分割法:プログラム中の共通機能をモジュールとして分割する * 尺度 * いいモジュールは、独立していてコンパクトな部品として使いまわせるやつ * ↑を測る尺度を「モジュール強度」と「モジュール結合度」という * モジュール強度 * どれだけ機能的に特化できてるか * 高いほど独立してて良い! * モジュール結合度 * どんなデータをやり取りすることで、他のモジュールと結合するか * 弱いほど独立してて良い! * どんなデータを渡す? * 単一のデータ(価格、商品コード、名前などなど) * データ構造(↑3つをひとまとめにしたもの) * どんな手段で渡す? * 引数で渡す(モジュールからモジュールへ直接データを渡す) * グローバルな領域でデータを渡す(誰もが読み書きできる領域でデータのやり取りをする) * 過去問 * 問1:この辺全然ピンとこない * 問2:具体例探そ…