お世話になっております。 A.中村です。
On Wed, 1 Feb 2006 00:06:18 +0900
菊地丞様 ****@*****.**.** wrote:
> さて、早速質問なのですが、UMLで集合表現を出来ないものかと
> 調べています。
> http://d.hatena.ne.jp/ahirasawa/20050629
> にあるように、
> ・集合と部分集合の関係は継承で表現する。
> というのは納得できると思ったのですが、
> 和や差も何か表現方法があるのでしょうか。
原理的には有り得そうで、面白そうな話ではあるんですが、
いわゆるOOの一般的な形態
(各種実装言語もそうですし、UMLもそうですが)
としては、
集合(と見たときのClass)の和や差が取り扱えるようには
作られてはいない、
ってところだと思います。
そういう機能をサポートした言語を作ってみたい、とは
思ったりもしますが、
その言語で描ける世界は、JavaやRuby(?)やUMLで表現できる世界を
超越しちゃいそうです。
#そういや確か、サブクラスを作る文法が、
#「subclass名 = superclass名 + {子クラスの新規性質};」
#なんて書きかたになってる言語が、有ったような気がします。
#なんたって「+」ですよ「+」。泣かせるねえ(^^;
あと、単純に足し引きできるものなのか?って問題も有りますね。
ちょうどJavaのInterfaceを引き合いに出すと話しやすいんですが、
Interfaceだと足し算や引き算は考えることが
出来ちゃうかも知れません。
Interfaceをシグネチャの集合とみなすんです。
というのは、Interfaceの中身って奴は、
「同じシグネチャのメソッド」か「違うシグネチャのメソッド」か
のどちらかしかないからです。
衝突してれば単に同一のメソッドだとみなせばいいし、
衝突しなければ同一じゃないメソッドだとみなせばいい。
これなら差も簡単に考えられます。
が、実装(JavaでいえばClass)を含めると…
(なにを集合に見立てるにせよ)
話が途端にややこしくなりそうです。
Override(の中の実装)で、
「上位クラスの性質を実は否定しちゃってるクラス」
とか、幾らでも作れてしまって、
しかもそれは形式的に知る手段が無い。
(文脈にどっぷり依存というか、
JavaDocで語ることしか出来ないというか。)
そういやサブクラス化って、
「条件を絞り込む、つまり上位クラスのサブ集合を作る」サブクラスと、
「機能を拡張する」サブクラスとがあって、
しかも両方は排他的だとは限らず、
しかも形式的に区別つける手段も(大抵の言語でも、またUMLでも?)
用意されていないっすよね。
現実(?)的なOOPは、ピュアな集合の世界から
かけ離れたところを暴走している(^^;、という印象を持ってます。
暴走だから即ち悪いとは限らないのですが、
形式的に性質を調べる、などといった行儀の良い技が
安全に使えるとは限らないという点は、
「ソフトからなかなかバグが無くならない」理由の1つ
だったりするのではないかな、とは思っています。
#このへんは、純粋関数型言語とかの人たちが
#よく言ってるのと似たような話でしょうか…
-------------------------------------
オブジェクトの広場
http://www.ogis-ri.co.jp/otc/hiroba/