Effective C++読書メモ #32

2015年4月30日木曜日

Item 32: Make sure public inheritance models "is-a."
前回: Effective C++読書メモ #31
前回はコンパイル時の依存関係を減らすためにHandlerパターンやInterfaceパターンを使うこともできて、これらによるオーバーヘッドを避けたければprodビルド時にこの部分を差し替えられるような方法をとるのが良いよというつらそうな話だった。
今回はpublic継承の話。「「public継承はis-aだよ」」
えらく寓話的に、とにかくしつこく頭へ刷り込むように書いてある。
他のトピックはこの周辺を補強するもの。
  • ある振る舞いを持たない継承関係に関して、実行時エラーを出すようにするよりはコンパイル時にエラーを見つけられるようにしたほうが良いよという話
  • public継承をすると親の挙動は常時維持されるかというとそうではないよねという議論
  • rectangleとsquareの実装については分かりやすかった
    • 親のクラスで定義されているフィールドの一部を子の側でいじるなど、親の想定している状態に対して手を加えた場合に挙動が変わっても仕方ないねという話で、それは仕方ない
他の策としてhas-ais-implemented-in-terms-ofが挙げられている。これらはもう少し後のチャプターで出てくるのでその時に。

0 件のコメント:

コメントを投稿