質問

このフォーラムには、結合と結束の例を含む多くの良い例がありますが、私はそれを完全にコードに適用するのに苦労しています。私のコード内の部品を変更する必要がある可能性のある部品を識別できます。 Javaの専門家なら誰でも私のコードを見て、どんな側面が良いか悪いかを説明できるでしょうか。私はそれをまったく変えても構いません。それは、多くの人々がお互いに反対しているように見えるだけであり、私は実際にどのような原則が従うべきかを理解するのが難しいと感じています...

役に立ちましたか?

解決

アランとジェームズの本をお勧めします 説明されたデザインパターン - オブジェクト指向のデザインに関する新しい視点 (ISBN-13:978-0321247148):

Cover: Design Patterns explained -- A new perspective on object-oriented design

それは素晴らしい本です がありますis-a オブジェクト指向のデザインにおける結束と結合を含む決定。

他のヒント

まず、あなたがそのようなさまざまな答えを得る主な理由は、これが本当に時間の経過とともに芸術になるということです。あなたが得た意見の多くは、激しい速いルールや事実に要約されていません。それは一般的な経験に帰着します。 10〜20年後、これを行うと、痛みを引き起こしたこと、そして再びやり直したことをどのように避けたかを思い出し始めます。多くの答えはいくつかの問題に取り組んでいますが、自分の意見を決定するのは個人の経験です。

私があなたのコードに変更する本当に大きなことは本当に1つだけです。コマンドパターンと呼ばれるものを調べることを検討します。これに関する情報は、WebまたはGOFの本で見つけるのは難しいことではありません。

主な考えは、それぞれのコマンドが「子を追加」、「親」が別のクラスになるということです。単一のコマンドのロジックは、テストと変更が簡単な単一の小さなクラスで囲まれています。そのクラスは、メインクラスから作業を行うために「実行」する必要があります。このようにして、メインのクラスはコマンドラインの解析に対処するだけで、家族の木の知識のほとんどを失う可能性があります。どのコマンドラインがどのコマンドクラスにマップされ、それらをキックオフするかを知る必要があります。

それが私の2セントです。

要するに:

ソフトウェアエンジニアリングの結束は、実際の生活と同様に、全体で構成される要素(私たちの場合はクラスと例えば)が実際に一緒に属していると言えることです。したがって、ソフトウェアモジュールのソースコードで表現された各機能性がどれほど強く関連しているかの尺度です。

OOに関して結束を見る1つの方法は、クラスのメソッドがプライベート属性のいずれかを使用している場合です。

現在、議論はこれよりも大きいですが、高い結束(または結束の最高のタイプ - 機能的な結束)は、モジュールがすべてモジュールの単一の明確なタスクに寄与するため、モジュールの一部がグループ化されるときです。

簡単な言葉で結合することは、1つのコンポーネント(クラスを想像することを想像しますが、必ずしもそうではありませんが)は、別のコンポーネントまたは内側の要素、つまり他のコンポーネントの知識をどれだけ持っているかについて知っています。

ゆるい結合は、システムまたはネットワーク内のコンポーネントを相互接続する方法であり、それらのコンポーネントが互いに互いに依存することは、実際に可能な限り最小限に依存しています…

長い間:

これについてのブログ投稿を書きました。 これは、例などでこれらすべてを詳細に説明します。また、これらの原則に従うべき理由の利点も説明しています。私はそれが役立つと思う...

結合は、各コンポーネントがシステム内の他のコンポーネントに依存する程度を定義します。 2つのコンポーネントAとBが与えられた場合、変更が変更された場合、Bのコードの量を変更する必要があります。 Cohesionは、単一のソフトウェアコンポーネントのさまざまな機能がどのようにコヒーレントまたは強く関連しているかの尺度を定義します。クラスが行うことを指します。まとまりが低いことは、クラスが非常に多様なアクションを行い、それがすべきことに焦点を合わせていないことを意味します。その場合、高い結束は、クラスがすべきこと、つまりクラスの意図に関連する方法のみに焦点を合わせていることを意味します。注:良好なAPIは、ゆるいカップリングと高い凝集を示します。常に避けるべきである緊密な結合の特に忌まわしい形式の1つは、互いに直接的または間接的に依存する2つのコンポーネント、つまり依存関係サイクルまたは円形依存性を持つことです。以下のリンクの詳細情報http://softwarematerial.blogspot.sg/2015/12/coupling-and-cohesion.html

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top