Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
「オブジェクト指向」を再考する / reconsider "object-oriented"
philomagi
June 26, 2020
Programming
1
240
「オブジェクト指向」を再考する / reconsider "object-oriented"
https://rakus.connpass.com/event/178556/
の飛び込み発表資料です
philomagi
June 26, 2020
Tweet
Share
More Decks by philomagi
See All by philomagi
tooppoo
0
310
tooppoo
4
960
tooppoo
4
580
tooppoo
2
980
tooppoo
9
1.2k
tooppoo
24
3.1k
tooppoo
10
3.9k
tooppoo
9
2.8k
tooppoo
8
1.4k
Other Decks in Programming
See All in Programming
cwozaki
1
1.9k
zsmb
1
130
masayaaoyama
1
470
manfredsteyer
PRO
0
270
s_uryu
0
190
decoc
1
340
mizdra
7
4.9k
line_developers_tw2
0
760
yosuke_furukawa
PRO
14
3.9k
fkubota
1
400
hanhan1978
0
300
nbkouhou
1
1.2k
Featured
See All Featured
paulrobertlloyd
71
1.4k
philhawksworth
190
17k
tmm1
61
8.4k
sstephenson
144
12k
dotmariusz
94
5.1k
thoeni
4
550
denniskardys
220
120k
sferik
609
54k
bryan
30
3.3k
lauravandoore
437
28k
jlugia
216
16k
brianwarren
83
4.7k
Transcript
「オブジェクト指向」を再考する 〜オブジェクト、指向、プロトタイプ、Self〜 1 @Philomagi 2020/06/26@オブジェクト指向LT会 vol.2 #ooltjp
発表者 @Philomagi • WEB系プログラマ • 自称フロントエンド寄り ◦ 最近のマイブームは SelfとSmalltalk ◦
vanila jsも久しぶりにちょっと触りたい • 設計の話とかが好きです ◦ DDDとかクリーンアーキテクチャとか 2
今回のテーマ 3
「オブジェクト指向」 4
Object-Oriented 5
「指向」「Orient(ed)」 6 • 指向 ◦ ある方向・目的に向かうこと。また、方向や目的を指示してその方に向かわせること。 ▪ goo国語辞書 • Orient
◦ orient somebody/something (to/towards somebody/something) to direct somebody/something towards something; to make or adapt somebody/something for a particular purpose ▪ Oxford Learner's Dictionaries
「オブジェクト」+「指向」=? 7 オブジェクトに向かうこと。 また、方向や目的を指示してオブジェクトに向かわせること。
「オブジェクト」+「指向」=? 8 オブジェクトに向かうこと。 また、方向や目的を指示してオブジェクトに向かわせること。 ↓ ここでは 「オブジェクトに注目する」 「オブジェクトに意識を向ける」 ぐらいの意味とする
代表的な「オブジェクト指向(?)」言語 • C++, Java, etc... ◦ オブジェクトというよりも、「クラス」「型」への注目が強い(ことが多い) ◦ そのため、「クラス指向」という表現がされることもある ▪
cf. オブジェクト指向とはなんですか? - Quora ◦ C++を開発したBjarne Stroustrupも、オブジェクトより「クラス」「(抽象デー タ)型」への関心が強そう ▪ cf. What is ‘‘Object-Oriented Programming’’? (1991 revised version) 9
代表的な「オブジェクト指向(?)」言語 • Smalltalk ◦ 「オブジェクト指向」の元祖 ▪ 「オブジェクト」という言葉自体はSimulaが初出(Simulaがオブジェクト 指向である、ということではない) ◦ 開発者のアラン・ケイが注目していたのは、オブジェクトというよりも「メッ
セージ」のメタファ? ▪ 「メッセージ指向」という表現 ▪ cf. prototypes vs classes was: Re: Sun's HotSpot ▪ cf. オブジェクト指向の概念の発明者は誰ですか?(改訂版) 10
代表的な「オブジェクト指向(?)」言語 「オブジェクト指向」の代表格として語られる C++系にせよSmalltalk系にせよ、 むしろ「オブジェクト」以外に注目している? 11
代表的な「オブジェクト指向(?)」言語 「オブジェクト指向」の代表格として語られる C++系にせよSmalltalk系にせよ、 むしろ「オブジェクト」以外に注目している? ↓ 「オブジェクト指向」とは・・・? 12
Self Language 13
Self Language 14 • 「プロトタイプベース」と呼ばれる言語の元祖 ◦ javascriptもこの潮流 ▪ 今はECMAScriptでclass構文も導入されてしまってますが ……
▪ (´-`).。oO(昔のjavascriptが「辛い」と言われるの、プログラマが無理やりクラス 指向で書こうとしたせいという面も有るのでは ……) • すべてをslotsの組み合わせで考える ◦ slotsに値を入れればプロパティ(っぽく振る舞う) ◦ slotsに関数(Self的にはOrdinary Method)を入れればメソッド(っ ぽく振る舞う)
Self Language 15 x y printString +
Self Language 16 x = 4 y = 2 printString
+ slots
Self Language 17 x = 4 y = 2 printString
+ slots |:point| (clone x: x + point x) y: y + point y デフォルトの組み込み実装
Self Language 18 x = 4 y = 2 printString
+ slots |:point| (clone x: x + point x) y: y + point y デフォルトの組み込み実装
Self Language 19 x = 4 y = 2 printString
+ slots |:point| (clone x: x + point x) y: y + point y デフォルトの組み込み実装 「普段はこれが良いけど、 GUIに表示す るときだけ ‘(x, y)’ な出力にしたい」
Self Language 20 x = 4 y = 2 printString
+ slots |:point| (clone x: x + point x) y: y + point y ‘(‘ + x + ‘, ‘ + y + ‘)’ // (注: 擬似コード) => ‘(4, 2)’ デフォルトの組み込み実装 「普段はこれが良いけど、 GUIに表示す るときだけ ‘(x, y)’ な出力にしたい」
Self Language 21 x = 4 y = 2 printString
+ slots |:point| (clone x: x + point x) y: y + point y ‘(‘ + x + ‘, ‘ + y + ‘)’ // (注: 擬似コード) => ‘(4, 2)’ 必要な場面で、slotsを任意のコードに挿 げ替え可能
Self Language 22 x = 4 y = 2 printString
+ x = 4 y = 2 printString + clone
Self Language 23 x = 4 y = 2 printString
+ x = 4 y = 2 printString + clone - *
Self Language 24 x = 4 y = 2 printString
+ x = 4 y = 2 printString + clone - * 特定の場面だけで必要な定義 を、後から特定のオブジェクトに 追加できる
Self Language 25 • 「クラス」という概念が言語の中に存在しない • 「新しく別のオブジェクトを用意したい」 ◦ 「もうあるオブジェクトをクローンして、それを都合良いように加工す れば良いよ」
• 個々のコード片すらもオブジェクト ◦ オブジェクト同士を任意に組み合わせる(slotsの中身を交換する) ことで任意に実装をすげ替え可能 ◦ 非常に高い自由度
まとめ 26 • 自分がイメージしている「オブジェクト指向」ってなんだろう? • 「オブジェクト指向」として語られる言語は、意外と「オブジェクト」を「指 向」していない=「オブジェクト」以外に注目している • 実は、プロトタイプベースが一番「オブジェクト」に注目している=「オブ ジェクト」を「指向」しているのかも?
• 「オブジェクト指向」という言葉には前提が必要 ◦ 「メッセージ指向」「クラス指向」「プロトタイプ指向」「other...」どれに ついて会話しようとしているのか?
参考資料 27 • 指向(しこう)の意味 - goo国語辞書 ◦ https://dictionary.goo.ne.jp/word/%E6%8C%87%E5%90%91/ • orient
(verb) - Oxford Learner's Dictionaries ◦ https://www.oxfordlearnersdictionaries.com/definition/english/orient_1?q=oriented • オブジェクト指向とは何ですか? - Quora ◦ sumim さんによる回答 ◦ https://jp.quora.com/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87% E5%90%91%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B/answers/123165842#rrt Pv • What is ‘‘Object-Oriented Programming’’? (1991 revised version) ◦ https://www.stroustrup.com/whatis.pdf • プロトタイプベース・オブジェクト指向 ◦ http://squab.no-ip.com/wiki/493 • Self Handbook ◦ https://handbook.selflanguage.org/2017.1/
• オブジェクト指向の概念の発明者は誰ですか? (改訂版) ◦ https://sumim.hatenablog.com/entry/20040525/p1 • prototypes vs classes was:
Re: Sun's HotSpot ◦ http://lists.squeakfoundation.org/pipermail/squeak-dev/1998-October/017019.html 参考資料 28
ご清聴ありがとうございました 29