"オブジェクト制約言語で記述された操作の事後条件を解析してデータフロー情報を抽出する抽出手段と、抽出された前記データフロー情報を統一モデリング言語のモデルと対応づけて表示する表示手段とを備えることを特徴とする情報処理装置。前記データフロー情報は、コンポーネントが提供する操作のパラメータと、該コンポーネントに定義されたクラスの属性とを対応づけた情報であることを特徴とする請求項1に記載の情報処理装置。前記表示手段は、前記データフロー情報を、前記操作のパラメータと前記クラスの属性との間の有向線で表示することを特徴とする請求項2に記載の情報処理装置。前記表示手段は、前記データフロー情報を、前記操作の事後条件における前記操作のパラメータと前記クラスの属性とに対応する要素の間の有向線で表示することを特徴とする請求項2に記載の情報処理装置。前記抽出手段は、前記操作の事後条件における等価演算または包含演算から前記データフロー情報を抽出することを特徴とする請求項1に記載の情報処理装置。前記抽出手段は、前記操作の事後条件におけるオブジェクト制約言語の表現が由来する統一モデリング言語のモデルの名前付き要素の集合から、前記データフロー情報を抽出することを特徴とする請求項1に記載の情報処理装置。前記抽出手段は、前記操作の事後条件においてオブジェクト制約言語の表現の特定のキーワードが付与されているか否かに応じて、データフロー情報を抽出することを特徴とする請求項1に記載の情報処理装置。前記抽出手段は、前記操作の事後条件において参照されるパラメータの方向から、データフロー情報を抽出することを特徴とする請求項1に記載の情報処理装置。前記抽出手段は、前記操作の事後条件におけるオブジェクト制約言語の表現ノードが取りうる値から、データフロー情報を抽出することを特徴とする請求項1に記載の情報処理装置。オブジェクト制約言語で記述された操作の事後条件を解析してデータフロー情報を抽出する抽出工程と、抽出されたデータフロー情報を統一モデリング言語のモデルと対応づけて表示する表示工程とを有することを特徴とする情報処理方法。コンピュータに、請求項10に記載の情報処理方法を実行させることを特徴とするコンピュータ読み取り可能なプログラム。しかしながら、前述の非特許文献1で述べられている変換技術は、パターンに基づく発見的な方法に基づいており、OCL記述の意味を考慮した正しい変換できないケースがある。また非特許文献2で述べられている変換パターンは有用であるが、全てのコンポーネントの仕様中のOCL記述が、平易な記述に変換済みであることは期待出来ない。事実、非特許文献2では誤解釈されがちな複雑な記述がUMLの仕様書に記載されている事例も挙げており、実開発で使用されるOCL記述にも、複雑な記述が含まれている可能性が高い。そこで、本発明は、複雑なOCL記述に対してもデータフロー情報を正しく読み取り、可視化する情報処理装置を提供することを目的とする。本発明によれば、情報処理装置に、オブジェクト制約言語で記述された操作の事後条件を解析してデータフロー情報を抽出する抽出手段と、抽出された前記データフロー情報を統一モデリング言語のモデルと対応づけて表示する表示手段とを備える。本発明によれば、OCL記述のデータフロー情報を正しく読み取り、把握することが可能になるという効果がある。以下、添付図面を参照しながら本発明の実施形態を説明する。<実施形態1>図1は、本実施形態のUML設計ツールが動作する情報処理装置のブロック構成例を示す図である。情報処理装置は、CPU101、ROM102、RAM103、HDDハードディスクドライブ104、KBキーボード105、マウス106、モニタ107、ネットワークのインターフェースI/F108を有する。これらは、バス109を介して互いに通信可能に接続されて構成されている。CPU101は、情報処理装置全体の動作制御を司るものであり、ROM102内のプログラムを実行するほか、HDD104等から各種の処理プログラムソフトウェアをRAM103に読み出して実行する。ROM102は、プログラムやプログラム内で用いられる各種データ等を記憶する。RAM103は、CPU101での各種処理のために、処理プログラムや処理対象の情報を一時的に格納するための作業用エリア等として使用される。HDD104は、大容量記憶装置の一例としての構成要素であり、モデルやデータフローなどの各種データ、あるいは各種処理の実行時にRAM1203等へ転送される処理プログラム等を保存する。キーボード105及びマウス106は、情報処理装置に対する各種指示等をユーザが入力するために用いられる。モニタ107は、ユーザへの各種指示情報や解析結果等の各種情報の表示を行う。インターフェース108は、ネットワークから情報を取り込んだり、ネットワークへ情報を発信したりするために用いられる。本実施形態のUML設計ツールのソフトウェア構成を図2に示す。UMLモデルOCL記述201は、統一モデリング言語UMLで記述されたモデル及びオブジェクト制約言語OCLで記述された情報であり、XMI等の形式でHDD104に保持される。データフロー解析部202は、UMLモデルOCL記述201からデータフロー情報203を生成し、HDD104上に格納する。UMLモデルOCL記述201とデータフロー情報203は、ネットワーク上のサーバストレージに保持されても良い。モデル表示部204は、UMLモデルOCL記述201とデータフロー情報203から生成したイメージを、モニタ107に表示する。図3は、モデル表示部204によってモニタ107上に表示される、UML設計ツールの表示Window300の構成を示している。構成View301には、UMLモデルの構成に従って、システム、パッケージ、インターフェース、操作、コンポーネント、クラス、等のモデル要素が階層的に表示される。構造View302には、ユーザがマウス106を用いて、構成View301上で選択したモデル要素の構造が表示される。図3では構成View301上でコンポーネントCP1が選択されており、実線の枠によってそのことが表現されている。構造View302には、コンポーネントCP1とコンポーネントCP1が実現するインターフェースIF1の構造が表示されている。構造View302では、ユーザがマウス106を用いて選択した操作Op2が点線によって強調表示されており、構成View301でも同様に、操作Op2が点線によって強調表示されている。制約View303には、構成View301あるいは構造View302で選択されたモデル要素に関するOCL記述の内容が表示される。図3の例では、操作Op2に関する事後条件が表示されている。データフロー表示切り替えボタン304は、データフロー情報の表示、非表示を切り替えるために使用される。コンポーネント利用者は、制約View303に表示される事後条件の内容から、操作Op2のデータフローを理解する。図3の事後条件CLS1.allInstances~->forAllk|param3.includesk.Att1を例に説明する。この事後条件は、CLS1の、属性Att1の値が操作Op2の入力パラメータparam1の値に等しい全てのインスタンス集合ISの性質を記述している。ISの全ての要素は、操作Op2の実行後に属性Att2の値が入力パラメータparam2に等しく、さらにリンクを持つCLS2のインスタンスの属性Att1の値の集合が、出力パラメータparam3に含まれる。つまり入力パラメータparam2からクラスCLS1の属性Att2にデータフローAが発生し、クラスCLS2の属性Att1から出力パラメータparam3にデータフローBが発生することが分かる。ここでpreは、OCLで定義されている、操作実行前の属性値を参照するための特定のキーワードである。しかし、図3のようにテキスト形式で記述されたOCLの論理式から、上記のデータフロー情報を読み取ることは容易ではない。また非特許文献2では、図3の例のようにforAll演算子を入れ子状に使用したOCL記述は、誤って解釈される恐れが高い、と報告されている。本実施形態に示すUML設計ツールでは、ユーザがマウス106を用いて、データフロー表示切り替えボタン304を押下することによって、データフロー解析部202が上記のデータフロー情報を自動的に抽出する。さらに図4の画面に遷移して、モデル表示部204がデータフロー情報ABを有向線で表示する。図4の表示内容から、コンポーネント利用者が、データフロー情報を誤解なく理解できることは明らかである。図4の画面で、データフロー表示切り替えボタン404を押下することにより、再び図3に示すデータフロー情報の表示を伴わない画面に遷移することも出来る。図5は、データフロー解析部202の処理手順を示すフローチャートである。ステップS501において、ユーザが選択したUMLモデル要素のOCL記述を読み出し、OCL記述中の各事後条件について、ステップS502からS511までの処理を繰り返す。先ずステップS503において、事後条件の構文解析を行い、抽象構文木を生成する。この処理は既存の構文解析木を用いて行うことが出来る。例として図9に、図3と図4の制約Viewに示した事後条件の抽象構文木を示す。次にステップS504において、抽象構文木上のノードを示す変数N、リスト変数L、ハッシュ変数H、リスト変数Fを、それぞれ抽象構文木のルートノード、空リスト、空ハッシュ、空リストに初期化する。そしてステップS505において等価包含関係の解析サブルーチンを呼び出し、さらにリストL中の各要素nについて、ステップS506からS510の処理を行う。ステップS507においてnの左オペランドのノードを引数にして起源の解析サブルーチンを呼び出し、ステップS508においてnの右オペランドのノードを引数にして起源の解析サブルーチンを呼び出す。ステップS509においてnを引数にしてデータフローの決定サブルーチンを呼び出す。ステップS507とS508の処理順序を入れ替えても良い。図6は、等価包含関係の解析サブルーチンの手順を示すフローチャートである。このサブルーチンは、データフローを表す可能性があるOCL表現として、抽象構文木中の等価演算=、あるいは包含演算Includes、IncludesAllに対応するOCLの表現ノードを抜き出す処理を行う。ステップS601において、引数で渡された抽象構文木ノードNが、演算を表すOperationCallExpのインスタンスに該当するか確認する。該当する場合には、ステップS602で、その名前が=、Includes、IncludesAllの何れかに一致するか確認する。名前が一致する場合には、ステップS603においてノードNをリストLに追加する。図9の抽象構文木の例では、ノード901、902、903が上記の等価演算、包含演算に該当する。そしてステップS604からS606において、子ノードとリストLを指定して、再帰的に自身のサブルーチンを呼び出す。図7は、起源の解析サブルーチンの手順を示すフローチャートである。このサブルーチンは、引数リストに含まれる、等価演算、包含演算を表す抽象構文木ノードの各々について、演算の両オペランドの値が由来する、UMLモデルの構造View上の名前付き要素の集合を特定する。例えば図4のデータフローAに対応する等価演算の左オペランドはj.Att2であるが、これはクラスCLS1の属性Att2の値集合であるため、このオペランドの起源はクラスCLS1の属性Att2である。起源の解析サブルーチンは複数のOCL表現に対して実行されるため、求めた名前付き要素の集合をハッシュHにメモ化して、再利用する。まずステップS701で、ハッシュHに引数ノードNをキーにして値を取得した値でリスト変数OLを初期化し、ステップS702で、その値がNULLか否かを判定する。NULLで無い場合には、指定された引数ノードNの起源は既に算出済みであるため、リターンする。ステップS703でOLを空リストに初期化した後、ステップS704においてNがLiteralExpのインスタンスに該当するか確認する。該当する場合は、NがUMLモデルの構造に関連しない即値を表し、Nの起源は存在しないため、リターンする。ステップS704で該当しない場合には、ステップS705において、NがPropertyCallExpのインスタンスに該当するか確認する。ステップS705で該当する場合は、Nがクラスの属性を参照することを意味するため、ステップS711でこの属性をリストOLに追加する。ステップS705で該当しない場合には、ステップS706においてNがParameterのインスタンスに該当するか確認する。ステップS706で該当する場合は、Nがパラメータを参照することを意味するため、ステップS712でこのパラメータをリストOLに追加する。ステップS706で該当しない場合には、Nの起源が一部の子ノード集合の起源を合わせたものになる。そこでこれらの子ノード集合について、ステップS707からS710の処理を繰り返す。ステップS708で子ノードの起源を求め、ステップS709でOLに加える。ステップS707からS710の処理を行う子ノード集合Sは、Nの種類に依存する。例えば、Nがselect演算を表すOperationCallExpのインスタンスの場合には、図10に示すように、Nの起源1002はNの第1子ノードSourceExpressionの起源1001と同一の値になるため、S={第1子ノード}である。一方、Nがincluding演算を表すOperationCallExpのインスタンスである、図11のケースを考える。この場合には、Nの起源1103は、Nの第1子ノードSourceExpressionの起源1101と、第2子ノードArgumentExpressionの起源1102を合わせた値になり、S={第1子ノード,第2子ノード}である。他の種類のノードについても、同様にSを定義することが出来る。最後にステップS713で、ハッシュHにNをキー値に指定してリストOLを登録し、リターンする。図8は、データフローの決定サブルーチンの手順を示すフローチャートである。ステップS801においてリスト変数LL、LRを、引数ノードNの左オペランドと右オペランドをキーにして、それぞれハッシュHに登録された起源集合で初期化する。LLとLRの全ての要素の組み合わせについて、ステップS804からS807の処理を繰り返す。ステップS804で、LLの要素lとLRの要素rがパラメータとクラスの属性の組み合わせに該当するか判断し、該当する場合は、ステップS805においてlとrの組み合わせのフローの方向を決定する。この処理は図12に示す決定表に従って行う。決定表では、起源に含まれるパラメータの方向in、out、returnのいずれかと、OCLのpreキーワードが起源に含まれるクラスの属性に付与されているか否かによって、データフローの方向が決定される。パラメータの方向がinで、属性にpreキーワードが付与されている場合、これらの値は何れも操作の実行を通じて更新されない。従ってこの等価演算もしくは包含演算は、データフローではなく条件判断の論理式を表しているため、フローの方向は決定されない表中のNAによって表現されている。例えば図9の抽象構文木の例では、ノード901の左オペランドの属性にはpreキーワードが付与されているため、データフローの決定サブルーチンにおいて、データフローでは無いと判断される。ステップS806において、フローが決定されたか否かの判断を行い、決定された場合にはステップS807において、該パラメータと属性の組み合わせをデータフロー情報として、リストFに追加する。図13は、モデル表示部204の処理手順を示すフローチャートである。ステップS1301においてUMLモデルを、ステップS1302においてOCL制約を、それぞれ構造Viewと制約Viewに表示する。ステップS1303において、データフロー表示を行う表示設定が行われているか判断し、設定が行われている場合には、リストFの各要素について、ステップS1304からS1308の処理を繰り返す。ステップS1305でリストFの要素のパラメータを変数Pに、属性を変数Attに設定して、ステップS1306で制約View上にPとAttの間のデータフローを表示する。この時のフローの方向は、図8のデータフローの決定サブルーチンで決定された方向を用いる。ステップS1307においても同様に、PとAttの間のデータフローを表示する。その結果、図4に示すようなデータフロー情報の表示が実現される。<実施形態2>実施形態1では、等価演算=、あるいは包含演算Includes、IncludesAllに対応するOCL表現ノードを抜き出し、データフローを抽出した。本実施形態では、さらに各OCL表現ノードが取りうる値を考慮することにより、より精度の高い抽出を行う実施形態を説明する。本実施形態と実施形態1では、データフロー解析部202の動作フローが異なる。図14は、本実施形態におけるデータフロー解析部202の処理手順を示すフローチャートである。図5のフローチャートと比較して、ステップS1404としてハッシュVの初期化が追加され、さらにステップS1405、S1406の処理が追加されている。ハッシュVは、OCL表現ノードをキーとして、各OCL表現ノードが取りうる値のリストを保持する。ステップS1405において、抽象構文木のルートノードNの値を、要素Tから成るリストで初期化する。これは、事後条件は真となる制約が課されてことに対応している。Tは真Trueを表す値である。さらにステップS1406で子ノード値の算出サブルーチンを呼び出す。図15は、子ノード値の算出サブルーチンの手順を示すフローチャートである。サブルーチンは、与えられたノードとその値を元に、子ノードが取りうる値を算出する。子ノードの値の組み合わせには複数のパターンがあり得るため、各パターン毎に各ノードMについてステップS1503からS1505の処理を繰り返す。ステップS1503において、子ノードの値の組み合わせパターン表に従って、ノードMの値vを取得する。組み合わせパターン表は、親ノードの値に対する子ノードの値の組み合わせであり、OCL表現の種類毎に定義される。等価演算、論理演算、集合演算についてのパターン表を、それぞれ図17、図18、図19に示す。各表の行と列は親ノードの取りうる値と親ノードの種類を示し,交点のセルはリンクする子ノードに割り当てるべき値を示す。子ノードが複数存在する場合は,構文木と同一の順序で子ノード毎にセルを設けている.OCLの非決定性により,子ノードの抽象値が一意に定まらない場合があり、そのような場合は取り得る値を/で区切って記載している。Fは偽False、Uは未定義値を表す。図17、図18、図19に示したOCL表現以外のOCL表現についても、同様にパターン表を定義することが出来る。図16は、ステップS1407において呼び出される子ノード値の算出サブルーチンの手順を示すフローチャートである。図6のフローチャートと比較すると、条件判断処理を行うステップS1603が追加されており、引数ノードNの値がTと判断された場合にのみ、データフローを表す可能性があるOCL表現として、ステップS1604でノードNをリストLに追加する。本実施形態によって、各OCL表現ノードが取りうる値を考慮し、データフローをより正確に抽出することが出来る。例えば図20に示す事後条件は、not演算子によって、図3、図4に示した事後条件の内容を否定する。実施形態1に示した方法では、このnot演算子の意味を考慮しないため、図20の事後条件から、図4の2つのデータフローABが抽出、表示されるが、実際にはこれらのデータフローは発生しない。一方、本実施形態ではnot演算子の意味を考慮するため、データフローABは抽出されない。このように、本実施形態では、より精度の高いデータフロー情報をユーザに提供する。<その他の実施形態>以上、実施形態を詳述したが、本発明は、例えば、システム、装置、方法、コンピュータ読み取り可能なプログラムもしくは記憶媒体等としての実施態様をとることが可能である。具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。更に、本発明は、ソフトウェアのプログラムをシステム或いは装置に直接或いは遠隔から供給し、そのシステム或いは装置のコンピュータが該供給されたプログラムコードを読み出して実行することによって前述した実施形態の機能が達成される場合を含む。この場合、供給されるプログラムは実施形態で図に示したフローチャートに対応したコンピュータプログラムである。また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される他、そのプログラムの指示に基づき、コンピュータ上で稼動しているOSなどとの協働で実施形態の機能が実現されてもよい。この場合、OSなどが、実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される。"