[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends-ml 12219] Re: 「デザインパ ターンとともに学ぶオブ ジェクト指向のこころ」第 1 回議事録
言い出しっぺの村山です.
・is-a,has-aのより良い表現
「C++コーディングスタンダード」で確認 => 宿題.
C++ in-Depth Seriesの
「C++ Coding Standard -101のルール,ガイドライン,ベストプラクティス-」
では「is-a」の代わりに,
「works-like-a(〜のように働く)」と
「usable-as-a(〜と同じように使用できる)」でした.
というのを紹介していました.
新人研修を担当される方なら、ネタに使えそうですね.
「is-aという表現はもう古い.これからはworks-like-aというべきだ.
この表現の違いこそが,継承の本質を表している.」
とね.
--------------------------------------------------------
「37.Public継承は代入互換(Substitutability)を実現する.
再利用するための継承ではなく,再利用されるための継承を.」
「実世界のアナロジーを不適切に持ち込むと,public継承の「is-a」は
誤解されてしまう.正方形は数学的には長方形であるが,Squareの振る
舞いはRectangleではない.
このようなわけで私たちはis-aの代わりに,より誤解の産みにくい
「works-like-a(〜のように働く)」を使うようにしている.あるいは,
こちらの方が好みであれば,「usable-as-a(〜と同じように使用できる)」
を使っても良い.
public継承は再利用のためにあるのだが,プログラマの多くがこれに
ついて誤った解釈をしている.既に指摘したとおり,public継承の
目的は代入互換を実装することであって,派生クラスが基本クラスの
コードを流用して実装するためではない.」
--------------------------------------------------------