From: "中村暁史 Nakamura Akifumi" Date: 2000-03-11T09:51:30+09:00 Subject: [ruby-list:21309] Re: 引数コピーとオブジェクト指向 お世話になっております。 A.中村です。 On Fri, 10 Mar 2000 14:40:46 +0900 とみたまさひろ wrote: >そりゃそうなんですけど、Person クラスの設計者とその利用者が >同じでない場合、利用者は Person クラスの内部コードまでは >意識しないので、name.sub!をやっちゃうかもしれませんよね。 うーむ。結局、 1:オブジェクトにはオブジェクト毎の立場ってものがある 2:変数には変数毎の立場ってものがある ってことじゃないかと思うのです。 で、Rubyは、1はサポート出来る(そりゃOOP言語なら当然だ) けども2は出来ない、ってことでしょうかね。 2の必要性ってのは、たしかに無いわけじゃないとは思います。 ですが、ここで間違ったらイケナイなぁと思うのは、 2を実現するために1を犠牲にする、つまりコピーを (もしかしてするべきでないかもな場合でも)してしまう、 ってのは、ちょっとまずいんじゃないかな?ということです。 「あるインスタンスへの色々なアクセス手段を用意する」のと 「アクセスするインスタンスが色々ある」のとでは 全然違う概念ですから。 2についてですが、勿論Rubyにそんなシカケはありませんので、 以下のような文法(?)を妄想しました。 変数には「型」はなくていい(今回の議論は「型」じゃないし)が、 それと似たノリで、「強さ」とかいうものが要ることにする。 最もチャチな文法として class A def string a1 #「強い」a1というメソッドを定義 end def weak a2 #「弱い」a2というメソッドを定義 end end strong a=A.new weak b=a a.a1 #OK a.a2 #OK b.a1 #OK b.a2 #弱い変数から弱いメソッドを呼ぼうとすると例外になる なーんての。 尤もこれ、カプセル化には一切寄与しませんけどね。 強い変数を作る自由が他者に開放されているので結局同じこと。 この辺のシカケを凄くイイカゲンに(笑)実装したのが C++のfriendだと思います。もっと洗練してくれたら あの方向性も使い物にならないわけでもないとは 思うんですけどね… まあ、あえて言うならば、「鍵」を用意するっていう手は ありますけども。 全部のメソッドに(笑)、そのメソッドを呼んだ相手オブジェクトを 引数として取るようにして、その相手が認証済みオブジェクトで なければ、例外で蹴るとか。 あるいはソレが自動的に判るように、言語を拡張してもらうとか。 …そういや yourself とかいう概念があるんでしたっけ?(^^;;;;; うーん。弱い変数にせよ相手オブジェクトyourselfにせよ、 要するに「呼んだのは誰ですか?」ってのが問題みたいですね。 #弱い変数は、「呼んだ相手」の問題を「呼んだ変数」に #すりかえる作戦です。 繰り返しますが、呼んだのが誰であるかを悩むのを回避するために そもそも呼ばれるもの(オブジェクト)のほうを分裂させて しまいましょう、っていう作戦は、少なくとも「常に正しい」やり方 ではナイはずです。それだけは忘れないでください。 LENSとかいう言語の作者に言わせればきっと「dupに多くの役割を 負わせすぎている」ということになるんではないかと(^^; oop未満だとは思いません。その願望をyourselfみたいなやりかたで oopに取りこんでいくことは無理無く可能だと思いますので。 それをヤルのがRubyかどうかは別ですが。 よだん: 「慣れるしかない」とまでは俺は 思いませんけどね(^^;>松尾さん[ruby-list:21289] 「なぜ慣れる価値があるのか」を説明したことになりませんから。 ここまででも、まだ説明は足りないと思っています。 最終ゴールに至る説明を我々人類が出来るかどうかは謎ですが… あ。一つ重要なことを忘れてた。 「呼んだのは誰か?」が真の問題ではないのだったっけ。 「呼んだのはどういう状況か?」という、ひどく曖昧なもの でしかないですねこれは。相手の身分がわかっただけで 十分な情報が得られるかというと、そうじゃない。 かといって弱い変数だって同じこと。 逆にメンバ変数のホストからだったら本当にナニしてもいいのか? つまり、「ナニから」オブジェクトを保護したいのかが 判らない(言語で記述できない)! 「状況」を表すような構文って、ちょっと俺は思いつきません。 少なくともオブジェクト指向なんかより「はるかに上」のモノ じゃないかと思います。どうやったら手懐けられるのか 想像もつかないなあ。#あるいはもしかして論理的に不可能かも… で、現状では、取り敢えずオブジェクト指向「で」妥協して いるんだと思います。今回の皆さんの御助言の中にも、そういう 妥協という面を含んでいるものは、幾つかあったと思います(失礼)。 まつもとさんは2回しかなかったと言っていた計算機言語の パラダイムシフトですが、次に来るべき 3rd impact は 果たしてナニなんでしょうね…