継承の乱用

http://d.hatena.ne.jp/calotocen/20051103

いまさらあえて言うまでも無いけど、「ボールの位置を管理するクラス」がPointを継承するというのは間違い。侍 is a 人 だから 侍 extends 人 とするのと同じぐらいのミス。

継承が表現する「is-a」は、完全なサブセット関係でなければならない。新たな概念を導入するのは間違いである。

人のオブジェクトは、職業という属性を持つことがある。侍は職業である。と、モデリングすれば、転職を「職業という属性を変更する」というきわめて自然な形で実装できる。侍 extends 人としてしまうと、転職するには一回死んで来いってなるし、人外の高等知能生物がいたときに侍になれない。

とりあえず、継承したクラスが継承元にはないpublicなメソッドを持っている時点で、一回疑うべきである。

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。