2003年 3月16日 言語の形態論と クラス 概念 >> 目次 (テーマ ごと)
  ● QUESTION   T字形 ER手法は、どうして、クラス 概念を使わないのか。
  ▼ ANSWER   クラスの生成が恣意的になるから。
2008年 4月16日 補遺  



 T字形 ER手法が クラス 概念を使わない理由は、(事業のなかで実地に使われてきた データ を解析するという前提では) クラス 図を信用していないからです。

 クラス と セット の違いについては、「ベーシックス」 のなかで、すでに記述しているので──同じことを繰り返して言いたくないので──、「ベーシックス」 を参照されたい (32 ページ と 36 ページ)。

 事業のなかで実地に使われた データ を対象として データ 構造を構成する やりかた には以下の特徴がある。

 (1) 日常言語 (自然言語) を使っている。
 (2) データ は コード 化される (コード 体系)。
 (3) データ は (伝票会計を前提にしているので) 同一 フォーマット の くり返し構造 になる。

 (1) および (2) が 「分析工程」 のなかで解析対象とされ──いわゆる 「業務分析」 の対象とされ──、(3) が 「設計工程」 のなかで データ 構造および プロセス 構成の対象とされる。そして、分析工程と設計工程では べつべつの 「方法」 が使われていて、分析工程の アウトプット を システム・エンジニア が 「翻訳」 して設計工程の インプット として変形しなければならない。

 つまり、解析の精度は システム・エンジニア の力量次第ということになる。網羅性検証可能性が保証されていない杜撰な やりかた に陥っているので、そういう やりかた が、はたして、工学技法と言えるのかどうか、、、。言い換えれば、「書きっぱなし」 という、およそ、工学技法とは程遠い やりかた である。

 T字形 ER手法が、最初に狙った点は、一人の システム・エンジニア の価値観に左右されないで、全員が 「合意する」 構造を構成することであった。そのために、T字形 ER手法は、以下の 5つの ルール (規約) を導入した。

 (1) データ の認知 (データ 集合を生成するための判断規準)
 (2) データ の類別 (データ 集合のなかに帰属する性質の判断規準)
 (3) データ の関係 (網羅性と検証可能性を保証する リレーションシップ の判断規準)
 (4) データ の周延 (生成された データ 集合が正しい正規形かどうかを判断する規準)
 (5) データ の多義 (データ──アトリビュート──の多義を排除する規準)

 事業のなかで実地に使われている データ は日常言語を使い コード 化されているので、T字形 ER手法は、コード を解析しながら データ 構造を構成する 「言語の形態論」 として完成した。

 次に、T字形 ER手法が狙った点は 「分析工程と設計工程の溝を埋めて、事業戦略 (事業の 『環境適応能力』) を思考する」 ということであった。事業戦略の検討は以下の 2つの段階から構成される。

 (1) 現状の調査 (「事実」 を記述する。)
 (2) 改善案の提言 (代替案を提示する。)

 T字形 ER手法は 「言語の形態論」 として、前述した 5つの ルール を前提にして、まず、事業を記述して データ 構造を生成する。そして、データ 構造を解析しながら、コード 化の良し悪しや データ (「resource」 と 「event」) の アトリビュート の是非を検討する。さらには、「resource」 間の リレーションシップ を変更して、新たな対照表 (「event」) を生成することもできる。つまり、「事業解析 ⇔ データ 構造」 (事業を解析しながら、そのまま、データ 構造を生成すること) ができる。とすれば、現時点の データ 構造が環境の変化に対して即応できるのかどうかも判断できる。

 実地に使われている データ を言語の形態論の観点に立って解析して、生成された データ 集合が正しい集合かどうか (周延しているかどうか) という点は集合論 (セット 概念) を使って検証できる。

 数学的な正しさというのは、(無矛盾性と完全性を備えている) 「統一的な モデル」 を構成することにあるが、エンジニアリング 的な正しさというのは、「それぞれの目的に合う」 技術を組み合わせて 1つの システム を構成するという点にある。

 1つの システム は 「モジュール」 を単位として編成されるが、「モジュール」 として編成する理由は、環境の変化に対応することと 「再利用」 することの 2つだと思う。

 「モジュール」 を編成するときに注意しなければならない点は、「類似性」 を対象とするのではなくて「相違点」 を対象にしたほうが良いという点である。
 クラス は 「類似性」 を前提にして類を形成するが、「類似性」 を判断するときに、選んだ 「述語」 が曖昧 (広い概念) であれば、概念の一般化が曖昧になる。

 たとえば、正社員と パート は 「従業員」 という クラス になるのは正しいが、正社員と パート では 「相違点」 があるので適用される アルゴリズム が違う。ところが、「類似性」 を使って 1つの クラス として包括してしまうと、その クラス が使う アルゴリズム が多岐になる。この時点で、「アルゴリズム の再利用」 が怪しくなる。
 述語論理には 「一般的な検証手続き」 はない。1つの 1つの論理を証明しなければならない。したがって、「アルゴリズム の クラス」 を生成するというのは非常にむずかしい。

 逆に、「従業員」 という セット を形成してから、「相違点」 を意識して、サブセット にしたほうが、1つの セット のなかで、アルゴリズム の適用が違うことを判断することができる。

 クラス は概念を整理する (再体系化) には最適なのだが、「事実」 を記述するには危険である。クラス というのは エンジニア の教養として習得しておけばよいのであって、クラス を使って事実を記述してはいけない。

 小生 (佐藤正美) は体系化すること (モデル を構成すること) を嫌っているので、「事実の記述」 を主眼として物事を観る気質だから、「クラス」 を扱うことを躊躇っている。小生が クラス 概念を使うのは、せいぜい、「概念的 スーパーセット」 として、描かれた (事実を記述した) T字形 ER図を解析するときぐらいだから。

 たとえば、新人教育と社員教育と セカンド・キャリア 教育という 3つの 「event」 があったら、「概念的 スーパーセット」 として 「教育」 を考えて、「教育」 という観点から判断して、その 3つの 「event」 でよいのか、という使いかたをするが、それ以上の使いかた (再利用を目的とした クラス の生成) をやらない。

 小生が使う クラス は、あくまで、概念の整理 (再体系化) であって、再利用ではないから、T字形 ER手法が クラス を対象にすることは、まず、あり得ない。

 技術的に言っても、T字形 ER手法は、認知番号 (××番号、××コード) を使って セット (集合) を限定 (措定) してから、区分 コード を使って サブセット (部分集合) を検証している。T字形 ER手法が セット 概念を使っているといっても、けっして、「述定」 している (述語を使って外延を生成している) 訳ではない。

[ 参考 ]
 クラス 図では、T字形 ER手法の特徴点である 「アルゴリズム の I/O 化 (一撃必殺の I/O)」 を使うことができない。ただし、T字形 ER手法は データ 構造を対象とした手法であって、データ 構造が吸収できる アルゴリズム は (コード 体系が効果的・効率的に用意されていても) 70 %程度である。アルゴリズム を作成することを対象にしている技法ではない。つまり、T字形 ER手法を使っても、「アルゴリズム の 30 %以上」 を作成しなければならない。

 生産性を高めるために 「再利用」 することを狙って アルゴリズム の クラス を生成しようとしているのなら、生産性を高める最大のやり方は非常に単純であって、アルゴリズム を I/O 化してしまって アルゴリズム を作成しないようにすればよい。

 



[ 補遺 ] (2008年 4月16日)

 セット (ZF の公理系) と クラス (BG の公理系) は、数学上、定義が違います。ただ、ZF のなかで、「置換公理」 があるので、「置換公理」 を使えば、セット を クラス に 「翻訳」 することができます。数学者は、「証明」 のなかで、「well-defined」 を重視しなければならないのですが、われわれ シロート は、数学の論文を執筆することもないし、数学者ほどに厳しい定義を使う機会もないでしょうね。とすれば、われわれ シロート は、事物を概念化する際、セット と クラス を同じようにみなして使っても、事物の概念化では齟齬がでないのかもしれない。ただ、TM [ T字形 ER手法の改良版 ] では、セット を使った理由は、「合意された」 集合を指示するために、コード 体系が導入されているからです。言い換えれば、しかじかの 「性質」 を いくつか組にして個体を認知するのではなくて、個体指示子が、すでに、個体を指示している、ということです。すなわち、個体指示子を使って、「対象 (domain)」 が事前に限定されているということです──したがって、「分出公理」 に適 (かな) うということです。もし、「分出公理」 を外せば、セット と クラス を同じにみなして良いかもしれない。ただ、クラス といっしょに 「タイプ」 を使うかどうかは、争点になるでしょうね。

 私は、(TM では、) 「タイプ」 を使わない見地に立っています。ただし、「event と resource」 は、「タイプ」 の観点から 「解釈」 することもできます。ひょっとしたら、「タイプ」 を使ったほうが、「event と resource」 に関する関係文法を説明しやすいかもしれない。たとえば、「タイプ」 として、「数値」 と 「英文字」 を想像してみてください。「数値」 は、計算対象になりますが 「英文字」 は計算対象にならないという 「性質」 は、構文論的に、「event と resource」 にも適用できるかもしれない。

 ただ、私は、「event」 を、意味論上、「事態 (occasion、あるいは case)」 と考えていて、「『事態』 の成立・不成立を検証する」 ことを重視しています──すなわち、「事態の可能態を網羅して検証する」 ことを重視しています。その検証表が対照表です。対照表は、セット 概念のなかで、2つの セット (たとえば、a と b) を前提にして、1つの セット (すなわち、{ a, b } ) を考えることができます──つまり、「対の公理」 を使っています。{ a, b } は、「置換公理」 を適用すれば、「1つの集合としての性質」 を考えることができます。その集合的性質が、基本的に、「事態 (TM でいう 「event」)」 としての性質です。もし、対照表が、つねに、「event」 的性質を示すのであれば、「タイプ」 を導入することもできなくもないのですが、対照表は、いっぽうで、「resource」 としての性質を考えることもできます。たとえば、以下を考えてみてください。

    {銀行 コード (R)、支店 コード (R)、...}.

 この対照表は、しかじかの銀行の支店が開設されたと 「解釈」 するよりも、しかじかの銀行支店を指示していると 「解釈」 したほうが妥当でしょうね──勿論、この対照表の性質として、「開設日」 が実 データ として記録されていれば、「event」 になるのですが、もし、銀行支店名称と日付が同時に記録されていれば、たぶん、以下のような構成にするのが自然でしょう。

    {銀行 コード (R)、支店 コード (R)、名称、...} [ 対照表 ]
    {銀行 コード (R)、支店 コード (R)、開設日、...} [ VE (みなし概念) ]

 つまり、対照表の 「タイプ」 は、つねに、一定であるという訳ではないのです。対照表は、「event」 として 「解釈」 したほうが良いときもあれば──そういうふうに 「解釈」 することが多いのですが──、「resource」 として 「解釈」 したほうが良いときもあります。しかも、対照表は、構文論的には、「resource」 の束なので、「resource」 としての文法を適用します。そういう 「解釈」 が成立するので、対照表 (関数の クラス) は、「タイプ 1」 上、「性質の性質」 を判断する一般手続きがないのです。

 モデル は、「ききめ (有効性)」 「使いやすさ (単純性)」 および 「正しさ (整合性)」 を問われます。これらの観点を いかに調整するかが、モデル を実地に使うときの考慮点です。これらの点を考慮して──そして、上述した 「対照表の性質」 を配慮して──、私は、「タイプ」 概念を導入しないことにしました。クラス 概念を、TM’ では使っているのですが──TM’ 上、現象的には、「クラス の クラス」 として記述されるのですが──、「クラス の クラス」 としての性質を記述してはいない。TM’ では、あくまで、「概念的に」 そういう高階の クラス を記述しているにすぎない。というのは、データベース 上、それらの 「クラス の クラス」 が演算の対象にならないから。

 TM (および TM’) は、基本的に、第一階の述語と セット 概念を使っています──「基本的に」 と綴った理由は、それらの前提を超える 1つの例外現象があって (いわゆる 「HDR-DTL (one-header-many-details)」)、関数の クラス (あるいは、合成関数) を使わなければ説明できない。




  << もどる HOME すすむ >>
  データ解析に関するFAQ