継承は害悪か。

継承の問題点と利点などについての興味深い議論をまとめてみました。
18
pokarim @pokarim

オブジェクト指向の問題点を真剣に考えるためには、オブジェクト指向がなぜ便利なのか、もう一度分析しなおしてみるといいかもしれない。

2011-01-06 00:12:37
非実在naka aki @naka_aki_spl

圏論を全く知らないので一歩も反応できずサービスエース

2011-01-06 00:11:40
pokarim @pokarim

@naka_aki_spl そのうち圏論の入門記事でも書こうと思っているのでその時はぜひ。

2011-01-06 00:13:23
非実在naka aki @naka_aki_spl

「クラスは集合」というより「クラスのある側面と集合のある側面は似てる」じゃないかな、とかは思うことはよく有る。

2011-01-06 00:13:21
pokarim @pokarim

そうですね。クラス=集合ではないってよく言われますね。 RT @naka_aki_spl: 「クラスは集合」というより「クラスのある側面と集合のある側面は似てる」じゃないかな、とかは思うことはよく有る。

2011-01-06 00:19:34
非実在naka aki @naka_aki_spl

「似てる面がある」ので、「流用する」ことは多分出来ると思う。クラスを集合として「流用」するかんじ。

2011-01-06 00:23:36
Yasuo Nakanishi @nakanishiyasuo

結局の所、インターフェースを議論しないでオブジェクト指向を議論するのはムリだと思うんだけどな。インターフェースに比べたらオブジェクトなんてうんこ。

2011-01-06 00:19:22
pokarim @pokarim

インターフェースって外部的な仕様の記述だと思うのですが、逆にその外部的な記述だけでプログラミングができないものでしょうか。RT @nakanishiyasuo: 結局の所、インターフェースを議論しないでオブジェクト指向を議論するのはムリだと思うんだけどな。..

2011-01-06 00:21:09
Yasuo Nakanishi @nakanishiyasuo

それはJava的なインターフェースの理解です。OOでいうインターフェースはオブジェクトの境界を定義して抽象化の中心的な存在です。 RT @pokarim インターフェースって外部的な仕様の記述だと思うのですが、

2011-01-06 00:23:09
非実在naka aki @naka_aki_spl

S2Daoとかのアレは「これ以上こまかい振る舞いについては書く必要が無いはず」な処まで持ち込んだうえの話だな。任意の場面で振るえる技ではないよね。

2011-01-06 00:24:56
pokarim @pokarim

ぼくもそんなふうに思います。だれか解説希望。 RT @mzp: クラスってオブジェクトの集合じゃないんすか?なんかこう、ちょっと定義を工夫すれば集合として扱えそうな気がするんだけど

2011-01-06 00:25:51
非実在naka aki @naka_aki_spl

「なにが集合か」と言われたら「コレクション系のやつ。それこそSetクラスとか有るよなあ」と答えたほうが色々しあわせじゃないか、とか思ったりする。違うのかなあ。あるいはクエリつまりxxx.find_all{…} (rubyでいえば)とかさ。

2011-01-06 00:27:08
非実在naka aki @naka_aki_spl

ところで(Javaとかの)Interfaceだと、「メソッド名が固定」なわけだけど、それしか選択肢が無いのってまずくないのかなあ? たしかww、.NETだと、handlesとかいって「継承するときに違う名前のメソッドで受ける」とか出来るんじゃなかった?あれいいね。

2011-01-06 00:28:55
くっくっkura 🇯🇵🦀 @PG_kura

Togetterでは上っ面のデメリットだけを呟いてますが、あくまで継承はデータ構造と処理セットと具象化ガイドライン(しかも強い縛りのオマケ付)の3点セットを段ボールに詰めて手軽に抽象・再利用しようとするウルトラCだからこそ、不用意なデメリットを伴いやすいってだけなんですけどね。

2011-01-06 00:24:47
くっくっkura 🇯🇵🦀 @PG_kura

そんなのは使い手次第だという意見は正しいと思うが、全体のボトムアップは多くの程度問題同士の比較の上に為せると思う。継承に関しては使い手の技量・経験に依る品質のぶれ幅が他と比べて大きい上、お手軽で、後からの設計方向転換にやたら弱いっていう面もあるので代替があるなら欲しいのです。

2011-01-06 00:30:23
くっくっkura 🇯🇵🦀 @PG_kura

うん、まぁ、あとは圏論の記事を待ちましょう。

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

型理論についてちゃんと理解すればすっきりするんかな。CLTTとか読めと。

2011-01-06 00:31:25
非実在naka aki @naka_aki_spl

てか、よく分からんのだけどもしかしてそれって「オブジェクト指向」である以前に「集合指向」とでも呼ぶべきものだったりしないかな。オブジェクト指向をブートストラップさせるために先に集合指向のビルドアップが必要だ、とでも言うべきアーキテクチャ構成。

2011-01-06 00:40:47
シャミノ @syamino

とりあえずStructural subtypingについて考えればクラスについての固定的な観念を崩せますよと宣伝だけしておきたい

2011-01-06 00:35:10
pokarim @pokarim

それはわかります。むしろ自分の中では固定的な観念がくずれてOOが分解しつつあって逆にわかりにくい。人によって捉え方違うし。 RT syamino: とりあえずStructural subtypingについて考えればクラスについての固定的な観念を崩せますよと宣伝だけしておきたい

2011-01-06 00:36:28
非実在naka aki @naka_aki_spl

Structural subtypingめもめも。ところで「固定的な観念」ってどこの畑の固定だろう。色々あるから宗教戦争になりそうなんだがww

2011-01-06 00:35:35
Yasuo Nakanishi @nakanishiyasuo

あ、そういう意味では一般的なオブジェクト指向プログラマはインターフェースだけの世界とインターフェース+実装の世界を切り替えて使っているはずです。 @pokarim インターフェースって外部的な仕様の記述だと思うのですが

2011-01-06 00:38:13
pokarim @pokarim

とりあえず、オブジェクト指向は、データ構造と名前空間がうまくマッチしているので人に使いやすいっていうのはあると思う。

2011-01-06 00:37:45
Yasuo Nakanishi @nakanishiyasuo

うーん、その人にやさしいって説明には違和感が。単純に人間の頭はとてつもない抽象化マシンで、オブジェクト指向は抽象化のサブセットを使うので、頭とコードの変換効率を最適化できるから人に優しいのだと思ってます。 @pokarim

2011-01-06 00:41:51
pokarim @pokarim

@nakanishiyasuo だいたいわかります。インターフェースだけで実装の記述までするにはどうしたらいいか考えてみたら面白いかなということです。

2011-01-06 00:43:32