400
Post/Edit Page
クラスTがクラスSを継承するならば、現存するSは既存のコードを破壊すること無く全てTに置き換えられるべきである。クラスを継承させるかどうかの判断に強力な材料を提供してくれる「リスコフの置換原則」だ。▼例えば楕円クラスを継承して円クラスを作るかどうかの判断。円は楕円の特殊形なので派生可能に思えるが、楕円には長径Aと短径Bを設定する関数が公開されているだろう。これを派生クラスがどう扱えばよいか。公開をやめて直径の設定関数のみとすれば、原則に違反するのは明らかだ。▼故に、これらは残さざるをえない。代わりに、各々の設定関数が内部的に直径Rを更新するような設計にしたとする。こうすると、今度はA≠Bを確認した後で楕円を生成したはずのクライアントが、B/(A−B)を計算したところでクラッシュしてしまう。これは立派な既存コードの破壊行為だ。つまり、円クラスは楕円クラスを継承してつくるべきではないのである。
pass:
Draft