「モノとコトによるモデリング」はモノとコトによるモデリングについて考えました。オブジェクト指向の特徴の1つは現実世界をそのまま自然にモデリングできることです。そのとおりなのですがオブジェクト指向を学んだばかりの人がいざやってみると案外難しいものです。
人間社会の活動はモノとコトから成り立っています。物事という便利な言葉がありますが、モノもコトもオブジェクトです。これら扱いの異なるものを同列にとらえると訳が分からなくなってきます。そこで明確にモノとコトを分離してとらえることにより自然な形で分かりやすくモデリングができます。これはドメイン・モデルや分析モデル作成の基本戦略です。
コトはオブジェクト間のリンクで表し、必要ならそこにリンク属性を追加します。通常コトにはその事象が発生した時間があります。これはリンク属性です。オブジェクト図のリンク属性はそのままクラス図の関連クラスとなります。
さて前回宿題として挙げた「松井選手はヤンキースと60億で契約した」はモノ・コト方式でどのようにモデリングできるでしょう。今回はここから考えてみたいと思います。
2005年11月松井選手がヤンキースと4年間で約60億という契約を行ったというニュースがありました。まずここで主要なモノとコトは、
まずモノが存在します。誰と誰が契約するのかという主体となるモノが存在しないと契約だけでは存在できません。4年間で60億というのは契約するというコトの内容です。コトには通常その事象が発生した日時があります。この場合は契約日です。これらをオブジェクト図で表すと、第1ステップは図1(a)のようになります。まずはモノとモノとのリンクがコトです。第2ステップは図1(b)のようにコトの内容をリンク属性で表します。契約月、契約金、契約期間などは松井選手やヤンキースというモノの属性ではありません。契約するというコトの属性です。
ついでながらモデリングの基本戦術は、まずオブジェクト図を描くことです。
次にこのオブジェクト図を一般化してクラス図として見ましょう。オブジェクト図から自然に図2のようなクラス図ができます。
ついでながら一般化したクラス図から別のオブジェクト図を作成することができます。例えば「イチロー選手はマリナースと4年間で約47億の契約を2003年11月に行った」をオブジェクト図にしてみてください。これは練習問題としておきますので、皆さんで実際紙に描いてみてください。
すでにお気付きだと思いますが、クラス図2は野球選手の契約だけでなくどんな契約にも使えそうですね。例えば保険の契約だと、選手と球団の代わりに顧客と保険会社とすればよいわけです。これを一般化するにはどうすればよいでしょう。問題は2つのモノを表すクラス名をどうすればよいかです。人の場合もあれば会社のような組織の場合もあります。
人と組織は本来別のものですが、共通的に取り扱うと便利な場合があります。法律の世界では、自然人つまり普通の人に対して会社は法人、つまり法律上の人として扱われます。法人というのは何か奇妙な概念ですが、自然人と同様に税金を支払う義務など法を守る義務があり、また法律上の権利があります。この自然人と法人の汎化クラスを人という名前にすることもできますが、人と組織を含めて汎化したクラスは通常パーティと呼ばれています。選手も球団もパーティの一種(サブクラス)と考えることができます。
そうすると、選手と球団が契約するという図2のクラス図はパーティを用いて一般化すると、パーティとパーティが契約することになります。このクラス図はどのように描けばよいでしょうか。第1ステップとして関連クラスなしで考えます。単純に図3(a)の形にできますが、同じクラスが2つ並んでいます。これを1つにするとちょっとトリッキーですが図2(b)のように再帰型の関連となります。
この再帰型のクラス図は要注意です。ここからオブジェクト図を起こすと、例えば図1(a)の松井選手とヤンキースのように2つの異なるインスタンス間のリンクとなります。ここがクラス図の理解のちょっと難しいところです。
次に関連クラスを追加しますが、関連クラスを使わない方法と比較してみましょう。図4の左側は関連クラス方式、右側は関連クラスを使わない方式です。
図4下の2つを比較するとどちらがモデリングしやすく、理解しやすいでしょうか。筆者は関連クラス派なので左側です。皆さんはいかがでしょうか?
クラス図の理解の難しさについてですが、実際のモデルには図4下側の左右どちらかの形で現れます。これらが理解できたかどうかは、オブジェクト図が描けるかどうかで確認することができます。左下(a-2)に対するオブジェクト図は、例えば初めに挙げた図1(b)の松井選手とヤンキースの例です。つまり「松井選手:パーティ」と「ヤンキース:パーティ」という異なる2つのオブジェクト間のリンク属性が「:契約」となります。
右下(b-2)のクラス図に対するオブジェクト図は宿題にしておきますので、皆さんで考えてみてください。
『もの・こと分析で成功するシンプルな仕事の構想法』(中村善太郎、日刊工業新聞)という本があります。工場などもの作りの現場で製造工程から無駄を排してシンプルにするための手法として「もの・こと分析」を提唱されています。
工場には原材料となる素材が入ってきて最終製品が出ていきます。この素材と製品がモノです。この変化、変換がコトです。コトは製造工程に細分化されます。各工程で入力となる中間製品Aがその工程の出力となる中間製品Bに変換されていきます。これら中間製品もまたモノでその変換がコトです。
これはシステム開発でも同じです。要件定義というモノが要求分析というコトを経て分析モデルというモノになり、これが設計、実装というコトを経て最終製品であるプログラムというモノに変換されていくわけです。
今回は契約についてモノ・コト方式でモデリングを行いました。人と組織を一般化したパーティという概念を用いると、「契約はパーティとパーティの間に発生する事象である」と一般化することができます。
コトを関連クラスとして扱った方が自然で分かりやすいと筆者は思いますが、皆さんはいかがでしょうか。関連クラスをもう少し用いた方がモデリングは行いやすいし、人の作成したモデルも理解しやすいと思います。
次回は最後に少し紹介した書籍とも関係があるのですが、モノがコトにより姿を変えてゆくというモノの状態変化に注目した少し複雑なモデリングについて考えてみたいと思います。
河合 昭男(かわい あきお)
大阪大学理学部数学科卒業、日本ユニシス株式会社にてメインフレームのOS保守、性能評価の後、PCのGUI系基本ソフト開発、クライアント/サーバシステム開発を通してオブジェクト指向分析・設計に携わる。
オブジェクト指向の本質を追究すべく1998年に独立後、有限会社オブジェクトデザイン研究所設立、理論と実践を目指し現在に至る。ビジネスモデリング、パターン言語の学習と普及を行うコミュニティ活動に参画。ホームページ:「オブジェクト指向と哲学」
Copyright © ITmedia, Inc. All Rights Reserved.