モジュール

技法

データの流れから

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;
}