Тёмный

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

ゆるコンピュータ科学ラジオ
Подписаться 112 тыс.
Просмотров 104 тыс.
50% 1

Опубликовано:

 

15 окт 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

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