2011-01-05 1 views
1

このフォーラムには、結合と結合の例を含む多くの良い例がありますが、私はそれを自分のコードに完全に適用するのに苦労しています。コード内で変更が必要な部分を特定できます。 Javaの専門家が自分のコードを見て、どのような面が良いか悪いかを私に説明することができますか?私はそれを自分で変えても構いません。それは...その多くの人々がお互いに反対しているようだと、私はそれが難しい実際の原則を従うことを理解するために探してるだけだCoupling/Cohesion

+2

は、コードを投稿し、あなたは –

+0

は、私はあなたにそれを電子メールで送信することができます支援が必要な場所に特異的であること? – user559142

+0

個人的に電子メールは、このフォーラムの目的を凌駕します。公表された答えは、質問の質問者だけでなく、他の人にとっても有益です。 – Raedwald

答えて

1

私はアランさんとジェームズの著書Design Patterns explained -- A new perspective on object-oriented design(ISBN-13をお勧めすることができます:978から0321247148 ):

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

それは素晴らしい本を約-持っていますが、オブジェクト指向設計における凝集とのカップリングを含む decissions、-です。

+0

ありがとう、私は将来の発展のためにそれを得るでしょう。私は来週の私の試験の準備のためのアプリを開発しています - だから今は時間がありません!しかし、推薦のおかげで。 – user559142

3

まずは、このようなさまざまな回答を得る主な理由は、これが本当に時間の経過とともに芸術になるということです。あなたが得た意見の多くは、固い早いルールや事実に沸き立ってはいませんが、それ以上に一般的な経験になります。これを10〜20年経った後、痛みの原因となったことや、やり直しを避けたことを覚えています。多くの答えはいくつかの問題では機能しますが、意見を決定するのは個人の経験です。

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

主なアイデアは、あなたのコマンド "add child"、 "add parent"が別のクラスになるということです。単一のコマンドのロジックは、テストと変更が容易な単一の小さなクラスにまとめられています。そのクラスはあなたのメインクラスから作業を行うために "実行"されます。このようにして、メインクラスはコマンドラインの解析だけを処理すればよく、そのほとんどがFamilyTreeの知識を失う可能性があります。どのコマンドラインがどのCommandクラスにマップされているか知っていなければなりません。

これは私の2セントです。要するに

+0

あなたの返信に感謝します... GoFの本は何ですか? – user559142

+0

@ user559142 - 申し訳ありません。著者のおかげで一般的にGang of Fourと呼ばれていますが、実際のタイトルは「デザインパターン:再利用可能なオブジェクト指向ソフトウェアの要素」です。ほとんどのソフトウェアエンジニアがその図書館で持っている本の1つです。あなたが守っているものの1つ。 – rfeak

+0

ああありがとう。私はそれを調べなければならないでしょう。コードの残りの部分は大丈夫だと思いますか? – user559142

1

:ソフトウェア工学における

結束は、実際の生活のように、全体を構成要素は、(私たちの場合のクラスを言わせて)彼らは実際に一緒に属していると言うことができるどのくらいです。したがって、これは、ソフトウェアモジュールのソースコードによって表される機能の各部分がどの程度強く関連しているかの尺度です。

クラス内のメソッドがプライベート属性のいずれかを使用しているかどうかは、オブジェクト指向の観点から結束を調べる1つの方法です。

ここでの議論はこれよりも大きいですが、高結束度(または結束の最も良いタイプ - 機能的結束性)は、モジュールの一部がすべてモジュールの明確なタスクの1つに貢献しているためです。

カップリングとは、単純に言えば、あるコンポーネントが(あるとは限りませんが)クラスの内側の動作や内部の要素、つまり他のコンポーネントの知識の量をどれくらい知っているかです。

疎結合は...実用可能少なくとも程度に互いに依存し、長いにおいて

これらのコンポーネントように、システムまたはネットワーク内のコンポーネントを相互接続する方法であって、

I wrote a blog post about this.これについては、例などで詳しく説明します。また、これらの原則に従うべき理由の利点についても説明します。私はそれが助けることができると思う...

0

カップリングは、各コンポーネントがシステムの他のコンポーネントに依存する程度を定義します。 2つのコンポーネントAとBがある場合、Aが変更された場合、Bのコードはどれくらい変更する必要があります。 結束は、単一のソフトウェアコンポーネントのさまざまな機能がどの程度密接に関連しているか、または強く関連しているかを表します。これは、クラスが何をするかを表します。 結束度が低いということは、クラスが多種多様なアクションを行い、それが何をすべきかに集中していないことを意味します。結束度が高いということは、クラスが何をすべきか、すなわちクラスの意図に関係するメソッドのみに集中していることを意味する。 注:APIが良好であると、結合が緩くなり、凝集力が高くなります。 常に避けなければならないタイトカップリングの1つの特に嫌な形の1つは、相互に直接的または間接的に依存する2つのコンポーネント、つまり依存サイクルまたは循環依存関係です。下記のリンクで 詳細な情報http://softwarematerial.blogspot.sg/2015/12/coupling-and-cohesion.html