概要
ソフトウェア開発における凝集度(Cohesion)は、モジュールやコンポーネント内の要素(クラス、関数、メソッドなど)が一緒に働いて協力し、同じ目的や責任を持つ度合いを示す概念です。
高い凝集度を持つモジュールやコンポーネントは、特定の機能や責任に集中し、その範囲内で一貫した目的を達成します。これにより、ソフトウェアの保守性、拡張性、再利用性が向上し、コードの理解や変更が容易になります。
一般的に、ソフトウェア開発における凝集度は、以下のようなレベルがあります:
- 高い凝集度(High Cohesion):モジュール内の要素が強く関連しており、同じ目的や責任を共有しています。モジュールは独立して機能し、他のモジュールへの依存が最小限です。変更の影響範囲が限定され、再利用性が高まります。
- 中程度の凝集度(Medium Cohesion):モジュール内の要素は一部関連していますが、さまざまなタスクや機能を実行する可能性があります。モジュールが複数の責任を持つ場合でも、関連する機能をグループ化し、コードの可読性を向上させることが重要です。
- 低い凝集度(Low Cohesion):モジュール内の要素が関連性を持っていないか、ばらばらな責任を持っている場合です。モジュールの目的が明確ではなく、変更が互いに干渉しやすくなります。この場合、モジュールの分割や再設計が必要になることがあります。
ソフトウェア開発における高い凝集度は、保守性や品質の向上、バグの発生リスクの低減など、さまざまな利点をもたらします。そのため、凝集度の考え方は、ソフトウェアの設計やモジュールの構造において重要な指標として活用されています。
コード例
#include <iostream>
#include <cmath>
class Circle {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double calculateArea() const {
double area = M_PI * radius * radius;
return area;
}
double calculateCircumference() const {
double circumference = 2 * M_PI * radius;
return circumference;
}
};
int main() {
double radius = 5.0;
Circle circle(radius);
double area = circle.calculateArea();
double circumference = circle.calculateCircumference();
std::cout << "半径 " << radius << " の円の面積: " << area << std::endl;
std::cout << "半径 " << radius << " の円の円周: " << circumference << std::endl;
return 0;
}
このC++のコードでは、Circle
クラスが定義されています。このクラスは円の情報と計算メソッドを持ちます。calculateArea
メソッドは円の面積を計算し、calculateCircumference
メソッドは円の円周を計算します。それぞれのメソッド内では、円周率 M_PI
を使用して計算を行っています。
main
関数では、半径を指定してCircle
クラスのインスタンスを作成し、面積と円周を計算して出力しています。
このコードでは、関連するデータと処理がCircle
クラスにカプセル化されており、高い凝集度を持っています。クラスのメンバ関数が特定の責任を持ち、一貫した目的を果たしています。変更が発生した場合にも、関連するクラス内のメソッドのみに影響を与えることができます。
参考資料
https://little-hand-s.notion.site/10-d85b38b1846048cea37a015a52636d53