2012-03-31 9 views

答えて

3

基本的に、Traitsは無関係なクラスがコードを共有する方法を提供します。

ここに(確かに考案された)例があります:跳ねるボールを描くクラスと幸せな顔の絵文字を描くクラスは、どちらも円を描く必要があります。彼らはおそらく共通のスーパークラスを共有していないでしょう。したがって、円描画コードを継承することはできません。特性を使用すると、円の描画コードをTShapeに置き、それぞれがdrawCircleからTShapeを使用すると言います。これにより、各クラスに独自の実装があるのではなく、すべての円描画コードがTShapeに残ります。

(私が不自然言ったように。あなたはこれは単なる説明のためである。共通ライブラリに呼び出すと思い描くため。)

さて、あなたは確かに関数を作成し、それぞれにそれを割り当てることによって、これを自分で行うことができますプロトタイプ。しかし、あなたのコードベースが成長するにつれ、それは扱いにくくなります。

私の経験則によれば、形質は相互に使用することができますが、それ以外の場合は、直接的にインスタンス化可能なクラスでのみ形質を使用しようとします。 Aの形質をX、クラスBAから継承し、形質をYに設定すると、毛むくじゃらの原因になることがあります。特に名前の変更が行われた場合

+0

"関数を作り、それを各プロトタイプに割り当てることで、あなた自身が確かにこれを行うことができますが、あなたのコードベースが成長するにつれて扱いにくくなります。":なぜ独立した関数を簡単に作成できるので、関数を追加し、必要な数のプロトタイプに追加します。 – user310291

+0

私の 'drawCircle'の塗りつぶしコードを' fillShape'にリファクタリングすることにしました。特性で、私は特性に関数を追加することができ、それはすべての私の 'drawX'関数で利用可能です。プロトタイプを使って同じことをするには、 'drawcircle'が使われているプロトタイプにそれを付ける必要があります。そのオブジェクトが塗りつぶしを気にするかどうか。 –

+0

ありがとう、私は答えとしてマークします。なぜ地球上で私の質問が閉じられている:( – user310291

関連する問題