K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>> 俺がプログラミングを初めてまだ7年、オブジェクト指向が分かっ >> てきたのはここ1、2年ほどのことですのでね。 > >意外と長いんですね。 >私はプログラミング歴は24年ぐらい、オブジェクト指向に関しては >プログラミング言語C++第1版の和訳や、Smalltalk-80のオレンジブッ >クの和訳が出た頃からですから、20年弱くらいですかね。 >その前に、先輩から米国byte誌のSmalltalk-80特集号を見せてもらっ >たこともありましたが。 > >> 正方形は長方形のサブクラスであるとしても成り立つ場合は既に >> 書きました。is-a と LSP をどうしても両立させられない例を一 >> つでも出していただけませんか。 > >CES さんご自身が、正方形を長方形のサブクラスに『しない』方が >いい場合があると、[709]で認めているじゃないですか。常識的に >は、正方形 is-a 長方形ですから、当然、正方形は長方形のサブク >ラスとして継承関係を結ぶべきですし、Robert C. Martin 氏のエッ >セイでも、その方法をまず勧めています。しかし、そうしない方が >いい場合もあるわけですから、オブジェクト自身の is-a は必ずし >も判断基準に使えません。Robert C. Martin 氏が、エッセイの >「本当の問題」「何が悪いのか?」「Design By Contract」のとこ >ろで説明しているのは、そういうことです。オブジェクト自身の >is-a で考えるのは誤りであり、オブジェクトの振舞いに関する >is-a で考えないといけないのです。前に出た円と楕円の話も同じ >です。 > >このあたりは、和訳を読むよりも、原文 >http://www.objectmentor.com/resources/articles/lsp.pdf >の "What Went Wrong" のところを読んだ方が、むしろ理解しやす >いかもしれません、「a Square object is definitely not a >Rectangle object.」と書いてありますから。和訳の「決定的な違 >いがあるのです。」という表現では、残念ながら、ここの is-a と >is-not-a のニュアンスが消えてしまっています。私は原文の方を >先に読んだので、ここのところが非常に強く印象に残りました。 > >なぜ、オブジェクト自身の is-a 関係が継承関係の設計に使えない >場合があるのか、そのことを説明しているのが LSP です (ただし、 >正方形や円のケースでは、LSP 以外にも、メモリ効率という別の理 >由もあります)。継承関係の設計において、オブジェクト自身の >is-a 関係は使えない場合がある弱い判断基準なわけですが、LSP >は常に使える絶対的な判断基準なわけです。実はLSP(オブジェクト >の振舞いに関する is-a) の方が、オブジェクト自身のis-aよりも >むしろ本質的な原則なわけです。 > >現在では、has-a の関係は、継承よりも委譲を使うのが良い解だと >されていますが、昔は has-a でも継承を使うことが良くありまし >た。今でもたまにそういうプログラムを見ることがあると思います。 >これも、アプリケーションを限定すれば、has-a で LSP を満たす >場合があることから来ているわけです。has-a で継承して問題のな >いアプリケーションは、オブジェクト自身の is-a 関係で継承して >問題のないアプリケーションよりも、はるかに少ないので廃れてき >ているわけですが。 >has-a が廃れてきているのに is-a がそうではないのは、オブジェ >クト自身についてis-a の関係が成り立つ場合のほとんど(ただし全 >てではない)で、同時に、オブジェクトの振舞いに関する is-a 関 >係(すなわちLSP)も満たすからです。 > >> よろしければ、おすすめの本を紹介していただけないでしょうか。 > >今回紹介したエッセイ自身を含んだ、Robert C. Martin 氏の >「アジャイルソフトウェア開発の奥義」はいかがでしょう? >http://hamasyou.com/archives/System/aeeoeeueaconoeoeass.php >http://hamasyou.com/archives/System/aeeoeeueaoeeoeaass.php >に長めの紹介があります。 >ただ、和訳だと上述したように、ニュアンスが失われる部分はある >でしょうね。また、data中心でモデリングした結果の扱いについて >は、この本の主張に異論がある場合もあるでしょう。この本では常 >にOOAを優先すべしという方向ですが、data中心でモデリングした >結果の方を優先した方がいい場合もある筈です。 > >私は、Robert C. Martin 氏自身の名前は、亡くなられた石井勝さ >んのページで知りました。 >http://www.objectclub.jp/community/memorial/homepage3.nifty.com/masarl/article/oo-principles.html >石井さんがこのページを書かれたのは1999年ですね。 >今ではLSPは有名な原則ですが、これが広まったのは Liskov 氏自 >身の功績というよりは、Robert C. Martin 氏の功績の方が大きい >と思います。私がこの法則を知ったのも今回のエッセイを読んだ >からですし、google で The Liskov Substitution Principle を >検索して最初に出てくるのも、このエッセイですし。
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!