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

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

むぅ、abstract case class が使いこなせない・・・#scala

2010-05-31 01:37:12
くっくっkura 🇯🇵🦀 @PG_kura

class A { def func(): Unit = {} } があって class B extends A {} としたとき、B.func を private 化するってできないのかにゃ? #scala

2010-05-31 02:07:29
くっくっkura 🇯🇵🦀 @PG_kura

@backpaper0 お!scala er が起きてる!すみません、お忙しくないならこれ→ http://twitter.com/PG_kura/status/15053549659 についてご存知かどうか返信頂けませんでしょうか?

2010-05-31 02:13:54
野比無能丸 @cknbstr

それできちゃうとリスコフ置換原則が QT @PG_kura: class A { def func(): Unit = {} } があって class B extends A {} としたとき、B.func を private 化するってできないのかにゃ?

2010-05-31 02:15:30
くっくっkura 🇯🇵🦀 @PG_kura

あ、NGですかー。普段 C++ 使ってて、そっちでできるもんだから出来たりしないかなーと思って post したです。ありがとうございます!RT @cknbstr: それできちゃうとリスコフ置換原則が QT @PG_kura: class A { def func(): Un...

2010-05-31 02:17:32
くっくっkura 🇯🇵🦀 @PG_kura

@backpaper0 すみません、解決しました。不可でした。夜分失礼いたしました。

2010-05-31 02:18:37
このツイートは権利者によって削除されています。
梶本裕介 @uskz

@cknbstr 可視性の判断と実装の選択が分離されてるならLSPには違反しないのでは?

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

@backpaper0 C++ ではできてしまいます。Java はこういう C++ の甘いところ(他に検査例外とか)をきれいにした印象ですよね。出来ない方が自然だと思います。

2010-05-31 02:25:07
梶本裕介 @uskz

@cknbstr a.func()があったとして,可視性がaの型から静的に決定するとしたらfuncは呼出可能,そして実行時にaがBのインスタンスに動的に束縛されていれば,Bのfuncの実装が使われる,と.

2010-05-31 02:30:24
梶本裕介 @uskz

@cknbstr で,Bのfuncの実装の事前条件がAのfuncのものと等しいかより弱く,事後条件が等しいかより強ければ,LSPには違反しないんじゃないですかね

2010-05-31 02:32:27
くっくっkura 🇯🇵🦀 @PG_kura

@uskz def callFunc( val a: A ) = a.func(); というプログラムがあったとして、B extends A ならばこのプログラムは def callFunc( val a: B ) = a.func(); と置換できる、というのが LSP でわ?

2010-05-31 02:39:01
梶本裕介 @uskz

ぎゃーScalaの構文がまったくわからない

2010-05-31 02:40:00
くっくっkura 🇯🇵🦀 @PG_kura

失礼ww http://ideone.com/6scLC の「ここから」「ここまで」の部分は、A extends B であるなら a = new B(); b.func(); と置換できるのが LSP ではないかと。 RT @uskz: ぎゃーScalaの構文がまったくわからない

2010-05-31 02:44:57
梶本裕介 @uskz

@PG_kura あれ?class B : A { }; A a; B b; f(A& x); とあった時に,f(a)をf(b)としても正しく動作しないといけないってのがLSPじゃありませんでしたっけ?

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

@uskz ん~、それは LSP に含まれるのかどうか・・・正直自信無いですねー。しかしここ http://bit.ly/2L5g9E を見る限り先の僕のやろうとしたことは違反になるかと。

2010-05-31 02:50:26
くっくっkura 🇯🇵🦀 @PG_kura

@uskz その URL の斜線部分の q が、この場合「func が呼び出し可能である」にあたるかと。

2010-05-31 02:51:59
梶本裕介 @uskz

@PG_kura What is wanted here is something like the following substitution property: If for each object o1 of type S there is an object o2

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

@PG_kura of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2

2010-05-31 02:52:24
梶本裕介 @uskz

@PG_kura then S is a subtype of T. -- Barbara Liskov, “Data Abstraction and Hierarchy,” SIGPLAN Notices, 23,5 (May, 1988).

2010-05-31 02:53:10
くっくっkura 🇯🇵🦀 @PG_kura

@uskz すみません、僕英語ちゃんと読めないですwww

2010-05-31 02:55:16
梶本裕介 @uskz

ぎゃーこのパソコンGhostscriptとか入れてない><

2010-05-31 02:56:15
くっくっkura 🇯🇵🦀 @PG_kura

いや、冒頭の日本語の部分だけでいいです。RT @uskz: @PG_kura おっとこの1999年の読めばいいのですね

2010-05-31 02:57:42
梶本裕介 @uskz

@PG_kura インターフェースの可視性が派生先でpublicからprivateに変更されて http://twitter.com/PG_kura/status/15055433392 のa = new A();をa = new B();に置き換えても,可視性の決定と(続く

2010-05-31 03:03:14