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. 「オブジェクト指向」を再考する
    〜オブジェクト、指向、プロトタイプ、Self〜
    1
    @Philomagi
    2020/06/[email protected]オブジェクト指向LT会 vol.2
    #ooltjp

    View Slide

  2. 発表者
    @Philomagi
    ● WEB系プログラマ
    ● 自称フロントエンド寄り
    ○ 最近のマイブームは SelfとSmalltalk
    ○ vanila jsも久しぶりにちょっと触りたい
    ● 設計の話とかが好きです
    ○ DDDとかクリーンアーキテクチャとか
    2

    View Slide

  3. 今回のテーマ
    3

    View Slide

  4. 「オブジェクト指向」
    4

    View Slide

  5. Object-Oriented
    5

    View Slide

  6. 「指向」「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

    View Slide

  7. 「オブジェクト」+「指向」=?
    7
    (辞書的意味からは)オブジェクトに向かうこと。
    また、方向や目的を指示してオブジェクトに向かわせること。

    View Slide

  8. 「オブジェクト」+「指向」=?
    8
    (辞書的意味からは)オブジェクトに向かうこと。
    また、方向や目的を指示してオブジェクトに向かわせること。

    ここでは
    「オブジェクトに注目する」
    「オブジェクトに意識を向ける」
    ぐらいの意味とする

    View Slide

  9. 代表的な「オブジェクト指向(?)」言語
    ● C++, Java, etc...
    ○ オブジェクトというよりも、「クラス」「型」への注目が強い(ことが多い)
    ○ そのため、「クラス指向」という表現がされることもある
    ■ cf. オブジェクト指向とはなんですか? - Quora
    ○ C++を開発したBjarne Stroustrupも、オブジェクトより「クラス」「(抽象デー
    タ)型」への関心が強そう
    ■ cf. 『What is ‘‘Object-Oriented Programming’’? (1991 revised version)』
    9

    View Slide

  10. 代表的な「オブジェクト指向(?)」言語
    ● Smalltalk
    ○ 「オブジェクト指向」の元祖
    ■ 「オブジェクト」という言葉自体はSimulaが初出(Simulaがオブジェクト
    指向である、ということではない)
    ○ 開発者のアラン・ケイが注目していたのは、オブジェクトというよりも「メッ
    セージ」のメタファ?
    ■ 「メッセージ指向」という表現
    ■ cf. 『prototypes vs classes was』
    ■ cf. 『オブジェクト指向の概念の発明者は誰ですか?(改訂版)』 10

    View Slide

  11. 代表的な「オブジェクト指向(?)」言語
    「オブジェクト指向」の代表格として語られる
    C++系にせよSmalltalk系にせよ、
    むしろ「オブジェクト」以外に注目している?
    11

    View Slide

  12. 代表的な「オブジェクト指向(?)」言語
    「オブジェクト指向」の代表格として語られる
    C++系にせよSmalltalk系にせよ、
    むしろ「オブジェクト」以外に注目している?

    「オブジェクト指向」とは・・・?
    12

    View Slide

  13. Self Language
    13

    View Slide

  14. Self Language
    14
    ● 「プロトタイプベース」と呼ばれる言語の元祖
    ○ javascriptもこの系譜
    ■ 今はECMAScriptでclass構文も導入されてしまっているが
    ……
    ■ (´-`).。oO(昔のjavascriptが「辛い」と言われるの、プログラマが無理やりクラス
    指向で書こうとしたせいという面も有るのでは
    ……)
    ● すべてをslotsの組み合わせで考える
    ○ slotsに値を入れればプロパティ(っぽく振る舞う)
    ○ slotsに関数(Self的にはOrdinary Method)を入れればメソッド(っ
    ぽく振る舞う)

    View Slide

  15. Self Language
    15
    x y
    printString
    +

    View Slide

  16. Self Language
    16
    x = 4 y = 2
    printString
    +
    slots

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  20. 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)’ な出力にしたい」

    View Slide

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

    View Slide

  22. Self Language
    22
    x = 4 y = 2
    printString
    + x = 4 y = 2
    printString
    +
    clone

    View Slide

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

    View Slide

  24. Self Language
    24
    x = 4 y = 2
    printString
    + x = 4 y = 2
    printString
    +
    clone
    -
    *
    特定の場面だけで必要な定義
    を、後から特定のオブジェクトに
    追加できる

    View Slide

  25. Self Language
    25
    ● 「クラス」という概念が言語の中に存在しない
    ● 「新しく別のオブジェクトを用意したい」
    ○ 「もうあるオブジェクトをクローンして、それを都合良いように加工す
    れば良いよ」
    ● 個々のコード片すらもオブジェクト
    ○ オブジェクト同士を任意に組み合わせる(slotsの中身を交換する)
    ことで任意に実装をすげ替え可能
    ○ 非常に高い自由度

    View Slide

  26. まとめ
    26
    ● 自分がイメージしている「オブジェクト指向」ってなんだろう?
    ● 「オブジェクト指向」として語られる言語は、意外と「オブジェクト」を「指
    向」していない=「オブジェクト」以外に注目している
    ● 実は、プロトタイプベースが一番「オブジェクト」に注目している=「オブ
    ジェクト」を「指向」しているのかも?
    ● 「オブジェクト指向」という言葉には前提が必要
    ○ 「メッセージ指向」「クラス指向」「プロトタイプベース」「other...」どれ
    について会話しようとしているのか?

    View Slide

  27. 参考資料
    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/

    View Slide

  28. ● 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

    View Slide