前回は「流れ去るものと不変なもの」というテーマで、表面現象は日々変化するがその裏に隠れた不変な本質があるというお話をしました。それに気付いた人がその不変な本質に名前を付けます。具体的な固有名詞として名付けられた本質から固有の要素を取り除いた、さらなる本質が普通名詞として名付けられます。オブジェクト指向では普通名詞がクラス、固有名詞がインスタンスと考えることができます。
今回は「UMLと自然言語」というテーマです。そもそもUMLとは統一モデリング言語という1つの言語です。この言語という観点でわれわれが日常使用している日本語、英語などの自然言語と対比して考えてみたいと思います。最後に英語の5文型をどこまでUMLで表現できるかについて考えてみました。
UMLという言葉は3つの単語Unified+Modeling+Languageで構成されています。日本語にそのまま訳すると「統一モデリング言語」となります。まず最後の“L”はランゲージつまり言語です。この「言語」という言葉に若干抵抗感を覚えますが、自然言語に対する人工的な形式言語です。例えばJavaやCも形式言語で、これらはプログラミング言語です。
日本語や英語などの自然言語ってどうやってできたのでしょうか、考えれば不思議です。やはり人間が作ったものなら人工的で形式的ですが、一般的には自然言語と呼ばれます。次にUMLの真ん中の“M”はモデリングでM+Lでモデリング言語、モデルを表現するための言語です。最初の“U”はユニファイつまり1つに統一したという意味で、いろいろたくさんあるモデリング言語を統一したという意味です。結局U+M+Lは統一されたモデリングのための形式言語、略して統一モデリング言語となります。
ここで自然言語と言語としてのUMLを比較してみましょう(表)。日本語や英語など自然言語の基本要素は単語です。UMLではクラス、オブジェクト、アクター、ユースケースなどUMLモデル要素が単語です。次に自然言語には文法があります。文法は単語を組み合わせて文章にするためのルールです。UMLにもクラス、オブジェクト、アクタ、ユースケースなどUMLモデル要素を組み合わせてダイアグラムを作成するためのルールがあります。
自然言語 | UML | 例 |
---|---|---|
単語 | UMLモデル要素 | クラス、アクター、ユースケース |
文法 | UMLモデル要素組み合わせのルール | クラス間の関連、汎化、集約、アクターとユースケースの関連 |
文章 | UMLダイアグラム | ユースケース図、クラス図、相互作用図 |
表 自然言語とUML |
最後に一番重要なのは文章です。単語を文法に従って組み合わせて文章を作成します。UMLで文章に対応するのがダイアグラムです。UMLモデル要素をUMLのルールに従って組み合わせてユースケース図、クラス図、相互作用図などのダイアグラムを作成します。
大きな書店に行くと、一般の人が立ち寄らない奥の一角にオブジェクト指向のコーナーがあり、オブジェクト指向/UMLの書籍が実に多数平積みにされています。「かんたん」「x日でわかる」…などと書かれているUML入門書も多いですが本当にそんなに簡単なものでしょうか。それとも実は難解なものでしょうか。
UMLが簡単か難解かという議論は、次のようにWhatとHowの2つに分けて考えることができます。
自然言語の単語の数と比べUMLモデル要素の数は少ないです。またUMLの文法もそんなに難しくはありません。ダイアグラムの種類もUML 1.xでは9つしかありません。UML入門書が「かんたん」といっているのはここまでのレベルです。
つまりUMLとは何であるか、“What is UML? ”は難しくはないといっています。ならば入門書を読めばすぐにUMLで開発ができるかというと、そうはいきません。つまりどのようにUMLでダイアグラムを書くのか、“How to use UML? ”は簡単ではありません。
問題は良い文章の書き方です。日本語でずっと日々会話を行い、読み書きを行ってきたからといって上手な文章を書くのは難しいものです。例えば会社で週報1つ書くにも上手な人とそうでない人がいます。まして芥川賞を受賞できるような文章は普通の人にはまず書くことはできません。良い文章を書くにはどうすればよいでしょう。やはり古今東西の名著を沢山読み、沢山感動することです。今回の芥川賞の受賞者も10代で読書にはまってしまい、ついには10代で受賞作となる小説を書き上げる力を身に付けたわけです。
自然言語はその使いこなし次第で、光っている言葉や文章とそうでないものができます。UMLも同じです。クラス図1つ取ってみても優れているもの、そうでないものがあります。その違いは何でしょう? どうすれば良いモデルが書けるのでしょう?
UMLで芥川賞レベルのモデルを書けるようになるためには、やはり優れたモデルを沢山読み、沢山感動することが第1歩です。残念ながらUMLの歴史は浅く、また実際のシステム開発で作成されたUMLのモデルが公開されることはほとんどありません。それでも社内を探せばどこかにあるでしょう。あるいはモデリングの勉強会を行い、ディスカッションすることも有効です。
文法に従っている限り日本語の文章に唯一の正解というものはありません。UMLのモデルも同様です。何らかの制約条件の下にモデルはさまざまに書くことができます。全体を理解しやすいモデル、変更や拡張性に優れたモデル、実行時のパフォーマンスに優れたモデル、分散システムを考慮したモデル…など目的に応じて様々なモデルを書くことができます。実際の開発ではこれら様々な制約条件に優先順位を付けてモデルを作成するため、唯一の正解はありません。モデルは何通りも考えられ一長一短があります。
オブジェクト指向の特徴は、現実世界をそのままモデリングできることです。
例えば、「私はPCを所有している」という現実世界があったとします。図で書くと図1の上のように書くことができます。自分とPCの間に線をつなぎ、そこに所有すると書けば、この図の意味はだれが見ても理解できるでしょう。
日本語で表現すると「私はPCを所有する。」、英語で表現すると“I have a pc.”となります。文法としては日本語では「主語−目的語−述語」、英語は「主語(S)−述語(V)−目的語(O)」と順序は変わりますが文章の構成要素は同じです。
これをUMLで表現してみましょう。前回お話ししたようにまずオブジェクト図から書いてみましょう。図1下のように私(仮にAさん)というオブジェクトとAさんが所有している具体的なPCというオブジェクトの間をリンク関係でつなぎ、その上に「所有する」と記述します(UMLではリンクの名前は関連名のインスタンスとして表すので下線を付けます)。このオブジェクト図は図1上の現実世界と全く同じです。オブジェクト指向はこのように現実世界をそのままモデリングしやすいという特徴があります。
次にオブジェクトを抽象概念化してクラスにします。Aさんは「人」、Aさんの所有しているP社製のxx型PCを「PC」とこれも自然にできます。この2つのクラス「人」と「PC」の間を関連でつなぎ、その上に「所有する」という関連名を書いたものがクラス図です(図1)。
図1の日本語および英語による文章の構成要素「主語(S)」「述語(V)」「目的語(O)」に注目してUMLとの関係を整理してまとめてみましょう(図2)。オブジェクト図では主語と目的語がオブジェクト、述語がリンクに対応します。これを抽象概念化したクラス図では主語と目的語がクラス、述語が関連に対応します。
これを整理すると次のようなパターンとして表現することができます。これをここでは「SVOパターン」と呼ぶことにします。SVOは英語の5文型の第3文型です(図3)。
次は対象物そのものではなく、対象物に対する説明を表す形容詞について考えてみましょう。例えば「Aさんはノート型PCを所有する」あるいは、「Aさんは1GHzのノート型PCを所有する」などの「ノート型」やCPUの性能を表す「1GHz」はどうなるでしょうか? これらはオブジェクトの属性値として表現することができます(図4)。
人に対する形容詞は人の属性となります。例えば「24歳の会社員であるAさんはノート型1GHz のPCを所有する」は図5のようになります。
次にもう少し文章を複雑にして、Aさんを説明する言葉にさらに説明が必要な場合を考えます。
「Aさんはサービス業のS社に勤務している24歳の会社員で、ノート型1GHzのPCを所有している」
Aさんの説明に必要なS社の説明が長くなるなら、関係代名詞を用いるか文章を分割した方が分かりやすくなります。UMLではこのような場合S社を別オブジェクトとするとすっきりします(図6)。AさんとS社の関係を新たに追加し、S社の説明をその属性とします。
UMLでSVOパターンを書きましたが、英語の5文型について考えてみましょう。
第1文型と第2文型のVは自動詞で目的語はありません。残りの第3文型から第5文型のVは他動詞で目的語が必要です。目的語(O)はオブジェクト候補ですが、補語(C)は独立したオブジェクトよりは主語や目的語となるオブジェクトの属性の候補です。例えば第2文型SVCの例として、
「Aさんは会社員です」
これだけを単純にモデル化するなら、「会社員」はオブジェクトとしてとらえるよりAさんの職業という属性の値と考えるのが簡単です(図7)。
次に第4文型SVOOについて考えてみましょう。例えば、Aさんの父であるBさんがAさんにPCを買ったとします。
「BさんはAさんにPCを買った」
この文章は「BさんはPCを購入した」という文章と、その結果「AさんはPCを所有する」という2つのSVOに分解することができます。ただしこのPCは同一のものであることを示す必要があります。これはUMLでは2つのSVOパターンを両者が共有する目的語であるPCを共有する形で記述することができます(図8)。
あるいは次のように考えることもできます。先の文章の主語をAさんにして文章を書き換えて、
「AさんはBさんが買ってくれたPCを所有する」
としても文章の意味する内容はほぼ同じです。これは先の関係代名詞の説明を見ると、図6では主語であるAさん側に対する説明がプラスされていましたが、ここでの例は目的語であるPC側に対する説明がプラスされていると考えることができます。元のSVOOの文章をUMLでパターン化するなら図9のように、
となります。
第1文型SVと第5文型SVOCが残りました。まず第1文型について考えてみましょう。UMLでは名詞はオブジェクト(クラス)またはオブジェクトの属性値(クラス属性)候補、動詞はオブジェクト間のリンク(クラス間の関連)の候補です。第1文型は主語と述語しかありません。オブジェクト(クラス)が1つあるだけとなります。述語は対象がないのでUMLには表れません。
第5文型の表現は困難です。ここで使用されるVは普通の他動詞ではなく補語がないと意味が成立しない不完全他動詞と呼ばれるものです。心理的状態を表す好き嫌いや、知覚や五感の見る・聞くなど人間的要素が大きく、オブジェクト指向での取り扱いの難しい範疇に入ります。ここではいったん保留にします。
今回は「UMLと自然言語」というテーマで、UMLも形式言語というカテゴリの一種の言語であるというお話をしました。UMLはオブジェクト指向によるモデリングのための言語ですが、オブジェクト指向は現実世界をそのままモデリングできるという特徴があります。従って、自然言語で表現できるものはそのままUMLで表現することも難しくありません。英語の5文型を表す場合は、主語・目的語はオブジェクトになり、述語はリンクになります。補語はSVCでは主語の属性になります。SVOCのVは人間の感情や感覚的要素が大きく、オブジェクト指向で表現するのは困難です。
次回以降、順序は未定ですが、オブジェクト指向に軸足を置きつつ次のようなキーワードで考えていきたいと思います。
◇ プラトンvs.アリストテレス――ものの本質はどこにある?
◇ 西洋哲学vs.東洋哲学、西洋人の発想と日本人の発想
◇ 分析vs.設計、科学vs.工学、自然vs.人工
◇ 機能要求vs.非機能要求、UML vs.パターン言語
◇ 名前のない品質――パターン言語とは?
◇ ビジネスvs.情報システム−モデリングとは?
河合昭男(かわいあきお)
大阪大学理学部数学科卒業、日本ユニシス株式会社にてメインフレームのOS保守、性能評価の後、PCのGUI系基本ソフト開発、クライアント/サーバシステム開発を通してオブジェクト指向分析・設計に携わる。
オブジェクト指向の本質を追究すべく1998年に独立後、有限会社オブジェクトデザイン研究所設立、理論と実践を目指し現在に至る。
ビジネスモデリング、パターン言語の学習と普及を行うコミュニティ活動に参画。著書『まるごと図解 最新オブジェクト指向がわかる』(技術評論社)、『まるごと図解 最新UMLがわかる』(技術評論社)。『UML Press』(技術評論社)、『ソリューションIT』(リックテレコム)ほかの専門誌に多数執筆。ホームページ「オブジェクト指向と哲学」。
Copyright © ITmedia, Inc. All Rights Reserved.