オブジェクト指向は、世界を写実的に描く営み。ルネサンスと同じ。【プログラミングパラダイム・シフト3】#66
HTML-код
- Опубликовано: 28 июл 2024
- 「プログラミングパラダイム・シフト」シリーズの第3回。「オブジェクト指向はルネサンス」「オタクのものだったPCが一般に普及した理由は?」「勝手に中身をイジられない"カプセル化"」など、オブジェクト指向とその特徴のひとつ「カプセル化」について話しています。
【サムネイル画像】
ウィトルウィウス人体図はこちらの画像を使用しております。
smartomaizu.com/wallpapers/so...
【目次】
0:00 おばあちゃんの人形がスイッチでもいい
1:26 プログラミングは神から人へ
4:57 オブジェクト指向はルネサンス
8:08 プログラムは番号が全てだった
10:15 身長を交換しないためのオブジェクト指向
16:54 データや命令は散らばっている
21:10 オブジェクト指向と相性がいいものとは?
28:09 オブジェクト指向の三大要素
36:02 勝手に中身をイジられない"カプセル化"
【参考文献】
○コーディングを支える技術
amzn.to/3TscsJp
○オブジェクト指向の考え方 5th Edition
amzn.to/3lpDaFQ
○WEB+DB PRESS Vol.132
amzn.to/3JtYkuv
○プログラミング言語大全
amzn.to/3yNiYRf
○はじめてのLisp関数型プログラミング
amzn.to/3yNj3V3
【サポーターコミュニティ加入はこちらから】
yurugengo.com/support
【親チャンネル:ゆる言語学ラジオ】
/ @yurugengo
【フランチャイズプロジェクト:ゆる学徒ハウス】
/ @yurugakuto
【おたよりフォーム】
forms.gle/BLEZpLcdEPmoZTH4A
※皆様からの楽しいおたよりをお待ちしています!
【お仕事依頼はこちら!】
info@pedantic.jp
【堀元見プロフィール】
慶應義塾大学理工学部卒。専門は情報工学。WEBにコンテンツを作り散らかすことで生計を立てている。現在の主な収入源は「アカデミックに人の悪口を書くnote有料マガジン」。
Twitter→ / kenhori2
noteマガジン→note.com/kenhori2/m/m125fc452...
個人RUclips→ / @kenhorimoto
【水野太貴プロフィール】
名古屋大学文学部卒。専門は言語学。
某大手出版社で編集者として勤務。言語学の知識が本業に活きてるかと思いきや、そうでもない。
Twitter→ / yuru_mizuno
【姉妹チャンネル】
◯ゆる音楽学ラジオ( / @yuruongaku )
◯ゆる民俗学ラジオ ( / @yuruminzoku )
◯ゆる天文学ラジオ ( / @yurutenmon )
◯ゆる書道学ラジオ ( / @yurushodo )
◯ゆる生態学ラジオ ( / @yuruseitai )
◯ゆる哲学ラジオ (open.spotify.com/show/7t8NNVq...)
#プログラミングパラダイム・シフト #ゆるコンピュータ科学ラジオ_プログラミングパラダイム・シフト
【参考文献】
○コーディングを支える技術
amzn.to/3TscsJp
○オブジェクト指向の考え方 5th Edition
amzn.to/3lpDaFQ
○WEB+DB PRESS Vol.132
amzn.to/3JtYkuv
○プログラミング言語大全
amzn.to/3yNiYRf
○はじめてのLisp関数型プログラミング
amzn.to/3yNj3V3
【サポーターコミュニティ加入はこちらから】
yurugengo.com/support
【おたよりフォーム】
forms.gle/BLEZpLcdEPmoZTH4A
※皆様からの楽しいおたよりをお待ちしています!
年寄プログラマですが毎回興味深く拝見しております。
初めてのHELLO WORLDですが、当時は端末に画面がありませんでしたので紙カードにソースコードを打ち込み、JCLと共に読み込ませて実行しました。
結果は紙に印刷して出てくるわけです。
コンパイルエラーの修正、環境の修正、何回修正したかわかりません。
コンパイル、リンカー、それを処理するために必要な磁気ディスク装置の容量と場所(シリンダ、セクタ、ヘッダなど)も指定、システムライブラリの取り込み・・・思い返すと面倒すぎますねwww。
初めてプログラミングして「全部の変数をパブリックってやつにした方がやりやすいじゃん!」とか思ってた時の自分に見せてあげたい素晴らしい動画でした
右も左もわからないときは楽そうな方向に傾いちゃうもんね。
水野さんの「エンジニア、憧れの!」という反応がかわいくて、幸せな休日の朝を始められました
@YUKKURIKAISETSU そうやって動画伸ばすの効率良いですね。
あとチャンネル名が企業っぽいのにyoutubeのコメ欄に出没するっていう
企業ではやらなそうなことをするのが相反していて最高だと思いますよ。
自分が学生だったDOSが全盛のころは、C言語がやっと流通し始めたころだったので、教授よりも新しいモノ好きの学生の方が詳しかったりしました。
ただ、数少ないC言語の書籍に「はじめてのC」という扇情的なタイトルをつけられてしまっていたので、ブックカバーを付けずに通学中の電車内で読んでいると、エロい本読むんじゃねーよという目線を浴びたりしましたw
私はPyPyを触っていました
右足が「下駄」左足「雪駄」で爆笑間違いなしや!
初代ポケモンの、アイテム移動させて〜みたいな方法でバグが発生する理屈の解説を見ると、何番のデータが何番に起き変わって〜とか今回の話で理解度が高まりました。
堀元さんが「水野さん察し良すぎ」って褒めながら教えてくれるのすごくいいよね
コンピュータサイエンス未履修なのに塾でScratchを使ったプログラミング講座を指導しているのですが、今回のオブジェクト指向回のお陰で解像度が大幅に上がりました!
ありがとうございます!
Scratch風にプログラムしたものを、Arduinoの偽C言語にコンパイルしてくれるサービスもあるので、手に取って遊べるおもちゃを作ることも可能になってきました。
ruclips.net/video/6Wu9ugtGZls/видео.html
楽しみに待ってました
最後に「50年の歴史を4回のシリーズで追っていく」とあったけど、
「宗教改革」から「聖書の翻訳」に「ルネサンス」と世界史上の重大イベントの数々と同じような事象が、たった50年ですべて起こっているという地味に恐ろしい事実があるのもコンピュータ科学の凄まじいところです。
コンピュータの歴史爆速すぎ。
次回の内容も非常に楽しみにしています。
オブジェクト指向とルネサンスとの共通点は「いろいろな側面を持っているので人によって定義がバラバラ」というのもありますね
それよね。
ぶっちゃけ堀元さん、何を言っても誰かからは怒られるこの話題をよく出したなと思った。
これが理由で、自分の中でのオブジェクト指向は一種のバズワード扱い。
万人に支持される正しい定義はどこにも存在しない。
36:01 「強くその指向性を謳った」
これめちゃくちゃ感動してしまった、なぜかわからないけど最短で最良の表現って感じがする
17:25 ここの水野さん、初見の概念の咀嚼力が高すぎる
冒頭から喩えの堀本が本領発揮していてにっこり
コンパイル、アセンブル、リンク・・・幾度もの ”failed" を乗り越えたうえでの "Hello World" だから感動ものですよね。52回のエラーは勲章です。
「水野に自転車を運転させる」は”ケッタ”
オブジェクト指向、ネットにわかりやすい解説はありますが、
やっぱり初心者のときにつまづきやすいところなので、
この雑談を聞く感覚でオブジェクト指向の雰囲気が学べるのは最高ですね!
右の人、昨日よりだいぶ下ネタが好きそうな人に変わったな、、
良かったですね、これで水野さんに(悪い意味で)名前を覚えられましたよ
イク時シニフィアーーーンて言ってそう
補足しました。絶対に許しません(水野)
捕捉…
@@YOSHI_Colonial 良かったですね、これで水野さんに名前を覚えられましたよ
サムネの堀元さん、左腕が2本描かれてるからたぶんtesticulousだしbepissed
待ってました!!
22:21 ここのくだりであたふたする堀元さんと水野さんのつっこみ好きすぎてリピートしてる😃
環境構築のところ初心者学習だとだいたい『お呪い』だけで理由飛ばされて、いざ自分で0からやろうとすると意味不明なりがち
オブジェクト指向に対して漠然とした理解しか持ってなかったけど、今回で理解できてすごくよかった
スベらないための履物である雪駄を履いてくことでスベるのは草
環境構築から入ろうとして何もできなくて何が悪いのかもわからなくて詰みました!みんなそうなんですね😂
これ聴いてるとプログラムたくさん書いてた頃の事思い出して楽しくなる
「オブジェクト指向とはこういうものだよ」
という具体例から、
「メンバ変数とはこういうこと?」
と察せられるのがすごい。
学生時代に雑誌てSmallTakを知った時の感動を思い出しました。
プログラミング経験がない人にオブジェクト指向を説明する堀元さんの苦労お察しいたします。
雪駄と下駄を片方ずつ履いてカプセル化された薬を飲むのがオブジェクト指向ってことですね。
人の名前を呼ぶときは敬称を付けること
・「ストップウォッチの話は一旦ストップしよう」と言われた瞬間に、それまで大量に吐き出され続けていた「?」が止まりました☺️
・1997年に「今まではディレクトリと呼んでいたけれどこれからはフォルダーと呼べば良い」と言われて、それ自体が私には「呪文」のようだったけど、それから26年経ってやっと理解できたような気がします。
水野さんの相変わらずの察しの良さ且つクリティカルな要約に感服
最近、堀本さんによる冒頭の導入の流れが予測できるようになりました
情報科の学生時代、普通に(かっこいいと思って)雪駄を履いていたのだけれど、知らぬ間にすべっていたのか…
わたしも下駄履いてたねえ。不思議なことに、その手の性癖は消えないらしくコメで絵文字😊をつかって書くものだから、今はオジサン・オバサン構文と呼ばれて、また滑っていたりする。睦子の魂ってやつだろうか…
39:03 「誰から呼び出される?」ってツッコミ偉すぎる
環境変数間違ってて詰む、コンパイル通らなくて詰む、実行できなくて詰む、実行して想定と違って詰む、プログラム間で値が受け渡せなくて詰む
待ってた
入り方がかまいたちみたいで笑っちゃいました🤭
他には?他には?他には?…
冒頭のストップウォッチに対する水野さんの答えは、オブジェクト指向というよりUNIX哲学が近い気がする
ウィンドウシステムはオブジェクト指向と相性いいですね。画面のモノにメッセージを送るといいようにやってくれる
これ面白いのは、最近はこのオブジェクト指向がデータと処理が一緒になってるのが逆に拡張しにくいとかで、今はオブジェクト指向あんまり良くないみたいな事になってて、
しかもそれで出てきたのが、関数型プログラミングっていう関数主体みたいなのが主流になりつつあるのが逆行してて面白い。
それはデータドリブン型。ここでのオブジェクト指向はイベントドリブン型(会話型プログラミング)に寄った話だと思うよ
RustやGoなど、最近の言語では継承をサポートしなくなってますね。プログラムがカオスになりやすいから当然ですね。
なお関数型言語は、オブジェクト指向言語が生まれる前からあります
堀元さんがノリノリで活き活きして話す時って、聞き手の言語認知への破壊力が強くて草w
プロットもムズー
大学時代に書籍を見て初めてJavaに挑戦した時、Hello World まで到達できずに挫折しました!
3~4年ほど前にarduinoを知ってLCDに"Hello Wold"を表示するまでに、100回ぐらいエラー出しました。
環境構築がトラウマになりそうになったからコンテナの勉強始めたらそこでまたたくさん躓いて、環境構築の不便をなくしたいだけだったのになー、みたいになりがち。結局環境まわりで常に頭悩ますこと自体はなくならなそうだなーと。
私の地元では外履き用のスリッパのことを「せった」というので、講義にスリッパを履いていけば良いと思います
スリッパというよりサンダルでした
セッタ(setter)とかけて雪駄を履いてスベるとは高度なボケですね。
プログラミング界のグローバリストは
すべてのオブジェクトを外から遠隔操作する
優秀なラジコンを持っている
・・・否、現実も同じか
ダイクストラって聞くたびに「ダイクストラはかく語りき」って言いたくなる衝動が
初めての"Hello World!"表示で手間取ったっけ?と自分の記憶を掘り起こしてみたら、
80年代のROM-Basicの環境だったので環境設定する必要がなかったことに気が付いたw
Windows(やDOS)だと開発環境を導入するだけで一仕事でしたからねぇ。
オブジェクト指向が進んだのは、GUIとの相性もありますが、ハードの性能が実用的になった
(潤沢なメモリと活用できるだけの処理速度とコスト)こともあるんでしょうね、本題から外れるけど。
Windows3.1にネットワークを組み込むだけで一苦労だった。
80年代だとテープからBASICを読み込むのが環境構築かな。
@@早川眠人 シャープのMZ80に、雑誌に載っていたダンプリストをひたすら打ち込んでテープに記録する。中身は二ンモニックのアセンブラー!?というバイトをしたことがあります。
@@早川眠人 BASICを読み込ませた後、片面10分のカセットテープに記録されているプログラムを読ませるんだけど、そのテープが繰り返しに負けて伸びちゃって読み込めないというトラブルに、読めたタイミングで銀色の放電記録テープに16ドットの文字を出力してそれを打ち直すという…。
メタルテープ~~!!どなたかお客様でType4テープをお持ちの方はいらっしゃいませんかぁ~~!!
(使えない)
パラダイムシフトは考え方の変化なので、必ずしも言語がその機能を持っている必要がないのが肝ですね
C言語で関数ポインタを駆使してオブジェクト指向風に作ったり、Rustのようにより高機能なtraitの使い方を制限してオブジェクトにしたり
みんな環境構築で詰むって聞いてすごく勇気づけられた
コメント欄がコンピューター版プロジェクトXで溢れていて感動です。機械音痴でも検索やら動画視聴できるのは皆様の努力あってと。と同時に技術の進捗と同程度に処理やリサイクルが進んでほしい。プラゴミとかデブリとかアスペストとか。
あれ、コトラボの人じゃん!
コラボかな?
植物の回面白かったです!
Windowsの初期壁紙って現実世界を模してるかと思いきや、実は現実世界で撮られた写真なんだよな…
オブジェクト指向もクラスが階層的になって継承やポリモーフィズムを使いまくると根本を変えた時に全体に影響しすぎて不具合起きたり、追いかけてると、深みにハマるような感覚になりますね。
それは、設計者が悪いのでは?😂
@@Burajiru-san 簡単に言えばそうです。 システム規模によりますが、数十万から百万ステップ以上のシステムになれば、度重なる要求と仕様変更に応じてどこかに矛盾が起きてきます。そして全てのコードを理解している人も居なくなり、階層構造にも矛盾が起きてメンテナンスフェーズでだましだまし運用する事になってしまいます。そうなれば作り直しが手っ取り早いのですが、たかが数億円を越える開発コストを今の時代出せる企業なんて少ないのです。
Microsoftの.Net Frameworkはその何百倍もの規模ですが、むしろ便利に使えますし、見やすいコードが書けます。オブジェクト指向かどうかは関係ないですし、規模が大きいかどうかも関係ないです。言語が悪いとか言うと勘違いする人が居るのでやめましょう。言語を使う側の問題です。
@@user-mv3ub4iw1n まずは日本語の理解力をあげてください。悪いとは書いておらず深みにハマるということです。まあこれが理解できないんですから、勘違いしてるのはあなた自身なんですね。そもそも、言語を使う側の問題も含めた感想を書いているんですよw
確かに、ひとつひとつは見やすいコードを書けますね。これを駆使した数十万行のシステムの事を言っています。
パラダイムシフトを起こしたのは、抽象データ型(abstract data type)であって、オブジェクト指向は一番世の中にヒットしたADTの実装じゃないかなあ
森博嗣の「オブジェクト指向の基本原則」を思い出した
たとえ話のアクロバティックなサーカスを見ている感じ
「setter」を習ったときに「セッタ」を買いがち
っての聞いてタバコのセブンスターの略称の方に脳内変換された笑
ノリで喫煙始めるとか結構ハードル高そうやのにようやるわと思ったけど「雪駄」なのね、健康的でよろしい笑
水野さん飲み込みいいなぁ
病院で例えると個人的にわかりやすい。
薬名と効能と対象疾患と薬価とID がまとまっていて、医者は最初の三つを使って診察して、医療事務はID と薬価がわかれば処理できる。
新薬が追加されても医療事務のアップデートをしなくても医療費は算出できる。
そして時代はネットワーク大前提のシステムとなり、
スマホはグーグル、少なくともインターネットというリヴァイアサンにお伺いを立てないと
電卓程度の役にしかたたないようになった
ということを踏まえると脱線ではないな
N88-BASICの環境構築マジでできなくて積んだ中学時代
まず町にその手の本が一冊も売ってなかった……
変数と関数を人間の物の捉え方で包み込むのがオブジェクト指向だと思ってたので、
写実的というより観念的と表現したほうが俺的にはしっくりくる
(観念的よりもドンピシャな表現はあると思うが思い浮かばない)
同感です。
動画のオブジェクト指向の説明「プレイヤーが主語でスライムを対象にとって攻撃する」は、人間の捉え方によく合っているというだけで、むしろ、プレイヤーとスライムを並列にとる従来の関数の方が写実的とも言える。事実はただプレイヤーとスライムがいて攻撃力分HPが減るということだけだから。
それを、「プレイヤーが、攻撃する(スライムに)」と書けるようになったのは直感的に理解できるというだけで、写実的?というと誤解を招いちゃうかも......
どのオブジェクトが主体だと(人間/プログラマが)思うか?は場面ごとにマチマチでも全然いいので、"オブジェクト指向"でもプレイヤーとスライムは並列に(特に無理せず)書けるっちゃー書けると思います。各オブジェクトの中「から」みればそうなってるって風に書く。
システム仕様(構造設計)では、プレイヤ、モンスタ、と概念的かも知れないが、プログラム仕様(詳細設計)になると、勇者、スライム、と象徴的になってゆき、テスト仕様(検査実施要項)では、勇者ハル、スライムベスみたいに写実的になってゆく。どれもオブジェクトなので、これらをクソミソにまるっと概念で語るのは少し乱暴だと思う
同じく、写実的という言葉選びからして、まるで理解してない人だなと思いました。沢山あるデータの共通点を抽象化したり、沢山ある処理の共通点を抽象化してまとめるのがオブジェクト指向の利点です。写実的というと実体の有るイメージですが、クラスによって共通化されるデータや処理には実体の無いものの方がむしろ多いです。
オブジェクト志向言語、自然言語っぽいですよね
例えを聞いて思いましたが、ソフトウェアであれモノであれ、人間が作るものは言語的認知に合わせて作られるのかもしれませんね
XPの壁紙の山は、アメリカに実在する丘ですよー
オブジェクト指向を理解すると世界の見え方が変わります(過言)
もはや存在論や構造主義のような哲学に近い
1行目書く前に3回心が折れました。中学生の時です。なつかしい
新プロジェクト立ち上げの環境構築はマニュアル通りやっても大体動かない・・
取引先に聞いても解決しない・・あるあるですね。
ゆるコンピュータ科学ラジオ全まとめ(順番通り)の再生リストで追っている最中に気づいたんですが、この回入ってないです。
すみません、この動画だけパラダイムシフトのプレイリストに入ってないです!
そうかぁ…いっときまでマックに積まれていたと聞くカードシステム(簡単なプログラミング・マクロ機能らしい)や
2000年ごろにwindows用のシナリオ自作可能ゲームとして出たCardWorthってフリーソフトは、
エディタ使うと自分でキャラカードや機能カードをつくって、それに特定の処理手順なりを組み込めたのだが、
あれはオブジェクト指向の思想をそのままゲームシステムに組み込んでいたソフトだったのか。
プレイ画面でも設定したカプセルはカードのままで、そのカードをクリックしたり、他のカードの機能を使う対象カードを指定したりして遊ぶ。「弓」→「敵」で射つとか。
(たしかまだあって、その気になれば大泉洋の冒険とか勇者水野の堀元討伐とかつくれヤス。)
シリーズものの動画は、過去の動画のURLを概要欄に貼ってくれると嬉しいです。
機械式クロノグラフ作るの大変すぎる。
伸ばし棒を省略するのは電電公社ジャーゴンという説も
現役エンジニアですが楽しく拝見させていただきました。会社の新人にこの動画教えてあげたいですね。
それはそれとしてこの回だけ再生リストに入ってないのが気になりました。
ここ最近の楽しみです
オブジェクト指向でクソ躓いてるんで
getter習ったら下駄履いてかなくちゃですね笑
動詞だけの世界に主語を持ち込んだのがオブジェクト指向
なるほど
GUIはグイと読みますか?もしかしてAWSはアウッスって読むのかな…
カプセル化されてないと簡単なゲームすら誰でもは触れないですね
攻撃をすると、さまざまなパラメータがそれぞれの規則に従って増減する(その計算をしないといけない)のが「攻撃しろ」だけで済むのがオブジェクト指向の利点ですね
環境構築でエラーが出るというあるあるに共感しかないです(笑)
水野さん頭よすぎてびびる
今日2人とも早口すぎて再生速度確認したわw
全部まとまってるリストの中でこの会順番おかしくないですか?なんか結構下の方に入ってるような
フォルダやファイルのリスト化(テキスト化される)機能が欲しい
hello worldは、はじめてやった日できないかったけど、なぜか寝て起きたらできた
今思えば、環境変数が1回ログアウトしないと反映されないからコンパイラを呼び出せてなかっただけだったw
gotoがなくなってプログラムが、作りやすくなったではなく、可読性が高くなったが正解では?
29:25 ちなみに、ポリモーフィズムは「オブジェクト指向の特徴と言われている」かもしれませんが、別にオブジェクト指向が由来ではありません。オブジェクト指向の専売特許でもありません(関数型言語にもあります)。
※念のために書くと、関数型言語はオブジェクト指向言語が生まれる前からあります
水野さん頭いいからたぶんアルゴリズムとデータ構造使ってCの基本できるようになったほうがJavaとかその先の話も早そう(もちろん動画的にはそういう主旨じゃないけど)
オブジェクト指向が写実的というのは一面そうだけど、基底クラスや親子関係は現実世界をある一面でメタ的に見たものと言えそうで、そういう意味では現実世界にはないものをプログラミングしているし、それが人類がうまく継承を使いこなせない要因の1つな気がする。どの観点で切り取るか、どうやって整合性を保ったまま切り取るか、って難しい。
(要は 28:30 の実世界システムを「モデル化」するのが難しいってことやな。シンプルにまとめられててわい、完敗の意を表明)
26:52 急に歯切れがわるくなってびっくりしたw
迷わず行けよ、行けば分かるさ
あのWindowsの壁紙はCGのように見えますが写真なんですよ。
Linux、 gnome派かkdi派か気になる
この回だけ「ゆるコンピュータ科学ラジオ全まとめ(順番通り)」再生リストに登録されていないです。
lsって実は「list segments」の略ってあんまり知られてない
非プログラマにどうやって説明をするのだろうと毎回楽しみに見ているのですが、よく考えたら自分がプログラマーなので水野さんの理解度は良くわからない、でもきっと分かってくれている、と良いなみたいな変な気持ちで見ていることに気付きました。
次のパラダイムシフトなんだろう?
関数型かな?それともリアクティブとか?
あるいは、並列処理とか。
ゲッターとセッターのフィギュア机に置けばいいのか