オブジェクト指向の強烈な武器「ポリモーフィズム」で、ペンギンと鳩を同様に扱える【プログラミングパラダイム・シフト4】#67

Поділитися
Вставка
  • Опубліковано 21 лип 2024
  • 「プログラミングパラダイム・シフト」第4回。「しゃぶしゃぶを肉に置換できる?」「ポリモーフィズムは人間の曖昧さに寄り添う」「メタファーで世界を理解するオブジェクト指向と認知言語学」など、オブジェクト指向の継承とポリモーフィズムについて話しました。
    【目次】
    0:00 しゃぶしゃぶとリスコフの置換原則
    4:59 「たたかう」だけ変えたいときはどうする?
    10:52 戦士に人間の特徴を継承する
    13:01 オブジェクト指向と生成意味論
    18:27 リスコフの置換原則とは
    20:34 オーバーライドとオーバーロード
    21:51 ポリモーフィズムは何がエラい?
    27:11 『論理哲学論考』による一般化
    28:54 オブジェクト指向と認知言語学
    35:48 次回「オブジェクト指向神話からの脱却」
    【参考文献】
    ○コーディングを支える技術
    amzn.to/3TscsJp
    ○オブジェクト指向の考え方 5th Edition
    amzn.to/3lpDaFQ
    ○WEB+DB PRESS Vol.132
    amzn.to/3JtYkuv
    ○プログラミング言語大全
    amzn.to/3yNiYRf
    ○はじめてのLisp関数型プログラミング
    amzn.to/3yNj3V3
    ○論理哲学論考
    amzn.to/43h3vqM
    【サポーターコミュニティ加入はこちらから】
    yurugengo.com/support
    【親チャンネル:ゆる言語学ラジオ】
    / @yurugengo
    【実店舗プロジェクト:ゆる学徒カフェ】
    / @yurugakuto
    【おたよりフォーム】
    forms.gle/BLEZpLcdEPmoZTH4A
    ※皆様からの楽しいおたよりをお待ちしています!
    【お仕事依頼はこちら!】
    info@pedantic.jp
    【堀元見プロフィール】
    慶應義塾大学理工学部卒。専門は情報工学。WEBにコンテンツを作り散らかすことで生計を立てている。現在の主な収入源は「アカデミックに人の悪口を書くnote有料マガジン」。
    Twitter→ / kenhori2
    noteマガジン→note.com/kenhori2/m/m125fc452...
    個人UA-cam→ / @kenhorimoto
    【水野太貴プロフィール】
    名古屋大学文学部卒。専門は言語学。
    某大手出版社で編集者として勤務。言語学の知識が本業に活きてるかと思いきや、そうでもない。
    Twitter→ / yuru_mizuno
    【姉妹チャンネル】
    ◯ゆる音楽学ラジオ( / @yuruongaku )
    ◯ゆる民俗学ラジオ ( / @yuruminzoku )
    ◯ゆる天文学ラジオ ( / @yurutenmon )
    ◯ゆる書道学ラジオ ( / @yurushodo )
    ◯ゆる生態学ラジオ ( / @yuruseitai )
    ◯ゆる哲学ラジオ (open.spotify.com/show/7t8NNVq...)
    #プログラミングパラダイム・シフト #ゆるコンピュータ科学ラジオ_プログラミングパラダイム・シフト

КОМЕНТАРІ • 220

  • @yurucom
    @yurucom  Рік тому +10

    【参考文献】
    ○コーディングを支える技術
    amzn.to/3TscsJp
    ○オブジェクト指向の考え方 5th Edition
    amzn.to/3lpDaFQ
    ○WEB+DB PRESS Vol.132
    amzn.to/3JtYkuv
    ○プログラミング言語大全
    amzn.to/3yNiYRf
    ○はじめてのLisp関数型プログラミング
    amzn.to/3yNj3V3
    ○論理哲学論考
    amzn.to/43h3vqM
    【サポーターコミュニティ加入はこちらから】
    yurugengo.com/support
    【おたよりフォーム】
    forms.gle/BLEZpLcdEPmoZTH4A
    ※皆様からの楽しいおたよりをお待ちしています!

  • @user-nk6ff1nw7w
    @user-nk6ff1nw7w Рік тому +159

    水野さん、ずっと言語学ラジオやってて笑う

  • @user-pq2db8xc9l
    @user-pq2db8xc9l Рік тому +96

    無謀なメタファーを放り込むホリモーティズムは今回なかったですね

  • @user-dc3yt4bn1l
    @user-dc3yt4bn1l Рік тому +132

    オブジェクト指向って
    人間が認知しやすいように作ってるから
    図らずも認知言語学とちょっと重なってくるの好き

    • @takenonya1672
      @takenonya1672 Рік тому +27

      その逆で人間にとって最も扱いづらい考え方でもある。
      オブジェクト指向の最大の欠点は、コアに潜むバグです。
      複雑に継承されたコードは、発狂ものです。

    • @user-dc3yt4bn1l
      @user-dc3yt4bn1l Рік тому +24

      @@takenonya1672
      「た」の回で、ゆる言語学ラジオが苦戦していたのは
      複雑に継承された結果って事ですね

  • @user-mn9fq9bh7j
    @user-mn9fq9bh7j Рік тому +71

    初手カウンターの流れ面白すぎるってw

  • @gamma9472
    @gamma9472 Рік тому +57

    ポリモーフィズムの凄さを水野さんがピンと来ないというのがむしろ凄さの証拠なのでは、という気がしました。
    内部処理(コンピュータ側の都合)を意識せずに、人間の自然な思考に近い形で実装できるがゆえに、「こんなことができるんですよー」と説明されても「普通じゃん」となってしまうわけですよね。
    つまり、水野さんが特別さを感じられないほど、自然な思考に近い形になっているということなんじゃないでしょうか。

    • @user-gx3fe1tm9x
      @user-gx3fe1tm9x 6 місяців тому

      これはインスタンスが違うとメソッドが違うことをプログラマが考慮しなくていいっていうエラサがあるわけだから、戦士、魔法使いという実態があって、
      戦うって命令をすれば必ず剣で攻撃するか魔法で攻撃するかを自動でしてくれる位の説明じゃないと意図が分からないのは当然な気がする。
      実態を考えないとない命令をした時にエラーになるみたいなニュアンスを想起出来ない

  • @user-jh7kp7vg6h
    @user-jh7kp7vg6h Рік тому +57

    プログラミング言語の話してるときに水野さんが自然言語のはなし挟み込むの、専門家とかだと正確性を第一に考える都合上そう簡単に突っ込めないけど、一般人に近いこの二人だからこそできることだと考えるとまじで唯一無二だなこれ

  • @k_madoka
    @k_madoka Рік тому +28

    察しが良すぎる水野さん好き

  • @spike2.tracker
    @spike2.tracker Рік тому +31

    コンピュータサイエンスも言語学も認知科学に親和性の高い部分があるので、そういうジャンルになるとこの二人の組み合わせは面白くなるよなーと思ってたまさにその回でした。
    なお最悪の組み合わせだったのはプリンのやつw

  • @ivnin
    @ivnin Рік тому +24

    鳥クラスを作ってペンギンの表現に窮した場合、実は開発したいシステムにとって意味がある分類は飛ぶ/飛ばないではなかったかを再考する価値があると思います。
    生物学的に"正しい"鳥類という分類に従った鳥クラスより、飛行クラスと歩行クラスのほうがうれしいかもしれません。
    これは言語学で言うと雪国では「雪」を表す単語が生活上有益な区分に従ってさらに細分化されているのと類似しているとと思います。

  • @ki3405
    @ki3405 Рік тому +17

    我々が認知しているこの「現実世界」とやらは一体何番目の入れ子構造の世界なんでしょうね……?

  • @toneryo
    @toneryo Рік тому +8

    ポリモーフィズムは初めて見たとき感動したな。
    配列に動物クラスのいろんな種類のインスタンスを詰めて、全員に鳴いてもらうみたいなコードで感動した記憶があります。
    ポインタも型のチエックもキャストも分岐もなしにこの複雑な処理が直感的に書けるということで、うまくやるなーと感心しました。

  • @genie_mago
    @genie_mago Рік тому +6

    お互いの得意が噛み合ってて、(真面目なテーマの中では特に)お二人が楽しそうでお気に入りの回

  • @laystorin123
    @laystorin123 Рік тому +12

    オブジェクト指向で継承しまくったソースを使うと、
    作る方は楽だけどバグが発生したときの原因追及するときにすごい苦労するんだよねぇ
    しかも継承元に問題があるときに修正したときに継承先にどれくらいの影響があるか分からないのも怖い

    • @stackam786
      @stackam786 Рік тому +2

      ですね。なのでRustやGoなど最近の言語では継承をサポートしなくなってます

  • @user-od5os4yo1f
    @user-od5os4yo1f Рік тому +6

    オーバーライドは自然言語で置き換えると
    「パンを食う」と「時間を食う」みたいなもんですかね

  • @user-uf9bp3xn9t
    @user-uf9bp3xn9t Рік тому +16

    このチャンネルを見ていると、コンピュータサイエンスと言語学は意外と近しい学問なのかもと思えてくる

    • @sei7970
      @sei7970 Рік тому +13

      計算理論もプログラミング言語も言語学も根っこにあるのはチョムスキーの生成文法だから、それはそう

    • @falconno6554
      @falconno6554 Рік тому +3

      そもそも論理学や数学を用いているので多分ベースにはしていると思いますよ
      特に人工知能の分野だと『人間の思考に近づける』という試みなのでベースにはしていると思います

  • @user-yt4pi5mc9n
    @user-yt4pi5mc9n Рік тому +10

    14:47 これ、個人開発者が適当に作った場合じゃなくて、商用開発でまじめに作った場合にも結構同じことが起きていているよね…

  • @TAKOYAGl
    @TAKOYAGl Рік тому +5

    「コンピュータはちゃんと動く必要がある」っていうのが、
    逆に人とかの動物はちゃんとしてなくても動ける・動いた結果が実現してればある意味で正解みたいになるのが面白いですね。

  • @UNO-yc1xk
    @UNO-yc1xk Рік тому +8

    ポリモーフィズムが初めて腑に落ちたのはcompositeパターンの説明を見た時だった
    知らなければ出てこない発想だし再帰も出てくるし初心者がプログラミングの面白さに気づく最高の題材だと思ってる

  • @nakanaka3
    @nakanaka3 Рік тому +7

    水野さんの察しが良すぎて毎回タッカーさんの気持ちが疑似体験できる

  • @user-yj2ub4sw8p
    @user-yj2ub4sw8p Рік тому +9

    めんどくささを減らすだと理解されにくいですよねー!
    使い回しが発生しがちで、その際に、修正漏れが発生しやすくなってバグが発生しやすくなるって言うとわりと理解てもらえた記憶があります。笑

  • @jajathree9506
    @jajathree9506 Рік тому +8

    水野さんが認知言語学の例えに持っていくの良いですね。オブジェクト指向を理解してきた。
    実際にオブジェクト指向設計するのは難しいです。C言語で慣れた人間なので。

  • @user-ye9ip3rb2u
    @user-ye9ip3rb2u Рік тому +5

    33:20
    マインクラフト内にマインクラフトを作った人もいるらしいですよね。

  • @millipferd
    @millipferd Рік тому +45

    言語学を大学で収めて今SEとして働いてるからこのラジオめっちゃおもろい

    • @user-uy4br8kv4b
      @user-uy4br8kv4b Рік тому +8

      修めて、な。にどとまちがえるな

    • @sablaw4011
      @sablaw4011 Рік тому +10

      野生の堀元水野だ!

    • @millipferd
      @millipferd Рік тому +19

      @@user-uy4br8kv4b 文脈を読んで上手く変換しないIMEがクソなんだよ

    • @haine102
      @haine102 Рік тому +4

      これは日本語の大型アップデート時でオーバーロードされてることを暗に指摘しているんですね!

    • @supleehum7656
      @supleehum7656 Рік тому

      @@millipferd IPPON!
      このIME野郎は言語の線状性をちゃんと考慮できてないですね。

  • @zunzuke55
    @zunzuke55 Рік тому +13

    いつも楽しく視聴させてもらってます。
    「オブジェクト指向と認知言語学」の後半でお二人が
    「コンピュータの上にコンピュータをつくる」と仰ってるのは
    仮想化や仮想マシンの概念の話っぽいな~と思いました。
    今後はそういうテーマも扱ってくださると嬉しいです。

  • @nonwe6429
    @nonwe6429 Рік тому +5

    コンピューター科学と言語学の殴り合い面白いのでもっと見たいです。

  • @kamodomon0913
    @kamodomon0913 Рік тому +3

    水野さんが「何言ってんだコイツ」だけで処理せずにちゃんと理解しようと試みているのが素晴らしいと思います。
    的の外れたことを言ってしまうのも微笑ましいです(実際、プログラムを学んだ人じゃないと分かりにくいですから)。
    そして今回のように言語学との類似性を見出した時などはお見事だと思います。

  • @rawegg
    @rawegg Рік тому +6

    ヴィトゲンシュタインの話は僕も論理哲学論考を手に取った時に感じた事と同じですね。本の中身の記述自体がとてもソースコード的だなと感じましたし。
    認知言語学や生成文法の話を聞いた時もアプローチが似てるなと思ってましたけど、この動画の話を聞きながら思ったのは、言語学はあくまで現実の自然を記述しようとしてるのに対して、オブジェクト指向プログラミングのベクトルはその逆で、プログラミング"言語"の記述から仮想の自然を生成しようとしてるように見えるので、物理学的な視点で見ると、時間ベクトルがお互いの分野で矛盾を生みそうだなとか思ったりしました。
    最近話題になってる生成系AIも画像生成と文章生成では、全く違うアプローチになってる事ももしかしたらこの動画の話題と深いところで繋がってそうな気がしますね。

  • @idontknow_idontknow
    @idontknow_idontknow Рік тому +9

    20:15 水野さんのテロップのWhom did you seeに誤植があります

  • @user-ec6fu8pm7g
    @user-ec6fu8pm7g Рік тому +4

    ほかのラジオもいいけどこの2人の面白さはずば抜けてるように感じる

  • @shindy_jp
    @shindy_jp Рік тому +6

    プログラミングパラダイムの最終回がオブジェクト指向で終わってしまうのは微妙では?と思っていたら、次回に続くとのことで安心しましたw

  • @user-nh9xk1rc8u
    @user-nh9xk1rc8u Рік тому +3

    水野さんの凄さを痛感出来る回が増えた ChatGPTの回では主役を張れる

  • @user-ev1mb8eq7o
    @user-ev1mb8eq7o Рік тому +1

    いまだにオブジェクト指向の神話に浸っているので次回が楽しみです。

  • @sai_139
    @sai_139 Рік тому +2

    お二人の会話、ニヤニヤが止まらない😊

  • @TANAKA_YASUHIRO
    @TANAKA_YASUHIRO Рік тому +1

    すっかり「ゆる哲学ラジオ」でしたね!
    いや、人間と世界の関係の本質に関わる対話だったから「ガチ哲学ラジオ」でした!!

  • @afukono_0321
    @afukono_0321 7 місяців тому +1

    改めてコンピュータ科学と言語学的の、この2人のタッグ最強すぎる
    収録を通して考察が深まっていくあたりがたまらない

  • @mudaso-heavy-user
    @mudaso-heavy-user Рік тому +12

    楽しみに待ってました

  • @user-gv4qw8cu8w
    @user-gv4qw8cu8w Рік тому +3

    シンエヴァでも反宇宙の事物は人間に知覚出来ないから過去のイベントを経由して理解させている描写がありましたね

  • @shachah_svaahaa
    @shachah_svaahaa Рік тому +4

    28:20 『論理哲学論考』の主張は「言語が有意味であるためには世界の構造がこのようになっていなければならない」という逆の発想だと聞いたことがありますが、「世界の成り立ちを言語に基づいて説明する」という点はオブジェクト指向と確かに似ていると思います。

  • @pa_n___da
    @pa_n___da Рік тому +1

    論理哲学論考に辿り着くのエモすぎる

  • @user-ry5tn6vs2l
    @user-ry5tn6vs2l Рік тому

    メタファーの話も論理哲学論考の話もプログラミング言語も全部、技術的には圏論で全て扱えそうですね〜

  • @ePhSh
    @ePhSh Рік тому +4

    オブジェクト指向は世界をどう切り取ってプログラム化するかの話をしているので、
    人間が考える世界とはどのようなものか?を考える哲学・論理学や、
    人間が世界について記述するために用いる言語などと近接するのは必然と言えば必然

  • @hbellstar
    @hbellstar Рік тому +1

    「ポリモーフィズムは、オブジェクト指向の奥義」と思っているので、水野さんにも多少なりとも響いたのをみて嬉しくなりました。

  • @jolnon
    @jolnon Рік тому +15

    オブジェクト指向の本質というか、根底にある考え方って「いかにヒューマンエラーを減らすか」という部分にあったりします。ちょっと文系的に言うと「人にやさしく」と言ったところで、例えば、カプセル化は変数と処理をひとまとめにすることでスコープ範囲をコントロールでき、継承によって繰り返しの処理をできるだけ減らすことができるので、それはプログラム構造の整理→コードの簡素化→可読性の向上につながります。コンピューターの高性能化によりチームでのコーディングが複雑になるにつれ、連携不足や難読化が加速しヒューマンエラーに起因するバグの量産がオブジェクト指向言語がよく使われることにつながったと思います。
    同時期にXPやアジャイル開発等が流行り始めたのも、偶然の一致ではないというのが私の見解です。あと、後半は宇宙シミュレーション仮説につながる話だなーと思いましたw

  • @ryocoSQ
    @ryocoSQ Рік тому

    C# を勉強していて、どうしてもポリモーフィズムで何を言いたいのかを理解できず色々と説明を見て回っていたのですが、この動画でやっと理解できてとても助かりました。ありがとうございました。

    • @yurucom
      @yurucom  Рік тому +1

      すごい!!ふざけて話してるこのラジオが人の役に立つ日が来るとは!!
      こちらこそ投げ銭ありがとうございます!!励みになります~!!

  • @nakami4402
    @nakami4402 Рік тому +4

    実際のコーディングの思考手順をよく考えてみると、
    1. てきとうな名前のクラスを作って、やらせたい仕事一式を記述する。
    2. 「この仕事をするのは何係だろう?」と比喩を考えてクラス名を改善する。
    3. 仕事の細かい手順を書き込む。
    4. 複数のクラスを作っているうちに、だんだん、親クラスにまとめたほうが効率いいなと思うようになる。
    5. 「この仕事をする人達は何部の何課だろう?」と比喩を考えて親クラスを作って、基礎的な仕事をそっちに移していく。
    といったところです。
    すべては比喩であり水野さんの気づきは圧倒的に正しいと思いました。

  • @mxs105
    @mxs105 Рік тому +2

    今回めっちゃおもろかったな

  • @youseemeetoo
    @youseemeetoo 7 місяців тому

    面白かったです。ヨーデルって例えは、アーティスティックな表現という次元で分類をしたら、それもまた難しいということなのでは?とおもいました。原典もみてみますね。

  • @taimax463
    @taimax463 Рік тому +3

    後半の言語理解におけるメタファーの話、DDD文脈で語られることの多いユビキタス言語の話を思い出しました。そういう肉付けもできるなと。

  • @equi_nokusu
    @equi_nokusu Рік тому +2

    28:40 あたりの水野さんの話は、業務要件定義にあたりますね。

  • @flat1701
    @flat1701 Рік тому +15

    ポリモーフィズムの真価は「具象クラスを知らなくても操作できる」ところにあると思う。これのおかげでフレームワークがはかどったと言えるのでは。

    • @nthdthdyjsehsnw4ethwbt
      @nthdthdyjsehsnw4ethwbt Рік тому

      動画でそう言ってるやん

    • @takenonya1672
      @takenonya1672 Рік тому

      知らない事で、得する事もあるけど、組み込み時のデバッグは、致命的。

  • @user-wp9lv7yn8m
    @user-wp9lv7yn8m Рік тому +2

    水野さんの言う特徴をいくつか用意してラベル付けするアプローチは、Rust言語のTraitに近そうですね。
    代表的な概念全体を親として1つ継承するのではなくて、概念を複数の特徴に分割しておいて、こっちの特徴は受け継ぐがあっちの特徴は受け継がない…といった柔軟な記述ができる。TypeScriptのUnion型にも近しさがありそうです。
    Rustは堀元さんが好きな言語じゃなさそうな匂いがしますが、古典的なオブジェクト指向モデルの問題を乗り越えた最新のプログラミング言語についてもいつか語って欲しいです!

  • @早川眠人
    @早川眠人 Рік тому +2

    オーバーロードと一緒に出てくるのがジェネリック

  • @ATI_PC
    @ATI_PC Рік тому

    堀元さんと水野さんの牽強付会、我田引水合戦がいつ見ても面白いw

  • @hobimoto24
    @hobimoto24 Рік тому

    メタファーの話のところ、ダックタイピング知ったら水野さん感動しそう

  • @gochuui1
    @gochuui1 Рік тому +6

    実際には「人間」みたいなクラスをつくるというよりは
    語尾が -or型になっている「〇〇するもの」で書くのが規約になっていて
    まさしく「流れるもの」を「時間」と「川」に継承させるように
    分類で安易に継承するのではなく、目的に従って意思を継承するようにしたい(これは宗教戦争か?)

    • @atsushigrizlupo8479
      @atsushigrizlupo8479 Рік тому

      初学者なのですが、この規範はどの言語を想定していますか?

    • @gochuui1
      @gochuui1 Рік тому +3

      @@atsushigrizlupo8479
      いや、命名規則は宗教戦争だから...言語よりチーム内ルール次第だ
      ただ-erとか-orとかついてるとクラスだなぁって思うし
      動詞ならメソッドだなぁって、ワイは思う

    • @Sola.No.17
      @Sola.No.17 Рік тому +2

      単純な動詞+er(or)は、型やクラスってよりも、インターフェースに付ける名前と認識していますね。名詞+動詞+er(or)は、一番やっちゃ駄目な型(クラス)定義ですね。後で絶対に困ることになります。

    • @atsushigrizlupo8479
      @atsushigrizlupo8479 Рік тому

      @@gochuui1 なるほど。ありがとうございます!

  • @EanaHufwe
    @EanaHufwe Рік тому +11

    17:22 〇〇らしさというのは、オブジェクト指向の「インターフェース」に該当するではないかと思います。
    例えば、一定の順番で並べられるオブジェは「Comparable」を実装したり、中にいろんなものが入れれるコンテナオブジェは「Enumerable」を実装したりとか

    • @user-uy4br8kv4b
      @user-uy4br8kv4b Рік тому

      Comparable を implements していても「一定の順序で並べられる」とは限らないです……!
      (Comparable を implements している class の instance の集合が、Comparable#compareTo の結果に従ってトポロジカルソートが可能とは限らないので!)

  • @Diakw
    @Diakw Рік тому +3

    水野さんの言ってる鳥らしさの構成要素を複数定義する立場は、もしかしたら mixin に似てるかも…?

  • @user-bp7fy2qp9m
    @user-bp7fy2qp9m Рік тому +3

    機械語を世界の真理とするなら、オブジェクト指向は糖衣表現。
    一般的な人間の認知能力の限界に絶望した先達達が考え出した窮余の一策。
    などと下らないことを考えながら聞いていたのですが、次回の話題に期待しています。

  • @ha9ha989
    @ha9ha989 Рік тому

    「宇宙シミュレーション仮説」というのものありますかし、マイクラの中で世界が再現され、コンピュータが再構成されるのも自然かも知れませんね。

  • @user-lm1rc9kf4l
    @user-lm1rc9kf4l Рік тому

    シンプルに掛け合いが面白い

  • @takaot4316
    @takaot4316 Рік тому +1

    遙か昔、組み込みJavaのプログラムをアセンブラにして見た事があるけど、インスタンス化とかでメモリコピーが多様されているのを見て、実装は大変だなと思った事がある。っと同時に当時Javaは速くないと言われていた理由が分かった気がしたのを思い出しました。動画内で"コピーとは違う"というのが何回か出てきて思い出した次第です。プログラムの世界は、01からどんどん遠くなって行く事がある意味進化と言えますが、最近のAIにプログラミングさせる状況を見ると中々感慨深い物があります。

  • @d0-0
    @d0-0 Рік тому +2

    ポケットモンスターリスコフの置換原則 レイコフの生成意味論

  • @YU-df1cn
    @YU-df1cn Рік тому +1

    ポリモーフィズムでめちゃくちゃ腑に落ちたのは、JavaとかのtoStringメソッドかなぁ
    ユーザー側としてはtoStringがあるということだけ知っていれば、対象がInteger型だろうがObject型だろうが気にせず文字列に変換することが出来るので便利よねっていう

  • @user-rq3gg9yt8e
    @user-rq3gg9yt8e Рік тому +1

    マイクラの話で思ったのが「いつから自分達の世界が1番目と錯覚していた?」

  • @tekoku3
    @tekoku3 Рік тому +1

    25:18
    堀元氏渾身のダジャレ
    「鳥がエサを取ります」

  • @user-og8sd2ei3g
    @user-og8sd2ei3g Рік тому +1

    今回の話の中で、継承の話をしている時は「どうやって色々なジョブのキャラを簡単に実装しよう?」だったのが
    ポリモーフィズムの話になるとレイヤーが1つ上がって「どうやってたたかうコマンドを実装しよう?」になるんですよね。
    そしてその段階になると「たたかうコマンドって何するコマンドなの?」という問い対して大抵の人は「キャラに通常攻撃させるコマンドだよ」という説明になるのと同じように、この段階になると、人間はもはやそのキャラが何のジョブかなんてどうでもよくなってしまうんですよね。
    なので「キャラに通常攻撃させる」という人間が自然言語で行う仕様説明と近い形で記述できるようになるポリモーフィズムという機能はかなり偉いんですよね。

  • @ddw5111
    @ddw5111 Рік тому +1

    水野さん、俺より本能的にオブジェクト指向理解ってる(インフラエンジニア歴20年選手

  • @atsushigrizlupo8479
    @atsushigrizlupo8479 Рік тому

    33:57 ここ好き

  • @user-re9mh1co6b
    @user-re9mh1co6b Рік тому +2

    オブジェクト指向の定義をクラスとインスタンスにしてしまうと、プロトタイプベースのオブジェクト指向言語が定義を満たさなくなっちゃいますね

  • @jun8k2003
    @jun8k2003 8 місяців тому

    7ヶ月たってあらためてUA-camにおすすめされて見ればこれが神回であると思いきや、オブジェクト指向は古いって!

  • @kakka0402
    @kakka0402 Рік тому

    認知言語学との類似性はUXでよく出てくるメンタルモデルがまさに合致すると思います。
    オブジェクト指向UIとかInformation Architectureはドンピシャ

  • @pureflower292
    @pureflower292 Рік тому +1

    個人的にオブジェクト指向は分類学の影響を強く受けてる気がするんですよね。
    ハトやスズメは鳥類、犬やネコは哺乳類
    で、鳥は飛ぶ、犬やネコは…とか
    ただ、鳥にも飛ばない鳥がいたり、哺乳類にも飛ぶのがいたりして、実際そのまま適用できなかったり、そもそも使いこなすのにもいろんな勉強が必要で微妙なコードもたくさん量産したんですよね。

    • @pureflower292
      @pureflower292 Рік тому

      水野さんの話聞いてると、自然言語の考え方ってプログラミングと近いものがあるのかもですね。

  • @norikatsutube
    @norikatsutube Рік тому

    導入部で吹き出し、迂闊発言気にし過ぎでやられた

  • @Fnak202
    @Fnak202 Рік тому +4

    ゲーム開発だと、どちらかと言えば管理目的で継承させることが多いと思います。
    例えば「当たり判定のあるオブジェクトは、全てこのクラスを継承しておいて」と言う感じです。こうすれば、当たり判定が必要なオブジェクトをリストで管理できるので。
    そして、当たり判定に必要な情報を get するための純粋仮想関数が用意されていて、必要なメンバ関数を実装するように促されます。
    「犬は動物だから動物クラスを用意して…」のように現実世界を記述しようとする試みは、実務上は役に立たないので、現場では使われていない印象ですね。

    • @Anaconda--
      @Anaconda-- Рік тому +3

      それは継承というより実装: interface/trait/protocolなどと呼ばれるものになります。継承(拡張)ではなく属性を持たす概念です。
      専用の機能がない言語(C++とか)では継承と純粋仮想関数で実現されます。

  • @user-jb1kz9ov6n
    @user-jb1kz9ov6n 8 місяців тому

    序盤のやり取り面白い 笑

  • @user-qd4zw2do2h
    @user-qd4zw2do2h Рік тому

    唐突なアクセルホッパーにホットドッグ吹いたww

  • @takenonya1672
    @takenonya1672 Рік тому +2

    オブジェクト指向は、天才が書いたコードを凡人にとって扱いやすくして、コードレベルを、平均化する事に一役担ってると思う。
    それ以前は、アセンブリとC言語の職人とも言える ソフトウェア技術者にのみプログラミングの権利が与えられてたから。

  • @user-fn8rx6wc5w
    @user-fn8rx6wc5w Рік тому +1

    32:08 ゆる言語、ゆるコン、の面白さ!

  • @tenrai3065
    @tenrai3065 Рік тому +12

    オブジェクト言語の代表として根本的には手続き型言語にオブジェクトを追加したJAVAを持ってくるのはもにょる。

  • @whzwiz
    @whzwiz Рік тому +2

    Java版MinecraftはJava Virtual Machine上で動作してるので、ここにも入れ子が隠れているという。

    • @whzwiz
      @whzwiz Рік тому +1

      更にいうと、物理サーバーではなく仮想サーバー上で動作させた場合、さらにもう一つインデントが増える

  • @wai5401
    @wai5401 Рік тому +4

    「オブジェクト指向プログラミングを用いたGPT4上にコンピュータや人間を抽象的な自然言語を用いて、記述できるのでは?そしてそれはGPT4上に世界を再現できるのでは?」という落合陽一さんの発言とこの動画の内容がメチャクチャ、リンクしてて、とても参考になりました

  • @J_CHICKEN137
    @J_CHICKEN137 Рік тому +1

    乗っかって(rideして)上書きしちゃうからオーバーライド、引数によって道(road)が分かれるからオーバーロードと覚えました(本当はloadなんですが)。「シニフィ、アーン!とシニフィ絵」みたいな覚えやすい方法があればいいんですが。

  • @Harusawaxxx
    @Harusawaxxx 3 місяці тому +1

    27:14あたりからの水野さんの解釈面白いし、言語学からの解釈がコンピュータサイエンスの概念の「たとえ」として秀逸でうまく機能してて、相乗的にどちらの概念も理解が深まる面白現象を今回特に感じました。このラジオ、このお二人ならではですね。

  • @user-dv8ie7ty1t
    @user-dv8ie7ty1t Рік тому +1

    27:45 世界とはメンバ変数とメソッドの集合の総称

  • @taro_yamada180
    @taro_yamada180 Місяць тому

    今回の水野さんは途中から獲物を狙うような目つきで、
    堀元の野郎が頑張って発表したテーマを言語学とかの知識で”カマしてやろう”って感じがして面白い。
    ちょうどこの頃は堀元の野郎がゆる言語学ラジオから始まった活動なのに、他の分野にも広げて小銭を稼ごうとしている時期だから、水野さんも色々考えていたんだろうか?

  • @nori2255
    @nori2255 Рік тому +5

    後の棚がナナメになってるの気になりますね

  • @user-bv4ns8sw1m
    @user-bv4ns8sw1m Рік тому +3

    オブジェクト指向にクラスは必須の要素ではないはず
    プロトタイプベースなどもありますし
    ただクラスだとカプセル化と継承がわかりやすくはある

    • @takenonya1672
      @takenonya1672 Рік тому +3

      Classの無いCでも、目的ファイル分けしてそれっぽくすれば、似たように書けますからね。

  • @falconno6554
    @falconno6554 Рік тому

    14:59 この場合は意味素性ってやつみたいにインターフェースを追加してくのではないかなぁ…って思ったんですがどうでしょう?
    class Mutant extends Human and BodyExtender といった感じにするのではないかなと…

  • @taiki7826
    @taiki7826 Рік тому +1

    スターリンソートってありましたよね。

    • @早川眠人
      @早川眠人 Рік тому

      良い名前だ。結果1要素のみ残った場合ポル・ポトソートと言うのだろうか?

  • @yasayuyu6368
    @yasayuyu6368 Рік тому

    実行形式への変換(コンパイル)時にソースコードに対して何の処理しているかを掘れば、人間の認知のお話と繋がるような気もしますが、散らかるだけですね😅

  • @nthdthdyjsehsnw4ethwbt
    @nthdthdyjsehsnw4ethwbt Рік тому

    生成意味論の話はインターフェースの継承でそれっぽい事が出来るような出来ないような。

  • @yuhsylphy
    @yuhsylphy Рік тому

    (メンバ変数, メンバ関数)と(フィールド, メソッド)が対応の取れる呼び方だと思うんですが、対応が揃ってるかどうかを気にする堀本さんにしては珍しく混合して使われてますね。気になるー。

  • @hinyari-aisu
    @hinyari-aisu Рік тому

    次回予告からするにオブジェクト指向は有害であるということですね

  • @azuki_7031
    @azuki_7031 Рік тому

    34:16 だとすると
    オブジェクト指向が難しいのは人間の認知に限界があるからとも言えそう…

  • @doomo5405
    @doomo5405 Місяць тому

    33:44 世界の中で世界をシミュレートできるようになったとき、私達がいる世界が本物である確率は期待値としては限りなく0に等しくなる
    という話(シミュレーション仮説)を思い出した

  • @Sola.No.17
    @Sola.No.17 Рік тому +7

    オブジェクト指向の解説本なんかにある「動物←人間←戦士」みたいな継承の例え話は、害悪の何者でもないのよね。水野さんが指摘している通りの疑問がまず生まれるから、例え話がまず本質を捉えていない。分かり易くしているようで混乱させる例え話の典型。継承は抽象と具象であって、カテゴライズではない。そういった具体的な役割を表すクラスなんてまず作らないし、そんな具体的なクラスは継承なんてしない。人間クラスなんて全然抽象的じゃない。

    • @sei7970
      @sei7970 Рік тому

      実際のゲーム開発では人間←戦士ではなく、どういったクラスを作るのですか?

    • @Sola.No.17
      @Sola.No.17 Рік тому +3

      @@sei7970 ゲーム開発者ではないので、これが正解みたいな事は軽はずみに言えないです。ただ、自分がそういうものを作るのであれば、もっと抽象化して、ゲーム世界内の具体的な物を反映しないような形にします。キャラクターの職業(役割)は名前やHPと同じようにデータで表せますから、そのデータの参照先を持っていればいいだけです(いわゆるhas-aです)。キャラクターというクラスがあればいいわけで、人間という抽象クラスを継承する必要もないです。ゲームの処理的に人間も敵モンスター(人型や獣型など問わず)も同じ処理をした方のが楽ですよね。人間やモンスターのような物の分類的な形から設計するのは複雑になると予想できます。必要なデータを持つ器が最初にあり、その振る舞いもデータとして持つことの方のが楽だったりします。例えば、スキルなんてキャラクターによって保有している種類も数もまちまちですよね。

    • @Sola.No.17
      @Sola.No.17 Рік тому +2

      戦士だから「戦う」コマンドを持っているわけで、人間だからではないですよね。戦えない人間だっているんですから。それに、戦士は人間の役割であって、人間を継承するものではないですよね。そう考えると、これらの設計はヤバいぞ?って見えてくると思います。あまりにも具体的過ぎるし、「is-a」の関係ですらないんですよ。
      「戦士 is a 人間」は成り立っているようで成り立っていません。オークにだって、トロルにだって、リザードマンにだって「戦士」はいますから。

    • @aa-tr5zx
      @aa-tr5zx Рік тому

      そういうインターフェース的なことが次回にあるかもしれませんね。

    • @sei7970
      @sei7970 Рік тому

      @@Sola.No.17
      うーん。戦士や人間クラスを作らずに、キャラクタークラスを作って、インスタンス化するときに職業データの参照をメンバに持たせるということですか?すいません理解が足りなくて。
      なんとなく正解は16:54辺りで水野さんが言っていたことに近い?
      >>「戦士 is a 人間」は成り立っているようで成り立っていません。
      確かにそうですね、まずいですね。これは堀元さんが真っ先に嫌うことな気がしますがどうなんだろ。

  • @user-ff9un5zb6x
    @user-ff9un5zb6x Рік тому +11

    ChatGPTの話も、こんな感じで自然言語とプログラミング言語の観点から語ってほしいなぁ。
    自然言語とプログラミング言語の境界線がどんどん曖昧になっていく近未来を、ChatGPTを使って実演しながら語ると面白くなりそう。

    • @gutsnosada
      @gutsnosada Рік тому

      未来予想は参照できる文献の絶対数とか信頼性が確保しづらそうなので、中々難しそうですね…

  • @haine102
    @haine102 Рік тому

    日本語って、既に定義されている関数(動詞)がある状態で、ほぼ同じ処理(動作)のバリエーションを追加実装する時に、ユーザーの負荷を低減させるためにオーバーロードを使用してますよね!
    「つとめる」とか「はかる」とか。
    本編とはずれていますが感動しました!専門じゃないのであっているかわかりませんが、
    外国語より微妙な定義の違いを明示可能でありながらも、日常的な使用での負荷は少ない。
    この動画で得た知識のみでの考察ですが、日本語は特に動詞において、継承システムが機能しているように思います。
    動詞に含めたい何らかのものはとりあえず「~る」と定義して、そのままオーバーライドすれば、そのまま実社会でエラーを起こさず機能します。
    日本語の漠然とした便利さに納得がいきました!
    この言語を使い慣れていると、名詞の型(冠詞)を正しく定義しないとエラー吐く言語とか、コーディングが面倒過ぎて受け入れ難いですね。

  • @user-tv7yg2ze4t
    @user-tv7yg2ze4t Рік тому

    水野さんが言ったのがプロトタイプ継承っぽいかと思った