継承は害悪か。

継承の問題点と利点などについての興味深い議論をまとめてみました。
18
くっくっkura 🇯🇵🦀 @PG_kura

OOP で継承は害悪だとは思うけども、実際に継承を言語から消去したとして一般 PG に受け入れられる言語になり得るだろーか。

2010-12-31 18:04:33
@kassyi

@PG_kura 継承消したらOOPではなくなるのでは…?

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

@kassyi あ、OOP であることにはこだわらないです。

2010-12-31 18:06:15
M.K @ryutorion

@PG_kura 害悪と言い切るまでの凄まじい体験があったんだろうか,と気になってしまいました

2010-12-31 18:07:54
くっくっkura 🇯🇵🦀 @PG_kura

@ryutorion 体験とゆーか...。基底クラスのインターフェイス指針によって派生クラスの仕様が制限される上、並列プログラミングとも相性が悪いように思うので。

2010-12-31 18:10:43
M.K @ryutorion

@pg_kura 並列プログラミングと相性が悪い・・・それで,Goでは型の継承関係が除かれたんでしょうかね http://ow.ly/3wtZB 基底クラスについては,適当な設計をしていれば,そこまで問題は無いと思うのですが

2010-12-31 18:14:18
くっくっkura 🇯🇵🦀 @PG_kura

@ryutorion あー、そうそう。Go では継承無いんですよね〜。んと、基底クラスについては…例えば "オーバーライドされたメソッド呼んだら、派生先で基底クラスが予期していなかった例外投げるもんでライブラリが使い物にならなくなる" とかですね〜。

2010-12-31 18:18:59
はるじっく @haljik

@PG_kura ちゃんと「is a」の関係になるように気をつけて使えば継承も有用な概念だと思いますし、なければならない仕組みではあると思いますね。「共変」であることの表現とか継承関係じゃないとするとどう表現すればいいか思いつかないです。

2010-12-31 18:19:56
M.K @ryutorion

@PG_kura 予期せぬ例外は,普通にありそうですね.でも,継承を利用するメリットもあると思うので,結局トレードオフを考えて使うってのが正しいのかな,と

2010-12-31 18:21:47
くっくっkura 🇯🇵🦀 @PG_kura

@kwkmsj 継承の有用性は分かるのですが、そもそも Java 的な OOP が「クラスはひとつの責務を負いましょう」の名の下にカプセル化を推進しちゃうと、どっかでスパゲティ化 "しやすくなる" ような気がします。もちっと別の方向から継承の持つ有用性をカバーできないかなと。

2010-12-31 18:24:40
くっくっkura 🇯🇵🦀 @PG_kura

@ryutorion ですね〜。継承のメリットはメリットとしてあるのですがデメリットが比較的大きく思えるので害悪、と言っちゃったんですが。設計にあたってトレードオフが発生するのは当然としても、その両腕を別のモノにすげ替えられると良い気がするのですよね〜。

2010-12-31 18:28:08
M.K @ryutorion

@PG_kura 使い方によって,継承が良くも悪くも見える,という良い勉強になりました.並列プログラミングと継承の関係も面白そうなので調べてみたいと思います.

2010-12-31 18:29:42
Shinobu Izumi@WFH @shinobu_shiva

そろそろプログラミングのパラダイムシフトが近づいてきた感覚。RT @PG_kura: OOP で継承は害悪だとは思うけども、実際に継承を言語から消去したとして一般 PG に受け入れられる言語になり得るだろーか。

2010-12-31 18:31:36
はるじっく @haljik

@PG_kura たしかにそれは「is a」とか以前の問題としてありますねぇ。だれかが上空からの視点を持ってコントロールし続けない限りどんな概念を適用してもスパゲッティ化は避けられないのではないかとも思います。結局実装継承をやめるとかそういう方向ですかね。

2010-12-31 18:49:06
くっくっkura 🇯🇵🦀 @PG_kura

@kwkmsj 具体的な方法としてこれというものを見つけ出せてないので何とも言えませんが、Java 的なクラスってたぶん継承があるからこそ高い価値を有しているように思います。なので極端な言葉にすると「Java 的な OOP の方向は行き詰まってる」とは思うんですよねぇ。もやもや。

2010-12-31 18:54:45
はるじっく @haljik

@PG_kura うーん。Java的なOOPでないOOPというと動的型付けでのOOP(プロトタイプベース)とかそっちかと一瞬思ったのですがたぶんそういう意味ではなさそうですね。OOPが行き詰まってるのではないかと。

2010-12-31 19:30:45
はるじっく @haljik

@PG_kura あー。Java的には多重継承を許さないので単一責務っていう縛りがよりつよいというかそっち方向の問題かな。Scalaの多重継承(Trait)なんてなんというか1つのクラスに多面的な性質を持たせるようなもんだし。単一責務って感じの閉じ方ではないね。

2010-12-31 19:40:51
くっくっkura 🇯🇵🦀 @PG_kura

@kwkmsj Scala のアプローチ( trait はもちろん言語の他の部分の性質も含めて)は現実的な落としどころとしてアリだと思いますね。日頃こんなこと(http://goo.gl/rt1kE)ばっかり考えてるので意見いただく方々をモヤモヤさせてしまって申し訳ないのですがw

2010-12-31 20:02:11
くっくっkura 🇯🇵🦀 @PG_kura

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

2010-09-14 02:13:49
pokarim @pokarim

「継承は害悪か。」をトゥギャりました。 http://togetter.com/li/86313

2011-01-06 00:20:10
Rinta @rinta100

継承が便利な場面はいっぱいあるけどな。でも、良くない使われ方をする事も否定はできない。それを害悪と言い切っていいかどうかは微妙だなあ。良くない使い方をするのは技術ではなく人が悪いという気がする。 http://togetter.com/li/86313

2011-01-06 00:01:15
Rinta @rinta100

あれだ、包丁で人を刺したら、包丁鍛冶が悪いとか言う、そーゆー感じのアレか。

2011-01-06 00:02:59
pokarim @pokarim

@rinta100 純粋に技術として問題があるかどうかということだと思います。害悪はちょっと強めの言葉ではありますが。例えば欠点と言いなおしてもいいかもしれません。

2011-01-06 00:05:33
pokarim @pokarim

オブジェクト指向は、集合論<->圏論のアナロジーでいくと、とても集合論ぽく感じているんだけど、これはただの自分の個人的なイメージ。どうしたらちゃんとした議論にできるかな。

2011-01-06 00:11:11