2009-02-20 11 views
5

私は、クラスを作成する理由と「あなたの要件の名詞を探してください」というようなことについて、すべての本を読んだが、十分ではないようだ。私のクラスは私にとっては厄介なようです。私はクラスを比較してうまく設計されているかどうかを知るために何らかのメトリクスがあるかどうかを知りたいと思います。そうでなければ、私は適切なクラスのデザインのヒントを得ることができる最も尊敬OOの教祖ですか?適切なクラスを設計する

+0

+1また、 – krebstar

答えて

2

データベース設計、正規化の具体的な概念に精通している場合は、その答えは簡単です:それは役に立たない場合は、データ中心のクラスでは、第3正規形で

をエンティティを表す必要があり、これを試してみてください代わりに:

  • クラスは、データ要素の集合であり、それはあなたのモデルに一つのことを表している必要があります。すなわち、クラス
  • それらを操作する方法は、特異な責任を持つべきです。それが複数のものを表すなら、それは複数のクラスでなければなりません。
  • クラス内のすべてのデータ要素は、論理的に互いに関連付けられている必要があります。そうでない場合は、二つ以上のクラス
  • に分割クラスのメソッドのすべてが彼らの入力パラメータとクラスのデータ要素に対してのみ動作しなければならない - に関する限りだLaw of Demeter

を見ます私は一般的な抽象的なアドバイス(長いエッセイを書くことなく)で行くことができます。特定のアドバイスが必要な場合は、批評のためにクラスの1つを投稿することができます。

+0

@ [Celebrus]:最初に良いクラスをデザインする方法がわからない場合は –

0

私はオブジェクトデザインが科学と同じくらい芸術だと思います。クリーン&エレガントなクラスを設計する方法を理解するには時間と実践が必要です。おそらく、単純なクラスの例を挙げることができれば、SOユーザーが満足できないように設計しているので、ポインタを批評して指摘することができます。私はあなたが既にテキストで読んだことの外に一般的な答えがあるかどうかはわかりません。

+0

も知りたいですか?どの言語を使用していますか? OODは言語に依存しませんが、クラス内の言語固有の機能を使用すると、より洗練されたものになります。 – Jason

0

私が個人的に知っている最も尊敬されたOO教祖はStackOverflowです。ここにあなたのクラス名を入れて、私はあなたが良い数のレビューを得ると思う。

+0

良いまたは不敬ですか? – orbfish

0

クラスは通常、問題のドメインの概念をモデル化するために使用されます。明確に定義された問題(ユースケースとも呼ばれます)を取得すると、すべての参加者を識別できます。参加者の一部は、設計しているシステム固有のものになります。あなたのシステムとして一つの大きな黒いボックスから始めましょう。あなたがより多くの情報を持っているときにそれを分解してください。問題のドメインの概念に分解できないレベルがある場合は、クラスを取得し始めます。

しかし、これは非学者の主観的な見解です。私はメニューに塩のピンチをお勧めします。

4

あなたがリファクタリングしたときに、きれいになってから汚れてしまうクラスを作成することは、OOの中核部分です。多くのデベロッパーは、完璧なクラスデザインに飛び込もうとしています。私の経験では、それは不可能です。代わりに、あなたは遭遇して問題を解決し、その後リファクタリングします。デザインが出現すると、クラスやインターフェイスをベースにして収穫することができます。

+0

ありがとうございます。クラスをリファクタリングしてより良いものにする方法もわからない可能性があります。;-) –

+0

それは本当ですが、彼の意見も真実で、どこかで逃しました。 – orbfish

0

メトリック?そうではありません、あなたはそれらを信頼するでしょう。

クラスは、プログラムを動作させ、複数のリビジョンでメンテナンスできるようにしていますか?

「はい」の場合はOKです。

いいえの場合は、自分に尋ねて、どういうわけではないのかを尋ねてください。

2

構造体の代わりに動作に注目してください。オブジェクトは、行動と責任を持つ「生きている」エンティティです。あなたは物事をするように彼らに言う。このようにモデル化するのに役立つCRCカードのアプローチを見てください。

関連する問題