トップページ > プログラム > 2017年03月24日 > LoToasEt

書き込み順位&時間帯一覧

8 位/238 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000002100000100100005



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
オブジェクト指向って不自然な文法だよな [無断転載禁止]©2ch.net
Ruby 初心者スレッド Part 59 [無断転載禁止]©2ch.net

書き込みレス一覧

オブジェクト指向って不自然な文法だよな [無断転載禁止]©2ch.net
417 :デフォルトの名無しさん[sage]:2017/03/24(金) 09:05:40.31 ID:LoToasEt
参考まで、『「ソフトウェア工学」は矛盾語法か?』 http://metatoys.org/oxymoron/oxymoron.html
でアラン・ケイは次のように述べている(この文書はもともとSqueakというSmalltalk処理系の宣伝用に書かれたものだが
彼が考案したメッセージングのオブジェクト指向(による遅延結合の徹底)という実験の成果の総括にもなっている)。


▼新しいアイデアを学ぶとはどういう事か?

このような柔軟な機能はどれだけ複雑である必要があるだろうか? 文法上は決して複雑で無くてもよい。
なじみ深い英語の語順である主語、動詞、目的語(よく前置詞や、たまに暗黙の主語を伴う)があれば全く十分だ。
オブジェクト指向の言い方で言うと、主語はメッセージのレシーバであり、文の残りはメッセージだ
(ここでは「動詞」(up, +, *, forward by, collect, Repeat do, to by) を強調して書く)。これで次のような読みやすい形式になる。

====================
3
‘this is some text’
pen up
3 + 4
3 * ( 4 + 5 )
car forward by 5
{1 2 3 4 5 6 7} collect [ n | n odd ]
Repeat (1 to 100 by 2) do [ ******* ]
====================

そして大切なのは、この単純な決まりに従って必要なだけ新しく読みやすい記法を作る事が出来る事だ。
これは、ユーザが文法と意味の関係を一つだけ念頭に置いておけば良い事を意味する。

====================
レシーバ メッセージ (レシーバが意味を把握している事を意味する)
====================

という事で、オブジェクトはただネットワーク上のピア・ピア・サーバのように考えられ、使われると考える。
(これは偶然ではなく、六十年代後期におけるARPAnet から Internet にかけての開発にさかのぼるアイデアを起源とする)。
オブジェクト指向って不自然な文法だよな [無断転載禁止]©2ch.net
419 :デフォルトの名無しさん[sage]:2017/03/24(金) 09:40:50.81 ID:LoToasEt
>>374
> 正しいオブジェクト指向

数理科学的な定式化が知りたいならルカ・カルデリ(Luka Cardelli)のオブジェクト算法
http://lucacardelli.name/Papers/PrimObjImpSIPL.A4.pdf
等をひもとけばよいと思うけど、そうではなく「オブジェクト指向」の実際的な定義が欲しいのなら

まず、ビヨーン・ストラウストラップ(Bjarne Stroustrup)らが同時期に提唱し現在主流となっている
「抽象データ型のオブジェクト指向」(端的には、SIMULAのクラスというエンティティを使った抽象データ型の実践。
古典的には「「カプセル化、継承、ポリモーフィズム」に象徴される)
http://www.stroustrup.com/whatis.pdf

それと、この考え方とは趣を異にするけれどしょっちゅう引き合いにだされる「メッセージ」といった表現に象徴される
アラン・ケイの「メッセージングのオブジェクト指向」(端的には設計・実装・運用のあらゆる面で遅延結合を徹底する)
>>417 で既に引用したhttp://metatoys.org/oxymoron/oxymoron.html

この二つの「オブジェクト指向」の特徴と違いは最低限押さえておくべきだろうね

これらのどちらに軸足を置くかで進むべき方向が変わるし、混同すると訳のわからないことになるから
両者のバックグラウンドやその主張は目を通すくらいはして、自分なりに整理して区別できるようにしておくとよいと思うよ
オブジェクト指向って不自然な文法だよな [無断転載禁止]©2ch.net
421 :デフォルトの名無しさん[sage]:2017/03/24(金) 10:50:43.93 ID:LoToasEt
>>419
あともひとつ念のため、ストラウストラップらの「抽象データ型のオブジェクト指向」の方について
これはクラスを用いること自体が主なアイデアあるけれどあくまで肝心なのはその先の「抽象データ型の実践」なので
当然のことながら「抽象データ型」については最低限知っておく必要はあると思う

(そうでないと「(抽象データ型による)カプセル化、(クラスの機能である)継承、(両者を使った)ポリモーフィズム」
といった件の古典的三点セットの各々が意図するところの解釈すら怪しくなるので…)

ストラウストラップが書いているようにこれを端的に「ユーザー定義の型」というふうにみなしてしまうのも手だけれども
Such a type is often called an abstract data type. I prefer the term "user-defined type."
できれば提唱者のバーバラ・リスコフ(Barbara Liskov)が書いたものを参考にしたほうがよりよいと思います

抽象データ型(データ抽象ともいう)の成立過程やその意義、ついでにそれをクラスでやる場合のメリット・デメリット(彼女はあえて
SIMULAのクラスは使わず、クラスターという新しいエンティティを使ったCLUという言語を設計している)について
端的によくまとまっているこの文献が個人的にはお薦めです
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.46.9499
2. Data Abstraction、3.4. Implementing Abstract Types あたり

なかでも、クラスを使った場合の抽象データ型のメリット・デメリットについては
ウィリアム・クック(William R. Cook)の「OOP vs ADT」の例が具体的に整理されていてわかりやすいです
(くしくも>>321が指摘するのとちょっと似てる「クラスを使うとインターフェイス拡張時に面倒」も書いてあって興味深い)
https://www.cs.utexas.edu/users/wcook/papers/OOPvsADT/CookOOPvsADT90.pdf
オブジェクト指向って不自然な文法だよな [無断転載禁止]©2ch.net
427 :デフォルトの名無しさん[sage]:2017/03/24(金) 16:18:53.60 ID:LoToasEt
>>422
> 現実の構造を表現するなら、連想配列のほうが表現力は上だよね

そう思うならまずID:3PUwYYlDが>>422,423の要求仕様を連想配列+関数でエレガントに実装してみせてよ
それをうけてオブジェクトで等価のことがよりスマートにできればID:3PUwYYlDの認識不足
できなければオブジェクト勢ぐぬぬ…ID:3PUwYYlD大勝利!って流れの方がわかりやすいかと
Ruby 初心者スレッド Part 59 [無断転載禁止]©2ch.net
901 :デフォルトの名無しさん[sage]:2017/03/24(金) 19:02:13.41 ID:LoToasEt
そうだねRubyはもうオワコン…


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。