class based OOPとprototype based OOPの違いについて

12
methane @methane

オブジェクトはクラスじゃないと言われると、クラスオブジェクト作るだけの Python はクラスが無いな/ 最強オブジェクト指向言語 JavaScript 再入門! on @slideshare #javascript http://t.co/aA53uLvN4k

2013-07-05 12:46:47
methane @methane

var Hoge = new Function() を class Hoge: と書いたらほぼ Python. だが obj.meth はメソッドをオブジェクトにバインドするのでその点使いやすい。

2013-07-05 12:48:33
methane @methane

@methane 間違えた。 var Hoge {} を class Hoge: にして、 var hoge = new Hoge() を hoge = Hoge() にするんだ。

2013-07-05 12:50:26
文殊堂 @monjudoh

@methane JSの場合クラスオブジェクトもないから

2013-07-05 14:32:00
methane @methane

@monjudoh 組み込みで無いだけで、作れば良いよね?

2013-07-05 14:44:03
文殊堂 @monjudoh

@methane どういう意味?class base OOPをon JSでやるって話?

2013-07-05 14:45:45
methane @methane

@monjudoh 言いたいのは、クラスの役割をするオブジェクトを作ってもそれは本当のクラスじゃないってのがなんか違うよなーってことです

2013-07-05 14:46:18
文殊堂 @monjudoh

@methane クラスの役割をするオブジェクトis何?

2013-07-05 14:48:55
文殊堂 @monjudoh

JSではObject.createを使うことで何らかのobjectをclassに見立てることもなくobjectの生成やprototype継承が出来るのでclassの役割を持ったobjectを一切使わないことが普通にできるが、

2013-07-05 14:51:47
文殊堂 @monjudoh

これまでのJSの歴史の殆どを占めているES3ではリテラルで生成できる一部のobjectを除いては見た目classっぽいコンストラクタ関数経由でないと色々出来なかったのが不幸だと思う。

2013-07-05 14:55:05
methane @methane

@monjudoh プロトタイプチェーンのためのオブジェクト

2013-07-05 14:55:33
文殊堂 @monjudoh

@methane prototypeは任意のobjectなのでclassに見立てるべきではないと思う。class is a objectというのとは話が違う。

2013-07-05 14:59:54
methane @methane

@monjudoh 多分言いたいことが伝わってない。 http://t.co/aA53uLvN4k の 16, 17, 18, 34, 37 あたりを見て、これがクラスベースとプロトタイプベースの違いだって言ったら、 Python はプロトタイプベースに近くなるなぁと言いたいだけ

2013-07-05 15:08:24
文殊堂 @monjudoh

JSのprototype base OOPを実感してみたかったらa=[0,1,2,3];b=Object.create(a);ってやってbを色々触ってみるといいと思うよ。

2013-07-05 15:08:26
文殊堂 @monjudoh

@methane Pythonって任意のobjectをclassに出来るんです?例えば[0,1,2,3,4]っていうリストとか。

2013-07-05 15:11:42
文殊堂 @monjudoh

@methane JSだと任意でa=[0,1,2,3];b=Object.create(a);とか出来るんで、prototype chainの為のobjectなどというのはなくてobjectをprototype chainに組み入れられるというのが正しい。

2013-07-05 15:13:57
methane @methane

@monjudoh 例えば 37 ページ、これまさに Python でメソッドとか属性探すときと完全に同じですよね。

2013-07-05 15:14:25
文殊堂 @monjudoh

@methane 37ページの図を見たときにclass base OOPが念頭にある人は委譲先のobjectをclassと同じような特別な物として見てしまう先入観があるんじゃないかと思うんだけどどうか

2013-07-05 15:14:53
methane @methane

@monjudoh いやだからそれは分かってるしそれが言いたいんじゃないです。

2013-07-05 15:15:55
methane @methane

@monjudoh あの説明でクラスベースとプロトタイプチェーンが違うと言ったら、制限されたプロトタイプチェーンでクラス実装してる Python の立場はどうなるの?という事が言いたいだけです。

2013-07-05 15:18:01
methane @methane

@monjudoh プロトタイプチェーンでクラスっぽいものは作れるしそれをクラスと呼べばクラスになる。例えば Python 。

2013-07-05 15:18:31
文殊堂 @monjudoh

@methane どっちかというとあのスライドの35ページのclass baseの説明がよろしくないという話では

2013-07-05 15:20:22
methane @methane

@monjudoh 34 ページと 37 ページ比べたら、委譲先のオブジェクトが特別なものかどうかよりも大きな違いがあるような説明に見えます。任意のオブジェクトがプロトタイプになれるかどうかという話なら納得です。

2013-07-05 15:20:30
methane @methane

@monjudoh Yes! どっちかというとじゃなくて最初からそういう意味です!クラスベースをそう定義したら Python クラスベースじゃなくなるじゃん!って。

2013-07-05 15:21:39