netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2006-07-17 [長年日記] ▲
_ [読書] Heuristics 本の続き ▲
昨日の続きで Arthur J. Riel: Object-Oriented Design Heuristics を読む.1章読むのに2時間ぐらいのペース?
4章はオブジェクトの使用(Use)と所有(Containment)についての説明.所有しているオブジェクトはちゃんと自分で使う(その参照を外部に提供しない)とか,良く知られた指針が多い.
5章ではクラスの継承なんかについては丁寧に触れられていた.紹介されてる改善例の中に,今では Strategy パターンや Composite パターンと呼ばれているものを発見.デザインパターンというのが良く考えられて作られているものだというのがちょっと分かった.
オブジェクトの参照については,あんまりたくさんあると複雑になるから6個ぐらいまで,少ないほうが良いと言ってるのに対して,クラスの継承については,「継承しても継承元は複雑にならないから」別に気にしなくていいと述べていたりする.
クラスの継承階層について,「正しく継承を使っているのであれば,継承の階層は深ければ深いほど良い」という意見を見たのはたぶん初めて.ただ,10を超えたあたりからクラス継承階層が把握しきれなくなるので,GUIツールなんかを使ったサポートで把握できる範囲(何もなければ6段程度)で使うのが妥当,といったふうに書いていた.継承階層の幅(1つの基底に対する派生クラスの数)については,「多い=基底クラスがうまく再利用されている」なので,こちらは普通に多くて良いらしい(ただ,クラスでないものまでクラスにしてしまうことがあるので気をつけるべし,というのは書いてあったが).
深ければ深いほど良いというのは,多段階の継承によって,差分で細かくクラスが定義されているほうが,再利用しやすいと考えていたりするのかもしれない…….
知らなかったのでいちおうメモ: C++ で,superclass/subclass ではなく「基底クラス base class」「派生クラス derived class」という呼び方をするのは,スーパークラスが持つデータメンバーはサブクラスのデータメンバーの subset になっている,といった紛らわしさを避けるためらしい.