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

  Рет қаралды 100,515

ゆるコンピュータ科学ラジオ

ゆるコンピュータ科学ラジオ

Күн бұрын

Пікірлер: 220
@yurucom
@yurucom Жыл бұрын
【参考文献】 ○コーディングを支える技術 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 ※皆様からの楽しいおたよりをお待ちしています!
@まっちー-n8p
@まっちー-n8p 5 ай бұрын
🎉
@user-nk6ff1nw7w
@user-nk6ff1nw7w Жыл бұрын
水野さん、ずっと言語学ラジオやってて笑う
@user-pq2db8xc9l
@user-pq2db8xc9l Жыл бұрын
無謀なメタファーを放り込むホリモーティズムは今回なかったですね
@user-dc3yt4bn1l
@user-dc3yt4bn1l Жыл бұрын
オブジェクト指向って 人間が認知しやすいように作ってるから 図らずも認知言語学とちょっと重なってくるの好き
@takenonya1672
@takenonya1672 Жыл бұрын
その逆で人間にとって最も扱いづらい考え方でもある。 オブジェクト指向の最大の欠点は、コアに潜むバグです。 複雑に継承されたコードは、発狂ものです。
@user-dc3yt4bn1l
@user-dc3yt4bn1l Жыл бұрын
@@takenonya1672 「た」の回で、ゆる言語学ラジオが苦戦していたのは 複雑に継承された結果って事ですね
@user-jh7kp7vg6h
@user-jh7kp7vg6h Жыл бұрын
プログラミング言語の話してるときに水野さんが自然言語のはなし挟み込むの、専門家とかだと正確性を第一に考える都合上そう簡単に突っ込めないけど、一般人に近いこの二人だからこそできることだと考えるとまじで唯一無二だなこれ
@gamma9472
@gamma9472 Жыл бұрын
ポリモーフィズムの凄さを水野さんがピンと来ないというのがむしろ凄さの証拠なのでは、という気がしました。 内部処理(コンピュータ側の都合)を意識せずに、人間の自然な思考に近い形で実装できるがゆえに、「こんなことができるんですよー」と説明されても「普通じゃん」となってしまうわけですよね。 つまり、水野さんが特別さを感じられないほど、自然な思考に近い形になっているということなんじゃないでしょうか。
@user-gx3fe1tm9x
@user-gx3fe1tm9x 8 ай бұрын
これはインスタンスが違うとメソッドが違うことをプログラマが考慮しなくていいっていうエラサがあるわけだから、戦士、魔法使いという実態があって、 戦うって命令をすれば必ず剣で攻撃するか魔法で攻撃するかを自動でしてくれる位の説明じゃないと意図が分からないのは当然な気がする。 実態を考えないとない命令をした時にエラーになるみたいなニュアンスを想起出来ない
@user-mn9fq9bh7j
@user-mn9fq9bh7j Жыл бұрын
初手カウンターの流れ面白すぎるってw
@ivnin
@ivnin Жыл бұрын
鳥クラスを作ってペンギンの表現に窮した場合、実は開発したいシステムにとって意味がある分類は飛ぶ/飛ばないではなかったかを再考する価値があると思います。 生物学的に"正しい"鳥類という分類に従った鳥クラスより、飛行クラスと歩行クラスのほうがうれしいかもしれません。 これは言語学で言うと雪国では「雪」を表す単語が生活上有益な区分に従ってさらに細分化されているのと類似しているとと思います。
@spike2.tracker
@spike2.tracker Жыл бұрын
コンピュータサイエンスも言語学も認知科学に親和性の高い部分があるので、そういうジャンルになるとこの二人の組み合わせは面白くなるよなーと思ってたまさにその回でした。 なお最悪の組み合わせだったのはプリンのやつw
@genie_mago
@genie_mago Жыл бұрын
お互いの得意が噛み合ってて、(真面目なテーマの中では特に)お二人が楽しそうでお気に入りの回
@k_madoka
@k_madoka Жыл бұрын
察しが良すぎる水野さん好き
@kamodomon0913
@kamodomon0913 Жыл бұрын
水野さんが「何言ってんだコイツ」だけで処理せずにちゃんと理解しようと試みているのが素晴らしいと思います。 的の外れたことを言ってしまうのも微笑ましいです(実際、プログラムを学んだ人じゃないと分かりにくいですから)。 そして今回のように言語学との類似性を見出した時などはお見事だと思います。
@UNO-yc1xk
@UNO-yc1xk Жыл бұрын
ポリモーフィズムが初めて腑に落ちたのはcompositeパターンの説明を見た時だった 知らなければ出てこない発想だし再帰も出てくるし初心者がプログラミングの面白さに気づく最高の題材だと思ってる
@jajathree9506
@jajathree9506 Жыл бұрын
水野さんが認知言語学の例えに持っていくの良いですね。オブジェクト指向を理解してきた。 実際にオブジェクト指向設計するのは難しいです。C言語で慣れた人間なので。
@toneryo
@toneryo Жыл бұрын
ポリモーフィズムは初めて見たとき感動したな。 配列に動物クラスのいろんな種類のインスタンスを詰めて、全員に鳴いてもらうみたいなコードで感動した記憶があります。 ポインタも型のチエックもキャストも分岐もなしにこの複雑な処理が直感的に書けるということで、うまくやるなーと感心しました。
@laystorin123
@laystorin123 Жыл бұрын
オブジェクト指向で継承しまくったソースを使うと、 作る方は楽だけどバグが発生したときの原因追及するときにすごい苦労するんだよねぇ しかも継承元に問題があるときに修正したときに継承先にどれくらいの影響があるか分からないのも怖い
@stackam786
@stackam786 Жыл бұрын
ですね。なのでRustやGoなど最近の言語では継承をサポートしなくなってます
@TAKOYAGl
@TAKOYAGl Жыл бұрын
「コンピュータはちゃんと動く必要がある」っていうのが、 逆に人とかの動物はちゃんとしてなくても動ける・動いた結果が実現してればある意味で正解みたいになるのが面白いですね。
@zunzuke55
@zunzuke55 Жыл бұрын
いつも楽しく視聴させてもらってます。 「オブジェクト指向と認知言語学」の後半でお二人が 「コンピュータの上にコンピュータをつくる」と仰ってるのは 仮想化や仮想マシンの概念の話っぽいな~と思いました。 今後はそういうテーマも扱ってくださると嬉しいです。
@nakanaka3
@nakanaka3 Жыл бұрын
水野さんの察しが良すぎて毎回タッカーさんの気持ちが疑似体験できる
@ki3405
@ki3405 Жыл бұрын
我々が認知しているこの「現実世界」とやらは一体何番目の入れ子構造の世界なんでしょうね……?
@user-uf9bp3xn9t
@user-uf9bp3xn9t Жыл бұрын
このチャンネルを見ていると、コンピュータサイエンスと言語学は意外と近しい学問なのかもと思えてくる
@sei7970
@sei7970 Жыл бұрын
計算理論もプログラミング言語も言語学も根っこにあるのはチョムスキーの生成文法だから、それはそう
@falconno6554
@falconno6554 Жыл бұрын
そもそも論理学や数学を用いているので多分ベースにはしていると思いますよ 特に人工知能の分野だと『人間の思考に近づける』という試みなのでベースにはしていると思います
@millipferd
@millipferd Жыл бұрын
言語学を大学で収めて今SEとして働いてるからこのラジオめっちゃおもろい
@ああ-o1g8h
@ああ-o1g8h Жыл бұрын
修めて、な。にどとまちがえるな
@sablaw4011
@sablaw4011 Жыл бұрын
野生の堀元水野だ!
@millipferd
@millipferd Жыл бұрын
@@ああ-o1g8h 文脈を読んで上手く変換しないIMEがクソなんだよ
@haine102
@haine102 Жыл бұрын
これは日本語の大型アップデート時でオーバーロードされてることを暗に指摘しているんですね!
@supleehum7656
@supleehum7656 Жыл бұрын
@@millipferd IPPON! このIME野郎は言語の線状性をちゃんと考慮できてないですね。
@本山香-z5p
@本山香-z5p Жыл бұрын
めんどくささを減らすだと理解されにくいですよねー! 使い回しが発生しがちで、その際に、修正漏れが発生しやすくなってバグが発生しやすくなるって言うとわりと理解てもらえた記憶があります。笑
@user-od5os4yo1f
@user-od5os4yo1f Жыл бұрын
オーバーライドは自然言語で置き換えると 「パンを食う」と「時間を食う」みたいなもんですかね
@user-ec6fu8pm7g
@user-ec6fu8pm7g Жыл бұрын
ほかのラジオもいいけどこの2人の面白さはずば抜けてるように感じる
@mudaso-heavy-user
@mudaso-heavy-user Жыл бұрын
楽しみに待ってました
@doyanizado
@doyanizado Жыл бұрын
14:47 これ、個人開発者が適当に作った場合じゃなくて、商用開発でまじめに作った場合にも結構同じことが起きていているよね…
@nonwe6429
@nonwe6429 Жыл бұрын
コンピューター科学と言語学の殴り合い面白いのでもっと見たいです。
@rawegg
@rawegg Жыл бұрын
ヴィトゲンシュタインの話は僕も論理哲学論考を手に取った時に感じた事と同じですね。本の中身の記述自体がとてもソースコード的だなと感じましたし。 認知言語学や生成文法の話を聞いた時もアプローチが似てるなと思ってましたけど、この動画の話を聞きながら思ったのは、言語学はあくまで現実の自然を記述しようとしてるのに対して、オブジェクト指向プログラミングのベクトルはその逆で、プログラミング"言語"の記述から仮想の自然を生成しようとしてるように見えるので、物理学的な視点で見ると、時間ベクトルがお互いの分野で矛盾を生みそうだなとか思ったりしました。 最近話題になってる生成系AIも画像生成と文章生成では、全く違うアプローチになってる事ももしかしたらこの動画の話題と深いところで繋がってそうな気がしますね。
@ryocoSQ
@ryocoSQ Жыл бұрын
C# を勉強していて、どうしてもポリモーフィズムで何を言いたいのかを理解できず色々と説明を見て回っていたのですが、この動画でやっと理解できてとても助かりました。ありがとうございました。
@yurucom
@yurucom Жыл бұрын
すごい!!ふざけて話してるこのラジオが人の役に立つ日が来るとは!! こちらこそ投げ銭ありがとうございます!!励みになります~!!
@jolnon
@jolnon Жыл бұрын
オブジェクト指向の本質というか、根底にある考え方って「いかにヒューマンエラーを減らすか」という部分にあったりします。ちょっと文系的に言うと「人にやさしく」と言ったところで、例えば、カプセル化は変数と処理をひとまとめにすることでスコープ範囲をコントロールでき、継承によって繰り返しの処理をできるだけ減らすことができるので、それはプログラム構造の整理→コードの簡素化→可読性の向上につながります。コンピューターの高性能化によりチームでのコーディングが複雑になるにつれ、連携不足や難読化が加速しヒューマンエラーに起因するバグの量産がオブジェクト指向言語がよく使われることにつながったと思います。 同時期にXPやアジャイル開発等が流行り始めたのも、偶然の一致ではないというのが私の見解です。あと、後半は宇宙シミュレーション仮説につながる話だなーと思いましたw
@afukono_0321
@afukono_0321 9 ай бұрын
改めてコンピュータ科学と言語学的の、この2人のタッグ最強すぎる 収録を通して考察が深まっていくあたりがたまらない
@nakami4402
@nakami4402 Жыл бұрын
実際のコーディングの思考手順をよく考えてみると、 1. てきとうな名前のクラスを作って、やらせたい仕事一式を記述する。 2. 「この仕事をするのは何係だろう?」と比喩を考えてクラス名を改善する。 3. 仕事の細かい手順を書き込む。 4. 複数のクラスを作っているうちに、だんだん、親クラスにまとめたほうが効率いいなと思うようになる。 5. 「この仕事をする人達は何部の何課だろう?」と比喩を考えて親クラスを作って、基礎的な仕事をそっちに移していく。 といったところです。 すべては比喩であり水野さんの気づきは圧倒的に正しいと思いました。
@国会疑似堂
@国会疑似堂 Жыл бұрын
33:20 マインクラフト内にマインクラフトを作った人もいるらしいですよね。
@和歌山みかん-z7p
@和歌山みかん-z7p Жыл бұрын
水野さんの凄さを痛感出来る回が増えた ChatGPTの回では主役を張れる
@idontknow_idontknow
@idontknow_idontknow Жыл бұрын
20:15 水野さんのテロップのWhom did you seeに誤植があります
@shindy_jp
@shindy_jp Жыл бұрын
プログラミングパラダイムの最終回がオブジェクト指向で終わってしまうのは微妙では?と思っていたら、次回に続くとのことで安心しましたw
@TANAKA_YASUHIRO
@TANAKA_YASUHIRO Жыл бұрын
すっかり「ゆる哲学ラジオ」でしたね! いや、人間と世界の関係の本質に関わる対話だったから「ガチ哲学ラジオ」でした!!
@ゆる-w2k
@ゆる-w2k Жыл бұрын
水野さんの言う特徴をいくつか用意してラベル付けするアプローチは、Rust言語のTraitに近そうですね。 代表的な概念全体を親として1つ継承するのではなくて、概念を複数の特徴に分割しておいて、こっちの特徴は受け継ぐがあっちの特徴は受け継がない…といった柔軟な記述ができる。TypeScriptのUnion型にも近しさがありそうです。 Rustは堀元さんが好きな言語じゃなさそうな匂いがしますが、古典的なオブジェクト指向モデルの問題を乗り越えた最新のプログラミング言語についてもいつか語って欲しいです!
@shachah_svaahaa
@shachah_svaahaa Жыл бұрын
28:20 『論理哲学論考』の主張は「言語が有意味であるためには世界の構造がこのようになっていなければならない」という逆の発想だと聞いたことがありますが、「世界の成り立ちを言語に基づいて説明する」という点はオブジェクト指向と確かに似ていると思います。
@flat1701
@flat1701 Жыл бұрын
ポリモーフィズムの真価は「具象クラスを知らなくても操作できる」ところにあると思う。これのおかげでフレームワークがはかどったと言えるのでは。
@nthdthdyjsehsnw4ethwbt
@nthdthdyjsehsnw4ethwbt Жыл бұрын
動画でそう言ってるやん
@takenonya1672
@takenonya1672 Жыл бұрын
知らない事で、得する事もあるけど、組み込み時のデバッグは、致命的。
@pureflower292
@pureflower292 Жыл бұрын
個人的にオブジェクト指向は分類学の影響を強く受けてる気がするんですよね。 ハトやスズメは鳥類、犬やネコは哺乳類 で、鳥は飛ぶ、犬やネコは…とか ただ、鳥にも飛ばない鳥がいたり、哺乳類にも飛ぶのがいたりして、実際そのまま適用できなかったり、そもそも使いこなすのにもいろんな勉強が必要で微妙なコードもたくさん量産したんですよね。
@pureflower292
@pureflower292 Жыл бұрын
水野さんの話聞いてると、自然言語の考え方ってプログラミングと近いものがあるのかもですね。
@hbellstar
@hbellstar Жыл бұрын
「ポリモーフィズムは、オブジェクト指向の奥義」と思っているので、水野さんにも多少なりとも響いたのをみて嬉しくなりました。
@sai_139
@sai_139 Жыл бұрын
お二人の会話、ニヤニヤが止まらない😊
@ぱぺぽぺーぽー
@ぱぺぽぺーぽー Жыл бұрын
シンエヴァでも反宇宙の事物は人間に知覚出来ないから過去のイベントを経由して理解させている描写がありましたね
@趣味で数学をやっている者-g1b
@趣味で数学をやっている者-g1b Жыл бұрын
メタファーの話も論理哲学論考の話もプログラミング言語も全部、技術的には圏論で全て扱えそうですね〜
@pa_n___da
@pa_n___da Жыл бұрын
論理哲学論考に辿り着くのエモすぎる
@d0-0
@d0-0 Жыл бұрын
ポケットモンスターリスコフの置換原則 レイコフの生成意味論
@youseemeetoo
@youseemeetoo 9 ай бұрын
面白かったです。ヨーデルって例えは、アーティスティックな表現という次元で分類をしたら、それもまた難しいということなのでは?とおもいました。原典もみてみますね。
@EanaHufwe
@EanaHufwe Жыл бұрын
17:22 〇〇らしさというのは、オブジェクト指向の「インターフェース」に該当するではないかと思います。 例えば、一定の順番で並べられるオブジェは「Comparable」を実装したり、中にいろんなものが入れれるコンテナオブジェは「Enumerable」を実装したりとか
@ああ-o1g8h
@ああ-o1g8h Жыл бұрын
Comparable を implements していても「一定の順序で並べられる」とは限らないです……! (Comparable を implements している class の instance の集合が、Comparable#compareTo の結果に従ってトポロジカルソートが可能とは限らないので!)
@equi_nokusu
@equi_nokusu Жыл бұрын
28:40 あたりの水野さんの話は、業務要件定義にあたりますね。
@ePhSh
@ePhSh Жыл бұрын
オブジェクト指向は世界をどう切り取ってプログラム化するかの話をしているので、 人間が考える世界とはどのようなものか?を考える哲学・論理学や、 人間が世界について記述するために用いる言語などと近接するのは必然と言えば必然
@whzwiz
@whzwiz Жыл бұрын
Java版MinecraftはJava Virtual Machine上で動作してるので、ここにも入れ子が隠れているという。
@whzwiz
@whzwiz Жыл бұрын
更にいうと、物理サーバーではなく仮想サーバー上で動作させた場合、さらにもう一つインデントが増える
@takaot4316
@takaot4316 Жыл бұрын
遙か昔、組み込みJavaのプログラムをアセンブラにして見た事があるけど、インスタンス化とかでメモリコピーが多様されているのを見て、実装は大変だなと思った事がある。っと同時に当時Javaは速くないと言われていた理由が分かった気がしたのを思い出しました。動画内で"コピーとは違う"というのが何回か出てきて思い出した次第です。プログラムの世界は、01からどんどん遠くなって行く事がある意味進化と言えますが、最近のAIにプログラミングさせる状況を見ると中々感慨深い物があります。
@じーちゃん-f1e
@じーちゃん-f1e Жыл бұрын
今回の話の中で、継承の話をしている時は「どうやって色々なジョブのキャラを簡単に実装しよう?」だったのが ポリモーフィズムの話になるとレイヤーが1つ上がって「どうやってたたかうコマンドを実装しよう?」になるんですよね。 そしてその段階になると「たたかうコマンドって何するコマンドなの?」という問い対して大抵の人は「キャラに通常攻撃させるコマンドだよ」という説明になるのと同じように、この段階になると、人間はもはやそのキャラが何のジョブかなんてどうでもよくなってしまうんですよね。 なので「キャラに通常攻撃させる」という人間が自然言語で行う仕様説明と近い形で記述できるようになるポリモーフィズムという機能はかなり偉いんですよね。
@Fnak202
@Fnak202 Жыл бұрын
ゲーム開発だと、どちらかと言えば管理目的で継承させることが多いと思います。 例えば「当たり判定のあるオブジェクトは、全てこのクラスを継承しておいて」と言う感じです。こうすれば、当たり判定が必要なオブジェクトをリストで管理できるので。 そして、当たり判定に必要な情報を get するための純粋仮想関数が用意されていて、必要なメンバ関数を実装するように促されます。 「犬は動物だから動物クラスを用意して…」のように現実世界を記述しようとする試みは、実務上は役に立たないので、現場では使われていない印象ですね。
@Anaconda--
@Anaconda-- Жыл бұрын
それは継承というより実装: interface/trait/protocolなどと呼ばれるものになります。継承(拡張)ではなく属性を持たす概念です。 専用の機能がない言語(C++とか)では継承と純粋仮想関数で実現されます。
@gochuui1
@gochuui1 Жыл бұрын
実際には「人間」みたいなクラスをつくるというよりは 語尾が -or型になっている「〇〇するもの」で書くのが規約になっていて まさしく「流れるもの」を「時間」と「川」に継承させるように 分類で安易に継承するのではなく、目的に従って意思を継承するようにしたい(これは宗教戦争か?)
@atsushigrizlupo8479
@atsushigrizlupo8479 Жыл бұрын
初学者なのですが、この規範はどの言語を想定していますか?
@gochuui1
@gochuui1 Жыл бұрын
@@atsushigrizlupo8479 いや、命名規則は宗教戦争だから...言語よりチーム内ルール次第だ ただ-erとか-orとかついてるとクラスだなぁって思うし 動詞ならメソッドだなぁって、ワイは思う
@Sola.No.17
@Sola.No.17 Жыл бұрын
単純な動詞+er(or)は、型やクラスってよりも、インターフェースに付ける名前と認識していますね。名詞+動詞+er(or)は、一番やっちゃ駄目な型(クラス)定義ですね。後で絶対に困ることになります。
@atsushigrizlupo8479
@atsushigrizlupo8479 Жыл бұрын
@@gochuui1 なるほど。ありがとうございます!
@明太子太子
@明太子太子 Жыл бұрын
マイクラの話で思ったのが「いつから自分達の世界が1番目と錯覚していた?」
@tenrai3065
@tenrai3065 Жыл бұрын
オブジェクト言語の代表として根本的には手続き型言語にオブジェクトを追加したJAVAを持ってくるのはもにょる。
@mxs105
@mxs105 Жыл бұрын
今回めっちゃおもろかったな
@user-re9mh1co6b
@user-re9mh1co6b Жыл бұрын
オブジェクト指向の定義をクラスとインスタンスにしてしまうと、プロトタイプベースのオブジェクト指向言語が定義を満たさなくなっちゃいますね
@YU-df1cn
@YU-df1cn Жыл бұрын
ポリモーフィズムでめちゃくちゃ腑に落ちたのは、JavaとかのtoStringメソッドかなぁ ユーザー側としてはtoStringがあるということだけ知っていれば、対象がInteger型だろうがObject型だろうが気にせず文字列に変換することが出来るので便利よねっていう
@ddw5111
@ddw5111 Жыл бұрын
水野さん、俺より本能的にオブジェクト指向理解ってる(インフラエンジニア歴20年選手
@Diakw
@Diakw Жыл бұрын
水野さんの言ってる鳥らしさの構成要素を複数定義する立場は、もしかしたら mixin に似てるかも…?
@taimax463
@taimax463 Жыл бұрын
後半の言語理解におけるメタファーの話、DDD文脈で語られることの多いユビキタス言語の話を思い出しました。そういう肉付けもできるなと。
@user-bp7fy2qp9m
@user-bp7fy2qp9m Жыл бұрын
機械語を世界の真理とするなら、オブジェクト指向は糖衣表現。 一般的な人間の認知能力の限界に絶望した先達達が考え出した窮余の一策。 などと下らないことを考えながら聞いていたのですが、次回の話題に期待しています。
@jun8k2003
@jun8k2003 9 ай бұрын
7ヶ月たってあらためてKZbinにおすすめされて見ればこれが神回であると思いきや、オブジェクト指向は古いって!
@キャマオ
@キャマオ Жыл бұрын
いまだにオブジェクト指向の神話に浸っているので次回が楽しみです。
@早川眠人
@早川眠人 Жыл бұрын
オーバーロードと一緒に出てくるのがジェネリック
@taro_yamada180
@taro_yamada180 3 ай бұрын
今回の水野さんは途中から獲物を狙うような目つきで、 堀元の野郎が頑張って発表したテーマを言語学とかの知識で”カマしてやろう”って感じがして面白い。 ちょうどこの頃は堀元の野郎がゆる言語学ラジオから始まった活動なのに、他の分野にも広げて小銭を稼ごうとしている時期だから、水野さんも色々考えていたんだろうか?
@Harusawaxxx
@Harusawaxxx 5 ай бұрын
27:14あたりからの水野さんの解釈面白いし、言語学からの解釈がコンピュータサイエンスの概念の「たとえ」として秀逸でうまく機能してて、相乗的にどちらの概念も理解が深まる面白現象を今回特に感じました。このラジオ、このお二人ならではですね。
@nori2255
@nori2255 Жыл бұрын
後の棚がナナメになってるの気になりますね
@ha9ha989
@ha9ha989 Жыл бұрын
「宇宙シミュレーション仮説」というのものありますかし、マイクラの中で世界が再現され、コンピュータが再構成されるのも自然かも知れませんね。
@tekoku3
@tekoku3 Жыл бұрын
25:18 堀元氏渾身のダジャレ 「鳥がエサを取ります」
@takenonya1672
@takenonya1672 Жыл бұрын
オブジェクト指向は、天才が書いたコードを凡人にとって扱いやすくして、コードレベルを、平均化する事に一役担ってると思う。 それ以前は、アセンブリとC言語の職人とも言える ソフトウェア技術者にのみプログラミングの権利が与えられてたから。
@shokaturyou
@shokaturyou Жыл бұрын
水野さんってプログラミングやってました? 解答が鋭すぎてプラグラマー向いてそうな気がしました!
@hobimoto24
@hobimoto24 Жыл бұрын
メタファーの話のところ、ダックタイピング知ったら水野さん感動しそう
@suzushiro5470
@suzushiro5470 Жыл бұрын
16:56 ここら辺の話ってRustで言うトレイトみたいな話になりそうじゃないです?
@kakka0402
@kakka0402 Жыл бұрын
認知言語学との類似性はUXでよく出てくるメンタルモデルがまさに合致すると思います。 オブジェクト指向UIとかInformation Architectureはドンピシャ
@ATI_PC
@ATI_PC Жыл бұрын
堀元さんと水野さんの牽強付会、我田引水合戦がいつ見ても面白いw
@Sola.No.17
@Sola.No.17 Жыл бұрын
オブジェクト指向の解説本なんかにある「動物←人間←戦士」みたいな継承の例え話は、害悪の何者でもないのよね。水野さんが指摘している通りの疑問がまず生まれるから、例え話がまず本質を捉えていない。分かり易くしているようで混乱させる例え話の典型。継承は抽象と具象であって、カテゴライズではない。そういった具体的な役割を表すクラスなんてまず作らないし、そんな具体的なクラスは継承なんてしない。人間クラスなんて全然抽象的じゃない。
@sei7970
@sei7970 Жыл бұрын
実際のゲーム開発では人間←戦士ではなく、どういったクラスを作るのですか?
@Sola.No.17
@Sola.No.17 Жыл бұрын
@@sei7970 ゲーム開発者ではないので、これが正解みたいな事は軽はずみに言えないです。ただ、自分がそういうものを作るのであれば、もっと抽象化して、ゲーム世界内の具体的な物を反映しないような形にします。キャラクターの職業(役割)は名前やHPと同じようにデータで表せますから、そのデータの参照先を持っていればいいだけです(いわゆるhas-aです)。キャラクターというクラスがあればいいわけで、人間という抽象クラスを継承する必要もないです。ゲームの処理的に人間も敵モンスター(人型や獣型など問わず)も同じ処理をした方のが楽ですよね。人間やモンスターのような物の分類的な形から設計するのは複雑になると予想できます。必要なデータを持つ器が最初にあり、その振る舞いもデータとして持つことの方のが楽だったりします。例えば、スキルなんてキャラクターによって保有している種類も数もまちまちですよね。
@Sola.No.17
@Sola.No.17 Жыл бұрын
戦士だから「戦う」コマンドを持っているわけで、人間だからではないですよね。戦えない人間だっているんですから。それに、戦士は人間の役割であって、人間を継承するものではないですよね。そう考えると、これらの設計はヤバいぞ?って見えてくると思います。あまりにも具体的過ぎるし、「is-a」の関係ですらないんですよ。 「戦士 is a 人間」は成り立っているようで成り立っていません。オークにだって、トロルにだって、リザードマンにだって「戦士」はいますから。
@aa-tr5zx
@aa-tr5zx Жыл бұрын
そういうインターフェース的なことが次回にあるかもしれませんね。
@sei7970
@sei7970 Жыл бұрын
@@Sola.No.17 うーん。戦士や人間クラスを作らずに、キャラクタークラスを作って、インスタンス化するときに職業データの参照をメンバに持たせるということですか?すいません理解が足りなくて。 なんとなく正解は16:54辺りで水野さんが言っていたことに近い? >>「戦士 is a 人間」は成り立っているようで成り立っていません。 確かにそうですね、まずいですね。これは堀元さんが真っ先に嫌うことな気がしますがどうなんだろ。
@user-bv4ns8sw1m
@user-bv4ns8sw1m Жыл бұрын
オブジェクト指向にクラスは必須の要素ではないはず プロトタイプベースなどもありますし ただクラスだとカプセル化と継承がわかりやすくはある
@takenonya1672
@takenonya1672 Жыл бұрын
Classの無いCでも、目的ファイル分けしてそれっぽくすれば、似たように書けますからね。
@ぷにょーん
@ぷにょーん Жыл бұрын
ChatGPTの話も、こんな感じで自然言語とプログラミング言語の観点から語ってほしいなぁ。 自然言語とプログラミング言語の境界線がどんどん曖昧になっていく近未来を、ChatGPTを使って実演しながら語ると面白くなりそう。
@gutsnosada
@gutsnosada Жыл бұрын
未来予想は参照できる文献の絶対数とか信頼性が確保しづらそうなので、中々難しそうですね…
@haine102
@haine102 Жыл бұрын
日本語って、既に定義されている関数(動詞)がある状態で、ほぼ同じ処理(動作)のバリエーションを追加実装する時に、ユーザーの負荷を低減させるためにオーバーロードを使用してますよね! 「つとめる」とか「はかる」とか。 本編とはずれていますが感動しました!専門じゃないのであっているかわかりませんが、 外国語より微妙な定義の違いを明示可能でありながらも、日常的な使用での負荷は少ない。 この動画で得た知識のみでの考察ですが、日本語は特に動詞において、継承システムが機能しているように思います。 動詞に含めたい何らかのものはとりあえず「~る」と定義して、そのままオーバーライドすれば、そのまま実社会でエラーを起こさず機能します。 日本語の漠然とした便利さに納得がいきました! この言語を使い慣れていると、名詞の型(冠詞)を正しく定義しないとエラー吐く言語とか、コーディングが面倒過ぎて受け入れ難いですね。
@た介
@た介 Жыл бұрын
唐突なアクセルホッパーにホットドッグ吹いたww
@omamori8107
@omamori8107 Жыл бұрын
24:27 ポリモーフィズムのメリットは、毎回分岐を書く必要がなくなる(むしろ分岐を書けない)ことによって、未知のクラスにも自動的に対応できることを強調したほうが良かったと思います。 「人間が戦う」という処理を書くことで、戦士が物理攻撃で殴る、魔法使いが魔力で攻撃する、の他に、後から吟遊詩人が歌の力でダメージを与える、という処理を追加しようと思ったときに、元の「人間が戦う」の処理に手を入れなくて済む、というのがメリットだと説明できれば良かったと思います。
@webisuvip
@webisuvip Жыл бұрын
「50人分コピペする」RPGツクールで自作システム作る時の地獄を思い出した…
@yukizokin
@yukizokin 4 ай бұрын
戦士クラスと魔法使いクラスをつくると、魔法も剣も使える魔法剣士クラスは別なのか両方を継承するのか迷いだす。でも魔法を属性と考えれば良いのではと考えだす。魔法属性クラスを定義すると白魔法黒魔法赤魔法・・と種類が増えるとまた細分化された魔法クラスが発生し始める。延々細かくクラス化されてゆき管理が追い付かなくなりがち。世の中のほとんどすべてのオブジェクト指向言語を使ったプロジェクトでは大なり小なり陥っていると思う。
@J_CHICKEN137
@J_CHICKEN137 Жыл бұрын
乗っかって(rideして)上書きしちゃうからオーバーライド、引数によって道(road)が分かれるからオーバーロードと覚えました(本当はloadなんですが)。「シニフィ、アーン!とシニフィ絵」みたいな覚えやすい方法があればいいんですが。
@user-zd2sq9bj9p
@user-zd2sq9bj9p Жыл бұрын
ある言語がオブジェクト指向か否かも曖昧な部分があると思います。いわゆる三原則の「カプセル化・継承・ポリモーフィズム」をすべて満たしていたらオブジェクト指向でしょうが、このうち2つだけを満たした言語なんかは意見が別れます。例えばRustは継承がないですが、オブジェクト指向だと言う人もいます(公式のドキュメントにも意見が割れているとある!!)。 Rustはいいぞ
@yukizokin
@yukizokin 4 ай бұрын
抽象概念をクラス分け出来ると、クラス分けすると緩さが少し失われる。綺麗にわかりやすく整理され素晴らしく見えるのだけど、それは抽象概念だから緩さに救われているだけ。使いやすいようにクラス化を細分化していくと厳密な分類概念が必要となってきて、使い勝手ではなく定義するのが目的の細分化が止まらなくなる。
@wai5401
@wai5401 Жыл бұрын
「オブジェクト指向プログラミングを用いたGPT4上にコンピュータや人間を抽象的な自然言語を用いて、記述できるのでは?そしてそれはGPT4上に世界を再現できるのでは?」という落合陽一さんの発言とこの動画の内容がメチャクチャ、リンクしてて、とても参考になりました
@doomo5405
@doomo5405 2 ай бұрын
33:44 世界の中で世界をシミュレートできるようになったとき、私達がいる世界が本物である確率は期待値としては限りなく0に等しくなる という話(シミュレーション仮説)を思い出した
@鷹狩俊平
@鷹狩俊平 Жыл бұрын
27:45 世界とはメンバ変数とメソッドの集合の総称
@白梅みさと
@白梅みさと Жыл бұрын
32:08 ゆる言語、ゆるコン、の面白さ!
@stackam786
@stackam786 Жыл бұрын
動画タイトルを見て誤解する人がいそうなので言っておくと、ポリモーフィズムは別にオブジェクト指向が由来ではありません(※1)。 また、ポリモーフィズムはオブジェクト指向の専売特許ではなく、関数型言語(Haskell、OCaml、Clojureなど)にもあります。なので、「ポリモーフィズムで抽象概念を扱えるようになった」的な話は、関数型言語でも全く同じように説明できます。 ※1: ポリモーフィックな型システムの研究は1960年代(すなわち、Smalltalkが出た1972年より前)から始まっています
@sattoman
@sattoman Жыл бұрын
C言語の算術演算子も整数と実数を同じ記述にできるって意味で、そもそもポリモルフィズム的なんですよね。なのでこれを型とメソッドにまで応用できるようにしたのがOOPのポリモルフィズムなのかなと。 個人的にポリモーフィズムの恩恵で一番感動したのはイテレーターの導入でしょうか。これのお陰で繰り返し処理の記述がかなりすっきり書けるようになったので。
@ああ-o1g8h
@ああ-o1g8h Жыл бұрын
それは polymorphism というよりはどちらかというと operator overloading
@ume5420
@ume5420 Жыл бұрын
会話の中で人間の話が出た際に、鋼の錬金術師を思い出しました。 エドが母親を人体錬成する様子は、クラスの継承とオーバーライドの概念と非常に似ていると感じました。 つまり、「親」が人間クラス、「子」が母親クラスであり、自身の血を子クラスの母親のメソッドに引数として渡し、親クラスのinitメソッドをオーバーライドしようとしたということです。 しかし、ポリモーフィズムの観点からインスタンスを生成しようとした際に、不具合が発生したようです? したがって、天才ではありますが、この時のエドは実務未経験の駆け出しエンジニアであると推測されます。 ちなみに、ポリモーフィズムがなんなのかよくわかっていません。
@graph23
@graph23 Жыл бұрын
”(ソース)コードを小さくする目的のための手段の一つ”と、説明が入らないことが多い気がする。 それで、いわゆるオブジェクト指向の説明をされると、説明はわかるけど有用性がわからんに…
@atsushigrizlupo8479
@atsushigrizlupo8479 Жыл бұрын
33:57 ここ好き
这三姐弟太会藏了!#小丑#天使#路飞#家庭#搞笑
00:24
家庭搞笑日记
Рет қаралды 123 МЛН
Je peux le faire
00:13
Daniil le Russe
Рет қаралды 19 МЛН
Bike vs Super Bike Fast Challenge
00:30
Russo
Рет қаралды 23 МЛН
【ゆっくり解説】へんなプログラミング言語3選
8:02
小学生でもわかる!サーバーってなに?【かんたん解説】
8:05
小学生でもわかる!! IT知識学習チャンネル
Рет қаралды 7 М.
QRコードの模様は、ビルから着想を得て生まれた。【QRコード2】#61
45:43
ゆるコンピュータ科学ラジオ
Рет қаралды 84 М.
LINEをすぐ返せない人の心理を考えよう #359
56:39
ゆる言語学ラジオ
Рет қаралды 129 М.
もしもプログラミング言語が言い争ったら【寸劇】
2:22
だれでもエンジニア / 山浦清透
Рет қаралды 454 М.
オブジェクト指向とは?10分で学ぶ【分かりやすい解説シリーズ#57】【プログラミング】
10:31
徳田 啓【プログラミング学習チャンネル】
Рет қаралды 19 М.
这三姐弟太会藏了!#小丑#天使#路飞#家庭#搞笑
00:24
家庭搞笑日记
Рет қаралды 123 МЛН