4

私は誰かに、彼のコードが複数の目的に役立つという意味で「一貫性」がないことを伝えようとしています。私はそれをうまく説明できるとは思わないので、良い参考文献や定義を探しています。

4

5 に答える 5

11

正しい用語はcohesionだと思います。

コンピューター プログラミングでは、凝集度は、ソフトウェア モジュールのさまざまな責任がどの程度強く関連し、集中しているかの尺度です。凝集度は序数型の測定値であり、通常、議論の際に「高凝集度」または「低凝集度」として表現されます。

凝集度の高いモジュールは、堅牢性、信頼性、再利用性、理解可能性など、ソフトウェアのいくつかの望ましい特性に関連付けられているため、凝集度の高いモジュールが好まれる傾向があります。 、さらにはわかりにくい。

于 2009-02-24T09:28:13.013 に答える
5

私は自分のコンピューター (つまり、プログラマーの聖書) の横に Steve McConnell による Code Complete を持っていて、結合について説明しているページを開いたので、共有したいと思いました。

結束は構造化された設計から生じたものであり、通常はカップリングと同じ文脈で議論されます。凝集度とは、クラス内のすべてのルーチンまたはルーチン内のすべてのコードが中心的な目的をどの程度サポートしているか、つまりクラスがどの程度集中しているかを示します。強く関連する機能を含むクラスは、強力な結束を持っていると表現されます。ヒューリスティックな目標は、結束を可能な限り強くすることです。

于 2009-02-24T09:44:05.783 に答える
2

リファクタリング中にこれを説明するために、「関心の分離」という用語を使用します。多くの場合、コードがかなり新しい場合、個別の関心事が最初は明確ではないため、物事はひとまとめになります。

これを同僚に説明する簡単な方法の1つは、コードのテストケースを作成するように同僚に依頼することです。これは、コードが明確または一貫していないことを示しているはずです。

使用するもう1つの良い言い回しは、関数/オブジェクトは「1つのことを実行し、それをうまく実行する必要がある」ということです。これは、オブジェクト/メソッド名からシステムの全体的なアーキテクチャに至るまで、すべてに影響を及ぼします。

于 2009-02-24T09:56:16.220 に答える
1

これまでの回答に加えて、高い凝集度を考える簡単な方法は、機能の重複がなく、関連する機能を個別のモジュール、コンポーネント、またはクラスに明確に分離することです。したがって、別の関数と同様の関数が必要で、コードのコピーをカットアンドペーストしてから変更すると、まとまりが減ります。新しいケースを処理するために元のケースを変更すると、新しいケースが既存の機能に明確に関連しているため、まとまりが増します。言い換えれば、プログラムが特定のことを実行する必要がある場合、その回数や場所に関係なく、最大限の結合を実現するには、そのことを実行するコードが1つだけ存在する必要があります。同時に、特定のクラス、モジュール、またはコンポーネントには、単一の責任領域が必要です。

CodeWikiが言うように、結束は通常、結合と議論されます。結合では、特に厳密なインターフェースが注意深く計画されていない場合、2つは互いに反対に作用する可能性があります。凝集度に関するグーグルの記事の多くはオブジェクト指向デザインに関連していますが、凝集度と結合度はオブジェクト指向に限定されていません。

于 2009-02-24T10:14:15.990 に答える
0

整然とした、論理的で、審美的に一貫したパーツの関係によって特徴付けられます。「首尾一貫した議論」 - http://www.websters-online-dictionary.org/definition/coherentから

于 2009-02-24T09:29:05.117 に答える