2011-08-10 16 views
1

私は、クラスに名前を付ける際の考慮事項を理解しようとしています。あなたが次の間で決める方法は何ですか?私は正しいか間違っている私は、私がモデル化しています何を決定する必要があり、そのだけの方法を答えるが本当にありません推測 :単にクラスの名前をつけて、クラスに名前を付けて属性を付けたり、その属性をクラス名に入れていいのですか?

student = SmartStudent.new 

Editを使用して対

student = Student.new(:smart) 

+1

クラスモデリングとは何ですか? 'SmartStudent'、または' Student'は 'smart:'になりますか? – Oded

+0

@Odedあなたの質問は本当に私の考えを得た。私は正直なところ、2行のコードとの違いはないと思っていました。私は後者をスマートにする生徒をモデル化しようとしています。 – elliance

答えて

0

あなたはあなたの自己に尋ねる必要があります。生徒の属性によって生徒は本当に異なる生徒になりますか?

可能であれば、私が提案した最初の解決策を使用することをお勧めします。一般に、学生のタイプが成長すると、学生のクラスが拡大し、すべてのクラスを適切に処理することが困難になるため、学生タイプの階層を展開する方が簡単です(コンポジション対継承を参照)。

一方、Smart学生クラスが本当にカスタムビヘイビアを持っていて、メソッドオーバーライドなどを使用して、そのクラスの学生タイプを確認するのではなく、そのクラスに対して操作を実行する場合は、継承はオプションになる可能性があります。私はそれから離れています。

正解について詳しく教えてください。それはあなたのデザインに依存するので、あなたの質問に簡単なイエスかノーと言うことはできません。

編集: この点も考慮してください:学生は属性以上のものを持つことができますか?そうであれば、最初のアプローチを決定的に使用する必要があります。複数の属性(例:スマートとファット)を持つ学生タイプをモデリングすることは不可能(または少なくともトリッキー)かもしれません。

1

一般的に、クラス名は、それらが表す最も一般的な形の名前を付けたいと思っています。だからあなたの例では、名詞は学生です。 スマートは、その名詞を記述する形容詞です。形容詞は学生の知性を表す。私の寄付はインテリジェンスになるでしょう。

そのように私が持っている可能性があり:

ビル=新しい学生
Bill.intelligence =スマート

ボブ=新しい学生
Bob.intelligence =愚か