web-dev-qa-db-ja.com

機能結合の概念

機能的凝集の概念をよりよく理解するためにいくつかの研究を行いました。マイヤーズの著書「複合構造化設計」は、機能的結合について書いています:

機能強化モジュールは、単一の特定の機能を実行するモジュールとして定義されます。

また、「複合設計による信頼性の高いソフトウェア」にも次のように書いています。

機能強化モジュールでは、すべての要素が単一関数のパフォーマンスに関連しています。

他の著者は同様の見解を表明した:

単一の計算に不可欠な要素はすべてコンポーネントに含まれています。したがって、機能的にまとまりのあるコンポーネントは次のとおりです。

  • 設計されたタスクを実行するだけでなく、
  • その機能のみを実行し、他には何も実行しません。

または:

機能の結合:単一の関数の実行に必要な各部分。たとえば、平方根を計算したり、配列を並べ替えたりします。

私の質問は:

  • 上記の定義の単一の特定の機能は「単一の責任の原則」と同じですか?
  • または、機能の凝集性は、Javaクラスには1つのパブリックメソッドのみが含まれることを意味します。パブリックメソッドが複数ある場合、機能的に凝集性のあるコンポーネントはありませんか?
5
flexibleHammer

以下の間に混乱があります。

  • プログラミングまたは数学的な意味での関数、つまり、結果を達成するために呼び出すことができる何かを定義できるいくつかの言語構成体(たとえば、プロシージャ、関数、サブルーチンなど)
  • 工学的な意味で機能します。つまり、何かが使用される目的を意味します。

機能的結合 は後者に関するものです。それは、1つの特定の目的を果たすモジュール、パッケージ、コンポーネントを持つことです。たとえば、次のことができます。

  • 非常に豊富なプログラミング機能(連結、検索、置換)を提供する文字列ライブラリですが、これらはすべて文字列を操作する共通の目的を果たします。したがって、機能的な結合があります。
  • いくつかの文字列関数、いくつかのファイル管理関数、いくつかの頻繁に使用されるユーザーインターフェイスの相互作用などを備えたユーティリティライブラリ...ここには、実際の一般的な目的はありません。これは便利ですが、まとまりのない無関係な機能のコレクションです。

もちろんここでは、解釈の余地があり、正確に測定することが難しい概念を使用して作業しています。

機能的な結束は、単一の責任とは何の関係もありません。そして、単一の責任は、1つのことだけを行うこととは何の関係もありません。単一の責任は、変更の理由とインターフェースを定義する責任にのみ関します( を参照)ボブおじさんの記事 :彼はコンセプトを発明したので、それが本当に何であるかについてある程度の権限を持っています手段)

4
Christophe