継承に警鐘
「継承より委譲を」を読んでふと思った。オブジェクト指向言語を語る際、「継承」という概念を真っ先に教えるということが多いと思われる。C++の解説書なんかだと、生物の進化みたいな樹形図を見せられて、「これが継承だ=」ってな感じ。こういう教え方をされると、継承を使わないとオブジェクト指向じゃない、みたいなイメージが作られちゃって、無理やりにでも継承を使ったちぐはぐなプログラムになっちゃいがち。僕は、昔から継承という機能を疑問視してて、(もちろん、便利なこともあるけど)どちらかと言うと弊害の方が多いのではないか、と。
例えば、多重継承はJavaでは禁止されちゃった(でもインタフェースの多重継承は残ってる)けど、多重継承なんてものはなくてもかまわないぐらいだと思う。現に、去年、とある仕事で作ったコーディング規約では、多重継承は禁止した。僕自身、オブジェクト指向プログラマ稼業を10年近くやってるけど、多重継承が必要になったことはない。全部デリゲーションで済んじゃうんだ。また、今年度の頭に、会社の新人相手にやった、「オブジェクト指向講座」でも「継承」は一切教えなかった。その前に、「オブジェクト指向」ってどういうふうに考えればいいんだ?ってところを教えてあげる方がよっぽど親切だろうと思う。継承はオブジェクト指向の本質でもなんでもなくって、あくまでも副産物。本質はあくまでも「抽象データ型とメッセージパッシング」なのである。
Posted by money at January 28, 2004 5:07 PM
| TrackBack