🐼老後の嗜み:オブジェクト指向プログラミング言語はオブジェクト指向じゃない!?:キーワードは抽象化 ― 2021年06月12日 08:45
老後の嗜み:オブジェクト指向プログラミング言語はオブジェクト指向じゃない!?:キーワードは抽象化
ルビーのお勉強(学習?)で、クラスのところで早くも飽きが来て(早過ぎじゃね?)、以前読んだ記事の中で気になっていた部分を突っ込んで調べてみた。
(まつもとゆきひろ
「社会的責任」からじゃない。 趣味でつくって、おすそ分け。:以前にも引用した記事)
https://wired.jp/waia/2018/01_yukihiro-matsumoto/
この記事を書いているライターは、たぶん、プログラマーとして社会的に大きな影響を与えた人物像を描きたかったのかも知れないけど、浮沈子が気になったのは、プログラミング言語作者としての観点の方だな。
「プログラムを書くときに、われわれ人間にはふたつの限界があるんです。ひとつはコストの問題。コストを無限にかけることはできませんよね。もうひとつは人間の理解力、認知の問題です。人は、ある程度以上の複雑なものは、そのまま理解することができない。」(以前にも引用した部分:手抜きか?:手抜きです!)
「ですから、複雑なものは整理し、難しいところはうまく隠して、概略だけで話ができるようにする。これをプログラムの世界では「抽象化」といいますが、その道具のひとつがプログラミング言語」(ここまでで切るところがミソ)
ポイントは、どこまで、どういう形で「抽象化」するかという点だが、その匙加減こそがプログラミング言語を「作る」上での最大の問題だろう。
(抽象化 (計算機科学))
https://ja.wikipedia.org/wiki/%E6%8A%BD%E8%B1%A1%E5%8C%96_(%E8%A8%88%E7%AE%97%E6%A9%9F%E7%A7%91%E5%AD%A6)
「大まかに言えば、抽象化は制御抽象化とデータ抽象化に分けられる。制御抽象化は動作の抽象化であり、データ抽象化はデータ構造の抽象化である。」
「オブジェクト指向プログラミングはデータとコードを同時に抽象化する試み」
今朝のお勉強は、起き抜けのぼーっとした頭には難し過ぎる。
(オブジェクト指向)
https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91
「今何をしているのかと尋ねられた僕は愚かにもこう言った。オブジェクト指向プログラミングと。」
「愚かしいこのオブジェクトは僕の考えを表現するのにとても悪い言葉だった。不活性的でデータを過剰に意識させたからだ。」
「プロセス指向プログラミングの方がずっと良かったと思わないかい?」
ルビーは、オブジェクト指向プログラミング言語として書かれている。
動的型付けで、クラスベースで、インタプリタで、こてこてのオブジェクト指向だが、アランケイに言わせれば、そうじゃないのかも知れない。
コンピューターの中の世界は仮想の世界だ。
現実の写し絵としての仮想世界で、どうやって現実を表現するか。
そして、その仮想化された現実を扱いやすくしていくか。
現実そのものは、なかなか抽象化できないからな。
個性とか、いろいろしがらみもあるし・・・。
せめて、コンピューターの中の仮想世界で、うまい具合に抽象化し、扱いやすくすることが必要だったんだろう。
「クラスを使った記法は単にコードを書くものの利便性のために存在するに過ぎない。」
別に、どういう書き方であっても構わないけど、うまい具合に抽象化し、それを扱いやすく記述することができればそれでいい。
利便性が高ければ、それに越したことはないしな。
簡単に書けて、読みやすく、コピペしてちょろっと書き直して、エラーを吐かずに動けば言うことはない。
今日のお勉強の課題はクラスの「継承」だ。
(クラスを継承する)
https://www.javadrive.jp/ruby/inherit/index1.html
「クラスを継承することで共通した部分は基本となるクラスとして抜き出すことができます。その結果、プログラムの再利用性も高まり、また必ず備えていなければならないメソッドなどを忘れずに備えることができます。」
「今回は「Soarer」クラスが「Car」クラスを継承しています。この時「Car」クラスは「Soarer」クラスのスーパークラス又は親クラスと言い、「Soarer」クラスは「Car」クラスのサブクラス又は子クラスと言います。」
時代を感じる車名だな・・・。
(トヨタ・ソアラ)
https://ja.wikipedia.org/wiki/%E3%83%88%E3%83%A8%E3%82%BF%E3%83%BB%E3%82%BD%E3%82%A2%E3%83%A9
「2005年(平成17年)、日本でもレクサス・SCとしての販売が開始されたことに伴って絶版」
まあいい。
インヘリタンス(継承)を見て、インテリジェンスを連想したり、サブクラスを見てサブスク(ライブ)を連想したり、今朝の浮沈子は妄想が激しい。
(Rubyの継承方法について紹介します|superclassメソッドを使いこなそう)
https://www.fenet.jp/dotnet/column/language/6109/
このページも、サンプルコードが沢山出ていて参考になりそうだ(まだ読んでませんが)。
「抽象化」した頭を、少し現実世界に戻したら、お勉強を始めようかな・・・。
ルビーのお勉強(学習?)で、クラスのところで早くも飽きが来て(早過ぎじゃね?)、以前読んだ記事の中で気になっていた部分を突っ込んで調べてみた。
(まつもとゆきひろ
「社会的責任」からじゃない。 趣味でつくって、おすそ分け。:以前にも引用した記事)
https://wired.jp/waia/2018/01_yukihiro-matsumoto/
この記事を書いているライターは、たぶん、プログラマーとして社会的に大きな影響を与えた人物像を描きたかったのかも知れないけど、浮沈子が気になったのは、プログラミング言語作者としての観点の方だな。
「プログラムを書くときに、われわれ人間にはふたつの限界があるんです。ひとつはコストの問題。コストを無限にかけることはできませんよね。もうひとつは人間の理解力、認知の問題です。人は、ある程度以上の複雑なものは、そのまま理解することができない。」(以前にも引用した部分:手抜きか?:手抜きです!)
「ですから、複雑なものは整理し、難しいところはうまく隠して、概略だけで話ができるようにする。これをプログラムの世界では「抽象化」といいますが、その道具のひとつがプログラミング言語」(ここまでで切るところがミソ)
ポイントは、どこまで、どういう形で「抽象化」するかという点だが、その匙加減こそがプログラミング言語を「作る」上での最大の問題だろう。
(抽象化 (計算機科学))
https://ja.wikipedia.org/wiki/%E6%8A%BD%E8%B1%A1%E5%8C%96_(%E8%A8%88%E7%AE%97%E6%A9%9F%E7%A7%91%E5%AD%A6)
「大まかに言えば、抽象化は制御抽象化とデータ抽象化に分けられる。制御抽象化は動作の抽象化であり、データ抽象化はデータ構造の抽象化である。」
「オブジェクト指向プログラミングはデータとコードを同時に抽象化する試み」
今朝のお勉強は、起き抜けのぼーっとした頭には難し過ぎる。
(オブジェクト指向)
https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91
「今何をしているのかと尋ねられた僕は愚かにもこう言った。オブジェクト指向プログラミングと。」
「愚かしいこのオブジェクトは僕の考えを表現するのにとても悪い言葉だった。不活性的でデータを過剰に意識させたからだ。」
「プロセス指向プログラミングの方がずっと良かったと思わないかい?」
ルビーは、オブジェクト指向プログラミング言語として書かれている。
動的型付けで、クラスベースで、インタプリタで、こてこてのオブジェクト指向だが、アランケイに言わせれば、そうじゃないのかも知れない。
コンピューターの中の世界は仮想の世界だ。
現実の写し絵としての仮想世界で、どうやって現実を表現するか。
そして、その仮想化された現実を扱いやすくしていくか。
現実そのものは、なかなか抽象化できないからな。
個性とか、いろいろしがらみもあるし・・・。
せめて、コンピューターの中の仮想世界で、うまい具合に抽象化し、扱いやすくすることが必要だったんだろう。
「クラスを使った記法は単にコードを書くものの利便性のために存在するに過ぎない。」
別に、どういう書き方であっても構わないけど、うまい具合に抽象化し、それを扱いやすく記述することができればそれでいい。
利便性が高ければ、それに越したことはないしな。
簡単に書けて、読みやすく、コピペしてちょろっと書き直して、エラーを吐かずに動けば言うことはない。
今日のお勉強の課題はクラスの「継承」だ。
(クラスを継承する)
https://www.javadrive.jp/ruby/inherit/index1.html
「クラスを継承することで共通した部分は基本となるクラスとして抜き出すことができます。その結果、プログラムの再利用性も高まり、また必ず備えていなければならないメソッドなどを忘れずに備えることができます。」
「今回は「Soarer」クラスが「Car」クラスを継承しています。この時「Car」クラスは「Soarer」クラスのスーパークラス又は親クラスと言い、「Soarer」クラスは「Car」クラスのサブクラス又は子クラスと言います。」
時代を感じる車名だな・・・。
(トヨタ・ソアラ)
https://ja.wikipedia.org/wiki/%E3%83%88%E3%83%A8%E3%82%BF%E3%83%BB%E3%82%BD%E3%82%A2%E3%83%A9
「2005年(平成17年)、日本でもレクサス・SCとしての販売が開始されたことに伴って絶版」
まあいい。
インヘリタンス(継承)を見て、インテリジェンスを連想したり、サブクラスを見てサブスク(ライブ)を連想したり、今朝の浮沈子は妄想が激しい。
(Rubyの継承方法について紹介します|superclassメソッドを使いこなそう)
https://www.fenet.jp/dotnet/column/language/6109/
このページも、サンプルコードが沢山出ていて参考になりそうだ(まだ読んでませんが)。
「抽象化」した頭を、少し現実世界に戻したら、お勉強を始めようかな・・・。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。
※投稿には管理者が設定した質問に答える必要があります。