[709] Re:オブジェクト指向「初」入門
投稿者:CES
2007/02/20 02:13:25
> リンク先の文章で示されている「正方形を長方形のサブクラスにするのが誤り」という話が的外れであることは、ずいぶん前に書いてますよ。
と言うだけでは何なのでちょっと補足。
「正方形は長方形のサブクラスである」というのは、数学的に見れば、確かにそうです。
しかし、長方形の数学的な性質とは、「4つの角が全て直角である四角形」というだけであって「縦と横の長さが独立していなければならない」という要件はありません。
リンク先の文章では、その数学的には必要とされていない要件を要求しているのですから、もはや「数学的には正方形は長方形のサブクラスだ」という前提は成り立たないのです。
では、正方形クラスを長方形クラスのサブクラスとして設計するのは誤りなのでしょうか? そうとは限りません。
数学的に正しいプログラムを書く必要があって、長方形の縦と横の長さが独立していなければならないという要件が無いのなら、この設計は全く妥当なものです。
「正方形は長方形のサブクラスであるか?」という質問に、唯一の正解はありません。
答えは、数学に厳密である必要がある場合には YES 、そうでない場合には NO になります。
提示された文章では、それがちぐはぐだからおかしなことになっているのです。
[653] あたりで言っているのはそういうことです。