モジュール
技法
データの流れから
STS分割
プログラムの流れを入力、処理、出力に分割して、それぞれをモジュールとするもの。
トランザクション分割
トランザクションの種類によって分割する。
例としては、予約処理や解約処理など
共通機能分割
共通機能を独立したモジュールとして分割する。
データ構造から
ジャクソン法
入力データと出力データを分析して、データの構造に合わせて分割する手法。
3つの基本構造(順次、選択、繰り返し)で表現する。
ワーニエ法
集合論を用いてm入力データの構造を「いつ、何回」処理するかという視点で分析する手法
モジュール強度について
上にあるほどモジュール強度が高い
| 名称 | 概要 |
|---|---|
| 機能的強度 | 一つの処理だけを行う |
| 情報的強度 | 複数の読陸機能で特定のデータを処理する |
| 連絡的強度 | 内部でのデータの受け渡しがある複数の逐次機能の集まり |
| 手順的強度 | 内部でのデータの受け渡しがない複数の逐次機能の集まり |
| 時間的強度 | 特定のタイミングで処理を行う |
| 論理的強度 | 引数により処理を選択される |
| 暗号的強度 | 大きさなどで分割された意味のない機能 |
モジュール結合度について
下に行くほど結合度が高まる。
技術的負債が溜まっていく。
| 名称 | 概要 |
|---|---|
| データ結合 | 引数だけの受け渡し |
| スタンプ結合 | データ構造の受け渡し |
| 制御構造 | 制御変数の受け渡し |
| 共通結合 | 必要のないデータも外部宣言する |
| 内容結合 | ほかのモジュールデータを直接参照する |
データ結合
引数のみデータを受け渡す構造
void sample(){
printHello("rerurate");
}
void printHello(string name){
print("Hello, $name !");
}スタンプ結合
構造体などのデータ構造を受け渡すもの
void sample(){
Person rerurate = Person(
name: "rerurate",
age 19
);
printHello(rerurate);
}
void printHello(Person person){
print("Hello, ${person.name} !");
}
class Person{
final String name;
final in age;
Person({
required this.name,
required this.age
});
}制御構造
引数などにそのメソッドの動きを制御するものがある構造
void sample(){
int fetch = fetch();
if(fetch == 1){
...
}
else{
...
}
}
int fetch(){
bool isSucceed = 成功か異常かが返されるコード;
if(isSucceed){
return 0;
}
return 1;
}外部結合
構造データではないものをグローバル宣言して共用する。
String name = "rerurate";
//----------別ファイル-------------
void sample(){
printHello(name);
}
void printHello(string nameArg){
print("Hello, $nameArg !");
}共通結合
構造データをグローバル宣言して共用する。
void sample(){
printHello(rerurate);
}
void printHello(Person person){
print("Hello, ${person.name} !");
}
class Person{
final String name;
final in age;
Person({
required this.name,
required this.age
});
}
//--------------別ファイル----------
Person rerurate = Person(
name: "rerurate",
age 19
);内容結合
他モジュール内の処理を参照する。
void sample(){
printHello(rerurate);
}
void printHello(Person person){
print("Hello, ${person.name} !");
if(isSucceed) {
...
}
}
class Person{
final String name;
final in age;
Person({
required this.name,
required this.age
});
}
//--------------別ファイル----------
Person rerurate = Person(
name: "rerurate",
age 19
);
bool isSucceed = 成功か異常かが返されるコード;
int fetch(){
if(isSucceed){
return 0;
}
return 1;
}