継承

3pt

継承は悪

http://www.berniecode.com/writing/inheritance/

ボールを描くクラスがあって、それぞれボールを継承した上下移動するボールクラスとフェイドするボールクラスを作った。

しばらくして上下しつつフェイドするボールクラスが作りたくなった。上下クラス継承して上下フェイドクラスを作る?でもそれだとフェイドの機能が点在してしまう。

この問題を解決するのが委譲という方法だ。まずボールクラスに動作を直接書くのではなくて「上下」や「フェイド」そのものをクラス化する。後はボールクラスからそれぞれの動作を委譲して処理を呼び出す。

このように動作自体と対象を分離することはGoFデザインパターンのひとつでStrategy Patternと呼ばれている。

これを利用すれば上下する人とかフェイドする家とかも動作するコードを書かずに使うことができる。

EventListenerとかHandlerという単語が出てきたらだいたいこのパターン継承よく使ってたけど最近はこの方が良いということがよくわかってきた。では、どういう場合に継承使えばいいだろう?めどくさいとき?

結合度凝集度

http://www.bizlogic.co.jp/techinfo/reconsider/inherit.htm
http://www.objectclub.jp/ml-arch/magazine/82.html

高結合、低凝集になりやすい。

スーパークラスとサブクラスはかなり結合度が高い。スーパークラスの変更がもろにサブクラスに影響を与えてしまう。

前のボールクラスの例で機能が点在してしまうことや、それに継承することで不必要な機能まで使えてしまうことは凝集度が低いといえる。

「継承」について友人に書いてもらう。

あなたにとって「継承」とは?

ログインするとワンクリックでキーワードを投稿できます

ログインする 新規登録する

お気に入りの説明

1 pt
Inheritance 先祖や親戚から受け継いだものに頼り切って、 自分では最低限のことしかしないこと。 http://www.ruby-lang.org/ja/man/html/Ruby_CDD1B8ECBDB8.html 下記は過去記事 抽象的な...
もっと読む

他の人の「継承」を見る