ある対象世界を想定するとき,そのメンバーである実体は互いに何らかの形でつながり合っている.このつながりをどう考え,どう表現するか.OOPでは,あまり明示的に指摘されたことはないが,オブジェクトの属性attributeがそのオブジェクトと他のオブジェクトとのつながりを示している.
OOPではメソッドmethodは属性とは別物として扱われるが,属性を値が定まったメソッドの縮退と考えれば,両者は本質的には同じで,われわれはこの二つを合わせて属性と見なす.
このように見なしてもやはりOOPの「属性」とは何なのか,実は判然としない.というよりどのOOP論でも「属性」とはなにかについて,多くを語っていない.OOPのもどかしさは,属性に限らず,このような概念定義の曖昧さにある.たとえば,オブジェクト,クラス,そのインスタンスなど,そして特に属性について明確な数学的モデルを与える議論があるのだろうか(ご存じの読者は是非教えてください).多くのOOP論はいきなりそれらの計算機構について述べるだけである.Haskellなど関数型言語が組み合わせ論理combinatorial logic と表示意味論denotational semanticsによって,また,Prologが述語論理によってモデル化されるのとは大違いである.しかし,これらの理論はいずれも計算機構を基礎づけるものであって,実世界との関連付けは希薄である.
このブログの筆者はこの問題に本格的に立ち入る力量に欠けるため,圏論による略式議論にとどめる.圏論は,主として,E. W .Lawvere and R. Roseburgh: "Sets for Mathematics"(Cambridge Univ. Press 2003)による.
まず,OOPのクラス(またはプロトタイプ)を圏の対象objectとする(OOPのオブジェクトと混同しないこと).イメージとしては集合として良いが,じつは後述するように集合をより一般化したTopos対象(別名,「動く集合」)とするのがよりふさわしいと考える.そのインスタンスは(圏用語での)要素element である.そして,属性は射(mapping または arrow)とする.ただし,OOPでいうsetter属性(値を代入する属性)は別で,属性射への作用actionである(後述予定).射の行き先は対象であるから,あるインスタンスの属性の値は(その写像である)あるクラスのインスタンスになる.
なおサブクラスはしばしばクラスの部分集合だと思われるが,それは間違い.単に属性を共有する別対象であると考えないと体系にほころびが生じる(詳細は後述予定).
属性をもたないクラスのインスタンスはリテラルで表記する.たとえば,数クラスの 0.リテラルの識別子は自身の表記である.属性を持つクラスのインスタンスはその識別子(代理識別子)で表記する.
これまで実体と呼んできたものはあるクラスのインスタンス(要素)に対応する.属性を持つ実体の場合,その属性値は,上述の定義により,他の実体である.つまり,実体から実体へのつながりを与えるものが属性である.この実体に対応するインスタンスを持つクラスはMVCアーキテクチャのモデル部で定義され,モデルクラスと呼ぶ.リテラルとして表される実体は,明示的には属性を持たず,したがって変化もしない.「定実体」とでも呼ぶべきものである.定実体のクラスとして,たとえば色とか,誕生日などが考えられるが,通常はこれらをモデルクラスとしてあらためて与えることはしない.しかし,それらを表記するリテラルのデータタイプが暗黙のうちに与えられている.たとえば,整数,文字列,時間などである.定実体からなるモデルクラスは,これらに対し単射injective mappingを持ち,それは暗黙の属性であると見なすことが出来る.
モデルクラスごとにそのインスタンスに対応する実体の事実factを記録するDBのテーブルが与えられる.DBの各列columnは属性に対応し,各行が実体(のある時点における状態)の事実として属性値を示す.値表記は,上述のように,リテラルないし識別子(DBでいう外部識別子)である.ここで,重要な注意.われわれの実体は変化する.したがってここでいう実体の識別子はそのrun_idであって,通常のidではない.このrun_idを外部識別子として使うことによって変化するものを一貫性のあるものとして捕らえることが出来る.
これらのデータに加えてsince, tillほか各種のメタデータが与えられる.またテーブルは,属性をまとめた射(直積射)のグラフgraph(前掲書p.63参照)の表記である.
圏によってOOPをモデル化すると,議論がより明確になる.とくに属性が射の値域対象であるとすることにより,属性が実は実体をつなぐものであるという位置づけが明確になる.ギリシャ哲学以来の実体とその属性の意味合いとはずれているかも知れないが...なお,前掲書では,対象Xから対象Yへの射を対象Xの属性(property)と呼び,属性についてわれわれと同じ見方をしている.
メタデータは本来の意味での属性を示すものではないが,計算処理では(一定の注意のもとに)属性の一種として扱って差し支えない.このことは圏論による精密な議論で裏付けられるが,このブログでは詳述を避ける.
このようにして,R3は,実体が互いに関係し合いながら変化する実世界を対象とし,それを描写する.
0 件のコメント:
コメントを投稿