これはリスコフ置換原則か?

@uskz 先生と @PG_kura 先生の議論をお楽しみ下さい。
1
くっくっkura 🇯🇵🦀 @PG_kura

@uskz それはその通りなのですが"LSP に違反しない"と言ってしまうと語弊があるかなーと。A を利用するプログラムで型を B に入れ替えてもそのプログラムは相変わらず正しい、という定義を満たさなくなるのでやっぱり LSP 違反になる気がします。

2010-05-31 03:10:08
くっくっkura 🇯🇵🦀 @PG_kura

@uskz 先の例で言うとコンパイル通らなくなるわけですから。

2010-05-31 03:10:42
梶本裕介 @uskz

@PG_kura コンパイル通らないというのはプログラミング言語の仕様の問題でLSPとは別の話なのでは

2010-05-31 03:13:03
梶本裕介 @uskz

@PG_kura 先のwikipediaのものでも,qの引数の型を変えるとは読めないですし

2010-05-31 03:15:08
くっくっkura 🇯🇵🦀 @PG_kura

@uskz あー!失礼しました。先の僕のコードでは仰る通りでした。正しくはこっちです。http://ideone.com/J7awI

2010-05-31 03:16:24
くっくっkura 🇯🇵🦀 @PG_kura

@uskz コンパイル通らないのは確かに言語仕様ですが(続く)

2010-05-31 03:16:54
梶本裕介 @uskz

@PG_kura "A を利用するプログラムで型を B に入れ替えてもそのプログラムは相変わらず正しい、という定義"この定義がぼくの認識とずれが

2010-05-31 03:19:14
くっくっkura 🇯🇵🦀 @PG_kura

@uskz class B が外部に func を公開していないのであれば訂正させて頂いたコードのようなプログラムで(言語は問わないですが)置換不可になるのでは?

2010-05-31 03:20:37
くっくっkura 🇯🇵🦀 @PG_kura

@uskz 端的に言うと A を引数に取る関数に B のインスタンスを渡せるのだから B 側での private 指定は関係ない、ということを仰ってるのですよね?

2010-05-31 03:21:59
くっくっkura 🇯🇵🦀 @PG_kura

@uskz で、それは A という型にのみ依存したコードであればそうなのですが、クラスの利用者が B にまで依存したコードを書いている場合も当然あるわけで、

2010-05-31 03:26:06
くっくっkura 🇯🇵🦀 @PG_kura

@uskz そういうコードが B.func を private にすることで(クラス B が許さない処理をしようとして)不正になるのであれば違反が発生するので、そういう違反が発生しないような言語仕様になっているはずだろう、というのが @cknbstr さんの指摘だったのでは。

2010-05-31 03:28:47
梶本裕介 @uskz

@PG_kura http://ideone.com/J7awI これは,ここからここまでの部分に現れるAを全てBに変えるということで良いですか?

2010-05-31 03:30:56
くっくっkura 🇯🇵🦀 @PG_kura

@uskz で、7 行目がもし private にできるのであれば LSP 違反が発生し得る言語仕様になってしまうだろう、と。

2010-05-31 03:32:49
梶本裕介 @uskz

@PG_kura うーん,でもLSPってOOPにおける多相性の正しい使い方に関する話ですよね?頭が混乱してるのですがさっき提示いただいたコードのはどうもLSPとは別問題に思えて

2010-05-31 03:38:13
梶本裕介 @uskz

@PG_kura Liskovの最初の記述によると,"S型のオブジェクトo1の各々に対してT型のオブジェクトo2が1つ存在し,Tを使って定義されたプログラムPに対してo2の代わりにo1を使ってもPの振る舞いをが変わらない場合,SはTの派生型である"というのがLSPの定義

2010-05-31 03:41:35
くっくっkura 🇯🇵🦀 @PG_kura

@uskz なるほどー。僕は原文参照してないので、僕の理解の方が怪しいのかも知れないですね。僕がさっき提示した wiki の説明は

2010-05-31 03:46:04
くっくっkura 🇯🇵🦀 @PG_kura

@uskz "S が T の派生であれば"という書き方でしたが、"○○であれば S は T の派生型である"というのが原文なのであれば全く違うことを言っていたのかも知れません。

2010-05-31 03:47:05
くっくっkura 🇯🇵🦀 @PG_kura

@uskz なんか夜中まで付き合わせてしまってすみませんです m(_ _ )m。僕はぼちぼち離脱しますです。

2010-05-31 03:50:45
梶本裕介 @uskz

@PG_kura でもぼくが挙げたのは1987年のLsikovの最初のLSPに対する記述で,さっきのwikipediaのものはそれをLiskov(とJeannette Wing)が1994年に定式化したものなので,意味が違うとは思えないんですよね.

2010-05-31 03:56:22
梶本裕介 @uskz

@PG_kura 一度寝てから脳内整理してみます

2010-05-31 03:57:03