-
システム設計の作業は、
各工程ごとに順次細かく分割
していくこと。
最も小さな単位が1つのプログラムになるイメージです。分割した単位は、「モジュール」
のほか、一般に次のような名称でも呼ばれます。また分割方法は、システムの特性によって、さまざまな技法
を用います。 -
シンプルで保守性に優れたプログラムを作成するためには、構造化設計が欠かせません。
モジュール分割技法は2種類ある。- データの流れに着目
- データの構造に着目
コンポーネント
システムを構成する機能単位。座席予約や入金処理といった、関連する一連の作業を1つにまとめた単位です。
モジュール(ユニット)
独立してコンパイルできる単位。1つの機能単位に分割されたプログラムを指します。1つのモジュールをさらに分割して階層化する場合もあります。モジュール分割のメリットは、処理効率の向上、部品化、再利用が可能、保守の効率化と信頼性向上、などです。
セグメント
関数やサブルーチンなどの単位を指します。
出典 https://gihyo.jp/assets/files/book/2018/978-4-7741-9907-8/9784774199078-02.pdf
モジュールに分ける利点と留意点
利点
作業が分担できる。
複数人で並行してプログラミング作業を進めることができる。
再利用の容易
共通する機能を部品として使い回すことができる。
修正が一部で済む
欠陥のあるモジュールを修正することで、プログラムが改修できます。
留意点
変な分割をすると余計なプログラミングの保守が難しくなる。
モジュール分け作業の後
構造化プログラミングを行う。
構造化プログラミングとは?
「順次」「反復」「分岐」という単純な制御構造
を「手続き」
という単位でまとめることで抽象化し、その手続きをさらにまとめてより抽象的な「手続き」を作る、といった階層構造によってプログラミングするパラダイムです。
順次とは?
プログラムに記述された順に上から実行
する処理です。
反復とは?
指示された処理を繰り返し実行
することで、多くの言語ではfor文、while文といった形で表現されます。
分岐とは?
条件によって実行
する処理を切り替えることで、こちらはif文、switch文が代表的です。
パラダイムとは?
特定の時代や分野において支配的な規範となる「物の見方や捉え方」のこと
出典 https://www.kaonavi.jp/dictionary/paradime/#:~:text=%E3%83%91%E3%83%A9%E3%83%80%E3%82%A4%E3%83%A0%E3%83%AD%E3%82%B9%E3%83%88-,%EF%BC%91%EF%BC%8E%E3%83%91%E3%83%A9%E3%83%80%E3%82%A4%E3%83%A0%E3%81%A8%E3%81%AF%EF%BC%9F,%E5%A0%B4%E5%90%88%E3%82%82%E3%81%82%E3%82%8B%E3%81%AE%E3%81%A7%E3%81%99%E3%80%82
構造化プログラミングはソフトウェア設計を体現したもの
ソフトウエア設計の考え方の1つに「分割統治法」があります。
構造化プログラミングはこれを体現したものです。
分割統治法とは、そのままでは解決が難しい「大きな問題」を「小さな問題」に分割
し、その分割された小さな問題のすべてを個別に解決する手法です。構造化プログラミングに当てはめて考えてみると、大きく複雑なソフトウエアという問題を小さな手続きという単位に分割
し、それをさらに分割することを繰り返すと最後には順次、反復、分岐という単純な小さな文
になります。
これが、分割統治法の考えが生かされているということになります。
モジュールの分割技法
データの流れに着目した技法を紹介する。
STS分割法
プログラムを入力処理(源泉:source)
、変換処理(変換: Transform)
、出力処理(吸収:Sink)
という3つのモジュール構造に分割する方法
トランザクション分割法
プログラムの一連の処理(トランザクション)単位
に分割する方法です。
気づき
一つの役目の処理で分割されるのか。
共通機能分割法
プログラム中の共通の機能
をモジュールとして分割する方法。
気づき
違うモジュール同士の共通部分の処理
をまた一つのモジュールを作成する。
モジュールの独立性を図る尺度
機能的に明確で、かつ入出力がはっきり分かるものが良いとされている。
モジュールの独立性を測るものとして
- モジュール強度
- モジュール結合度
モジュール強度
どれだけ機能的に特化できているかを表す。
気づき
モジュールだけを見てこれはどんな機能かを100人が100人一緒の答えでなければならないのか。
モジュール結合度
どんなデータをやり取りすることで他のモジュールと結合するかを表す。
気づき
他のモジュールの変更に影響されないモジュールだといいのか。
詳しくは
出典 https://gihyo.jp/assets/files/book/2018/978-4-7741-9907-8/9784774199078-02.pdf
出典 http://www.kogures.com/hitoshi/webtext/kj2-module/