Upgrade to Pro — share decks privately, control downloads, hide ads and more …

「オブジェクト指向」を再考する / reconsider "object-oriented"

「オブジェクト指向」を再考する / reconsider "object-oriented"

https://rakus.connpass.com/event/178556/ の飛び込み発表資料。

# 参考資料
『指向(しこう)の意味』 - 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

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#rrtPv

Bjarne Stroustrup『What is ‘‘Object-Oriented Programming’’? (1991 revised version)』
https://www.stroustrup.com/whatis.pdf

sumim『プロトタイプベース・オブジェクト指向』
http://squab.no-ip.com/wiki/493

『Self Handbook』
https://handbook.selflanguage.org/2017.1/

sumim『オブジェクト指向の概念の発明者は誰ですか?(改訂版)』
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

philomagi

June 26, 2020
Tweet

More Decks by philomagi

Other Decks in Programming

Transcript

  1. 発表者 @Philomagi • WEB系プログラマ • 自称フロントエンド寄り ◦ 最近のマイブームは SelfとSmalltalk ◦

    vanila jsも久しぶりにちょっと触りたい • 設計の話とかが好きです ◦ DDDとかクリーンアーキテクチャとか 2
  2. 「指向」「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
  3. 代表的な「オブジェクト指向(?)」言語 • C++, Java, etc... ◦ オブジェクトというよりも、「クラス」「型」への注目が強い(ことが多い) ◦ そのため、「クラス指向」という表現がされることもある ▪

    cf. オブジェクト指向とはなんですか? - Quora ◦ C++を開発したBjarne Stroustrupも、オブジェクトより「クラス」「(抽象デー タ)型」への関心が強そう ▪ cf. 『What is ‘‘Object-Oriented Programming’’? (1991 revised version)』 9
  4. Self Language 14 • 「プロトタイプベース」と呼ばれる言語の元祖 ◦ javascriptもこの系譜 ▪ 今はECMAScriptでclass構文も導入されてしまっているが ……

    ▪ (´-`).。oO(昔のjavascriptが「辛い」と言われるの、プログラマが無理やりクラス 指向で書こうとしたせいという面も有るのでは ……) • すべてをslotsの組み合わせで考える ◦ slotsに値を入れればプロパティ(っぽく振る舞う) ◦ slotsに関数(Self的にはOrdinary Method)を入れればメソッド(っ ぽく振る舞う)
  5. Self Language 17 x = 4 y = 2 printString

    + slots |:point| (clone x: x + point x) y: y + point y デフォルトの組み込み実装
  6. Self Language 18 x = 4 y = 2 printString

    + slots |:point| (clone x: x + point x) y: y + point y デフォルトの組み込み実装
  7. Self Language 19 x = 4 y = 2 printString

    + slots |:point| (clone x: x + point x) y: y + point y デフォルトの組み込み実装 「普段はこれが良いけど、 GUIに表示す るときだけ ‘(x, y)’ な出力にしたい」
  8. 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)’ な出力にしたい」
  9. Self Language 21 x = 4 y = 2 printString

    + slots |:point| (clone x: x + point x) y: y + point y ‘(‘ + x + ‘, ‘ + y + ‘)’ // (注: 擬似コード) => ‘(4, 2)’ 必要な場面で、slotsを任意のコードに挿 げ替え可能
  10. Self Language 22 x = 4 y = 2 printString

    + x = 4 y = 2 printString + clone
  11. Self Language 23 x = 4 y = 2 printString

    + x = 4 y = 2 printString + clone - *
  12. Self Language 24 x = 4 y = 2 printString

    + x = 4 y = 2 printString + clone - * 特定の場面だけで必要な定義 を、後から特定のオブジェクトに 追加できる
  13. Self Language 25 • 「クラス」という概念が言語の中に存在しない • 「新しく別のオブジェクトを用意したい」 ◦ 「もうあるオブジェクトをクローンして、それを都合良いように加工す れば良いよ」

    • 個々のコード片すらもオブジェクト ◦ オブジェクト同士を任意に組み合わせる(slotsの中身を交換する) ことで任意に実装をすげ替え可能 ◦ 非常に高い自由度
  14. 参考資料 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 • 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 • Bjarne Stroustrup『What is ‘‘Object-Oriented Programming’’? (1991 revised version)』 ◦ https://www.stroustrup.com/whatis.pdf • sumim『プロトタイプベース・オブジェクト指向』 ◦ http://squab.no-ip.com/wiki/493 • 『Self Handbook』 ◦ https://handbook.selflanguage.org/2017.1/
  15. • sumim『オブジェクト指向の概念の発明者は誰ですか? (改訂版)』 ◦ 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