前回は「知識とは何か?」というテーマで、アリストテレスをヒントにして知識を第1実体(個物)と第2実体(普遍)に分類し、その構造をUMLでモデリングしながら考えてみました。
今回は、前回冒頭に挙げた「・・・がある」「・・・である」の議論をもう一歩進めて見たいと思います。
■2つの「・・・である」
例えば「ソクラテスは人である」という文章の意味は、ソクラテスの本質は人であることを示しています。そのためにはまず「人」という抽象概念の知識が前提として存在して、ソクラテスという個体は人に属するもののひとつの具体例であるという説明でソクラテスを理解します。
UMLでは、オブジェクト「ソクラテス」からクラス「人」への依存関係でクラスのインスタンスであることを表します(図1)。
一般化すると「AはBである」でAは第1実体(個物)、Bは第2実体(普遍)というパターンです(パターン(1))。この「・・・である」は「・・・のひとつの具体例である」の意味です。
次に例えば「人は動物である」という表現があります。これはAもBも第2実体(普遍)というパターンです(パターン(2))。「人」という抽象概念は「動物」という抽象概念に含まれることを示します。この「・・・である」は「・・・の一種である」の意味です。まず動物という抽象概念の知識が前提として存在して、動物という類を分類するとその中に人という種があることを表しています。(類と種という言葉の使い分けは、どちらも第2実体(普遍)ですが、ここでは2つの概念の相対的関係を表し、上位概念を類、下位概念を種としています。)
この関係はUMLではクラス間の汎化関係で表します(図2)。
■集合として
集合として捉えるなら、パターン(1)は「Aは集合Bの1つの要素である」であり、パターン(2)は「集合Aは集合Bの部分集合である」ということです。
ちょっと不思議に感じるのですが、主語Aが第1実体(個物)であるか第2実体(普遍)であるかに関係なく、人は同じ言葉であらわしています。第1実体(個物)と第2実体(普遍)は人の認識方法は全く異なるものですが、人はそれを意外と気にはしない。「AはBである」は単純に「AはBに含まれる」と人は理解するということでしょうか。
■種類を要素と捉える
「パターン(1)と(2)の違いを人は気にしない」ことを逆手に取ったといえるようなパワータイプという考え方があります。
例えばパターン(2)の例に鳥と魚「鳥は動物である」、「魚は動物である」を追加します。これは集合では部分集合、UMLでは汎化関係で表現することができます(図3)。
一方「人は動物である」という文章は、人は動物の種類のひとつのもの、「動物の種類」という集合に属する人類という1要素であるという別の見方ができます。鳥や魚もあわせて人類・鳥類・魚類と表現することにします。それらは集合として部分集合ではなく要素となります。「動物の種類」をクラスとすれば、人類・鳥類・魚類はそのサブクラスではなくインスタンスとなります。UMLで表現するなら、インスタンスからクラスへの依存関係となります(図4)。
つまりパターン(2)の「人は動物である」の人を人類と呼ぶ固有のものと解釈し、動物を動物の種類と解釈すればこのモデルはパターン(2)とは異なります。パターン(1)でもありません。この場合、人類・鳥類・魚類などは第1実体とは呼ぶのは具合が悪そうです。本来の、第1実体は視覚など感性で認識可能なものであった筈です。人はそれらを抽象化して第2実体を作りだします。だからこれらはやはり第2実体でなければ困ります。つまり「第1実体=オブジェクト、第2実体=クラス」という単純な図式ではなさそうです。
■パワータイプ
人でなく人類としたのは説明の都合上クラス名とオブジェクト名が同じでは混乱するためで、同じにすることもできます。混乱を避けるため、オブジェクト名の後にクラス名を指定し「人:動物の種類」とします。
クラス「動物」に対して、この「動物の種類」をパワータイプクラス(単にパワータイプ)と呼びます。動物のサブクラスはパワータイプではインスタンスになります(図5)。
集合で考えるなら、図3のように部分集合とするか図4のように要素とするかということです。
集合「動物」 集合「動物の種類」
動物⊃人、鳥、魚 ⇔ 動物の種類∋人、鳥、魚
■パワータイプによるパターン(1)の表現
パワータイプクラスを用いて「ソクラテスは人である」をUML表現するなら、図1は次のようにオブジェクト間のリンクとして表現することができます。
これは「AはBである」のパターン(1)でも(2)でもありません。「人:動物の種類」は感性による認識か理性による認識かという判断基準ならば明らかに後者であるので第2実体に属すべきものです。「第2実体=クラス」と考えてしまいますが、ここではオブジェクトです。
次に「ソクラテスは人である」のUMLによるふたつの表現をまとめます。左側がタイプ(1)の最初の表現、右側がパワータイプ方式による別の表現です。
人は具体的個物をクラスのインスタンスとして認識し理解するのか、あるいはパワータイプ方式のリンクで認識し理解するのかどちらでしょう?
例えば飲料自動販売機でペットボトルのお茶を買うとします。「○○茶」とか「××のお茶」とか見本が上に並び、その下にボタンがあります。商品名は固有名詞です。固有名詞ですが第1実体ではありません。コインを入れボタンを押して下から取り出して自分の手で握ったペットボトルこそが第1実体です。「○○茶」とか「××のお茶」という商品は第2実体です。
手に握った「これは○○茶である」をパターン(1)のようにクラス「○○茶」のインスタンスとして理解するのか、パワータイプで「これは[○○茶:飲料の種類]」と理解するのでしょうか?自販機のボタンを押すときはボタンの上にあるサンプルと同じものがでてくることを期待しています。頭の中でサンプルを抽象化・一般化し、そのインスタンスが出てくるとは考えません。同じ種類のものが出てくると考えます。これはパワータイプの考え方です。
--
今回は、「AはBである」をAが第1実体か第2実体かで認識が異なることをUMLでモデリングしながら考えました。前者はさらにBをクラスと捉える方法の他、パワータイプのインスタンスと捉える方法があり、その違いをUMLで示しました。人間の自然な認識方法は案外パワータイプの方ではないかなと感じました。
ODL ObjectDesignLaboratory,Inc. Akio Kawai-