「JavaScriptで継承を使わないプログラミングスタイル」より
オブジェクト指向設計について上手くまとまってる良記事。
大昔に C 言語を使ってオブジェクト指向プログラミングをやった経験のある私としてはある言語が「オブジェクト指向」かどうかなんて激しく下らない問いである。
というか「それおまえ絶対に『オブジェクト指向』が何か分かってないだろう」と言いたくなる。
「オブジェクト指向」では設計(design)の良し悪しが全てである。
上述の記事も設計の重要さを物語っている。
たとえば「継承」は「is-a 関係」であるという初歩の初歩さえ知っていれば「継承による差分プログラミング」という発想自体がナンセンスだと気付くはずだ。
(DRY (Don't Repeat Yourself) 原則を忠実に守ろうとしてそういう方向に走りがちなのは分からなくもないが DRY 原則を守るのが目的なら継承にする必然性はない)
設計さえできていれば,オブジェクト指向」設計をどの言語で実装するかは比較的どうでもいいことで,強いて言うならプロジェクト・メンバ間の実装スキルのばらつきとかメンテナンスの容易さとかいった観点で言語を決めればいいのである。
普通はシステムに登場する全ての class (プレイヤーや機能など)を列挙して,それらを整理する過程で class 間の関係が決定されるはずである。
(実際には整理するパターンというのは大体決まっている。最初に挙げた記事ではそのいくつかのパターンを挙げて説明している。大昔はこういうのなくて苦労したんだよなぁ)
それを端折っていきなり実装しようとしてもメンテ不能の混沌としたコードが生成されるだけだ。