(57)【特許請求の範囲】
【請求項１】
ソフトウェア部品の連結手段をリンク部品として表現するソフトウェア部品化技術を利用したプログラムの作成を支援するための計算機により実行されるプログラム作成支援方法であって、
データが設定されるフィールドを端子として持つデータ部品と引数を端子として持つリンク部品とに分類されるソフトウェア部品の群をプログラム構成の要素部品の群とし、当該要素部品相互の静的な連結構造が決定されたプログラムの静的構造を生成するステップと、
前記プログラムの静的構造中の前記要素部品群のうちの利用者指定の各データ部品に利用者指定のコストを設定することで、要素部品相互の振る舞いが定義されたプログラム定義情報を生成するステップと、
前記プログラム定義情報で定義された前記要素部品群のうちの各データ部品毎に、当該データ部品の端子と接続され、当該データ部品の当該端子に入力を与える全てのリンク部品について、当該入力部品の入力端子側に接続された要素部品の全てのパスをデータ部品になるまでたどり、そのたどりついた先のデータ部品に設定されているコストの中で最大のコストを、当該入力部品の見込みコストとして設定するステップと、
前記プログラム定義情報で定義された前記要素部品群のうちの前記各データ部品毎に、当該データ部品の端子に入力を与える全てのリンク部品の見込みコストに基づき、当該見込みコストが小さいリンク部品ほど優先的に当該リンク部品から当該データ部品の端子に入力が与えられるようにプログラムコードを生成するステップと
を具備することを特徴とするプログラム作成支援方法。
【請求項２】
前記プログラムの静的構造中の前記要素部品群、及び当該要素部品相互の静的な連結構造を、プログラムを作成するのに用いられるプログラム作成画面のプログラム定義領域に表示するステップと、
前記プログラム定義領域に表示されている前記要素部品群のうちのいずれか１つのデータ部品が利用者の操作に応じて指定される毎に、当該利用者に対して当該指定されたデータ部品のコストの指定入力を要求するステップと、
を更に具備し、前記プログラム定義情報を生成するステップでは、前記コストの指定入力要求に応じて利用者によりコストが指定される毎に、当該利用者指定のコストを、前記プログラムの静的構造中の利用者指定のデータ部品に設定することを特徴とする請求項１記載のプログラム作成支援方法。
【請求項３】
ソフトウェア部品の連結手段をリンク部品として表現するソフトウェア部品化技術を利用したプログラムの作成を支援するための計算機により実行されるプログラム作成支援方法であって、
データが設定されるフィールドを端子として持つデータ部品と引数を端子として持つリンク部品とに分類されるソフトウェア部品の一覧が表示される部品一覧領域、及びプログラムを作成するのに用いられるプログラム定義領域を含むプログラム作成画面を表示するステップと、
利用者の操作に応じて前記部品一覧から選択された部品を、作成すべきプログラムを構成する要素部品として利用者の操作に応じて前記プログラム定義領域に移動・配置するステップと、
利用者の操作に応じて、前記プログラム定義領域に配置されている要素部品相互の端子間を連結し、前記プログラム定義領域に配置されている要素部品の群から構成され、当該要素部品相互の静的な連結構造が決定されたプログラムの静的構造を生成するステップと、
前記プログラム定義領域に配置されている前記要素部品群のうちのいずれか１つのデータ部品が利用者の操作に応じて指定される毎に、当該利用者に対して当該指定されたデータ部品のコストの指定入力を要求するステップと、
前記コストの指定入力要求に応じて利用者によりコストが指定される毎に、当該利用者指定のコストを、前記プログラムの静的構造中の利用者指定のデータ部品に設定することで、要素部品相互の振る舞いが定義されたプログラム定義情報を生成するステップと、
前記プログラム定義情報で定義された前記要素部品群のうちの各データ部品毎に、当該データ部品の端子と接続され、当該データ部品の当該端子に入力を与える全てのリンク部品について、当該入力部品の入力端子側に接続された要素部品の全てのパスをデータ部品になるまでたどり、そのたどりついた先のデータ部品に設定されているコストの中で最大のコストを、当該入力部品の見込みコストとして設定するステップと、
前記プログラム定義情報で定義された前記要素部品群のうちの前記各データ部品毎に、当該データ部品の端子に入力を与える全てのリンク部品の見込みコストに基づき、当該見込みコストが小さいリンク部品ほど優先的に当該リンク部品から当該データ部品の端子に入力が与えられるようにプログラムコードを生成するステップと
を具備することを特徴とするプログラム作成支援方法。
【請求項４】
前記コストの指定入力要求に応じて利用者によりコストが指定された場合に、当該利用者指定のコストを、前記プログラム定義領域に配置されている利用者指定のデータ部品の近傍に表示するステップを更に具備することを特徴とする請求項３記載のプログラム作成支援方法。
【請求項５】
前記データ部品には、当該データ部品の全てのフィールドを埋めるための第１のメソッドであって、当該データ部品に出力端子が連結された全てのリンク部品に対して、当該リンク部品の全ての入力端子に値が与えられているならば、当該リンク部品の出力端子に値を伝えるための第２のメソッドを送信する第１のメソッドが予め定義され、
前記リンク部品には、当該リンク部品の入力端子の中に値が与えられていない入力端子が存在し、且つ当該入力端子にデータ部品が連結されているならば、当該データ部品に前記第１のメソッドを送信し、当該リンク部品の入力端子の中に値が与えられていない入力端子が存在し、且つ当該入力端子に他のリンク部品が連結されているならば、当該連結されているリンク部品に前記第２のメソッドと同じメソッドを送信する前記第２のメソッドが予め定義されている
ことを特徴とする請求項１または請求項３記載のプログラム作成支援方法。
【請求項６】
ソフトウェア部品の連結手段をリンク部品として表現するソフトウェア部品化技術を利用したプログラムの作成を支援するプログラム作成支援プログラムであって、
計算機に、
データが設定されるフィールドを端子として持つデータ部品と引数を端子として持つリンク部品とに分類されるソフトウェア部品の群をプログラム構成の要素部品の群とし、当該要素部品相互の静的な連結構造が決定されたプログラムの静的構造を生成するステップと、
前記プログラムの静的構造中の前記要素部品群のうちの利用者指定の各データ部品に利用者指定のコストを設定することで、要素部品相互の振る舞いが定義されたプログラム定義情報を生成するステップと、
前記プログラム定義情報で定義された前記要素部品群のうちの各データ部品毎に、当該データ部品の端子と接続され、当該データ部品の当該端子に入力を与える全てのリンク部品について、当該入力部品の入力端子側に接続された要素部品の全てのパスをデータ部品になるまでたどり、そのたどりついた先のデータ部品に設定されているコストの中で最大のコストを、当該入力部品の見込みコストとして設定するステップと、
前記プログラム定義情報で定義された前記要素部品群のうちの前記各データ部品毎に、当該データ部品の端子に入力を与える全てのリンク部品の見込みコストに基づき、当該見込みコストが小さいリンク部品ほど優先的に当該リンク部品から当該データ部品の端子に入力が与えられるようにプログラムコードを生成するステップと
を実行させるためのプログラム作成支援プログラム。
【請求項７】
ソフトウェア部品の連結手段をリンク部品として表現するソフトウェア部品化技術を利用したプログラムの作成を支援するプログラム作成支援プログラムであって、
計算機に、
データが設定されるフィールドを端子として持つデータ部品と引数を端子として持つリンク部品とに分類されるソフトウェア部品の一覧が表示される部品一覧領域、及びプログラムを作成するのに用いられるプログラム定義領域を含むプログラム作成画面を表示するステップと、
利用者の操作に応じて前記部品一覧から選択された部品を、作成すべきプログラムを構成する要素部品として利用者の操作に応じて前記プログラム定義領域に移動・配置するステップと、
利用者の操作に応じて、前記プログラム定義領域に配置されている要素部品相互の端子間を連結し、前記プログラム定義領域に配置されている要素部品の群から構成され、当該要素部品相互の静的な連結構造が決定されたプログラムの静的構造を生成するステップと、
前記プログラム定義領域に配置されている前記要素部品群のうちのいずれか１つのデータ部品が利用者の操作に応じて指定される毎に、当該利用者に対して当該指定されたデータ部品のコストの指定入力を要求するステップと、
前記コストの指定入力要求に応じて利用者によりコストが指定される毎に、当該利用者指定のコストを、前記プログラムの静的構造中の利用者指定のデータ部品に設定することで、要素部品相互の振る舞いが定義されたプログラム定義情報を生成するステップと、
前記プログラム定義情報で定義された前記要素部品群のうちの各データ部品毎に、当該データ部品の各フィールドに与えられる値を算出するために、いずれのリンク部品を用いるべきかを、候補となるリンク部品の入力側に接続されたデータ部品をたどって、そのたどった先のデータ部品に設定されているコストをもとに、コストが小さいデータ部品に対応するリンク部品ほど優先して用いられるように決定してプログラムコードを生成するステップと
を実行させるためのプログラム作成支援プログラム。
【請求項８】
ソフトウェア部品の連結手段をリンク部品として表現するソフトウェア部品化技術を利用したプログラムの作成を支援するためのプログラム作成支援装置であって、
データが設定されるフィールドを端子として持つデータ部品と引数を端子として持つリンク部品とに分類されるソフトウェア部品の群をプログラム構成の要素部品の群とし、当該要素部品相互の静的な連結構造が決定されたプログラムの静的構造を生成する手段と、
前記プログラムの静的構造中の各データ部品と当該データ部品のコストを指定する手段と、
前記指定手段による指定毎に、指定されたコストを、前記プログラムの静的構造中の指定されたデータ部品に設定することで、要素部品相互の振る舞いが定義されたプログラム定義情報を生成する手段と、
前記プログラム定義情報に基づくプログラムコードの生成を指示する手段と、
前記プログラム定義情報で定義された前記要素部品群のうちの各データ部品毎に、当該データ部品の端子と接続され、当該データ部品の当該端子に入力を与える全てのリンク部品について、当該入力部品の入力端子側に接続された要素部品の全てのパスをデータ部品になるまでたどり、そのたどりついた先のデータ部品に設定されているコストの中で最大のコストを、当該入力部品の見込みコストとして設定する手段と、
前記指示手段の指示に応じて、前記プログラム定義情報で定義された前記要素部品群のうちの前記各データ部品毎に、当該データ部品の端子に入力を与える全てのリンク部品の見込みコストに基づき、当該見込みコストが小さいリンク部品ほど優先的に当該リンク部品から当該データ部品の端子に入力が与えられるようにプログラムコードを生成する手段と
を具備することを特徴とするプログラム作成支援装置。
【請求項９】
ソフトウェア部品の連結手段をリンク部品として表現するソフトウェア部品化技術を利用したプログラムの作成を支援するためのプログラム作成支援装置であって、
データが設定されるフィールドを端子として持つデータ部品と引数を端子として持つリンク部品とに分類されるソフトウェア部品の一覧が表示される部品一覧領域、及びプログラムを作成するのに用いられるプログラム定義領域を含むプログラム作成画面を表示する手段と、
前記部品一覧から任意の部品を選択するための手段と、
前記部品一覧から選択された部品を、作成すべきプログラムを構成する要素部品として利用者の操作に応じて前記プログラム定義領域に移動・配置するための手段と、
前記プログラム定義領域に配置されている要素部品相互の任意の端子間の連結を指定する手段と、
前記指定された端子間を連結することで、前記プログラム定義領域に配置されている要素部品の群から構成され、当該要素部品相互の静的な連結構造が決定されたプログラムの静的構造を生成する手段と、
前記プログラム定義領域に配置されている前記要素部品群のうちの任意のデータ部品と当該データ部品のコストとを指定する手段と、
前記指定手段による指定毎に、指定されたコストを、前記プログラムの静的構造中の指定されたデータ部品に設定することで、要素部品相互の振る舞いが定義されたプログラム定義情報を生成する手段と、
前記プログラム定義情報に基づくプログラムコードの生成を指示する手段と、
前記プログラム定義情報で定義された前記要素部品群のうちの各データ部品毎に、当該データ部品の端子と接続され、当該データ部品の当該端子に入力を与える全てのリンク部品について、当該入力部品の入力端子側に接続された要素部品の全てのパスをデータ部品になるまでたどり、そのたどりついた先のデータ部品に設定されているコストの中で最大のコストを、当該入力部品の見込みコストとして設定する手段と、
前記指示手段の指示に応じて、前記プログラム定義情報で定義された前記要素部品群のうちの前記各データ部品毎に、当該データ部品の端子に入力を与える全てのリンク部品の見込みコストに基づき、当該見込みコストが小さいリンク部品ほど優先的に当該リンク部品から当該データ部品の端子に入力が与えられるようにプログラムコードを生成する手段と
を具備することを特徴とするプログラム作成支援装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ソフトウェア部品の連結手段をも部品として表現するソフトウェア部品化技術を利用したソフトウェア開発技術に係り、特に、ソフトウェア開発者がこの種のソフトウェア部品を用いてプログラムを作成するのを支援するプログラム作成支援方法、プログラム作成支援プログラム及びプログラム作成支援装置に関する。
【０００２】
【従来の技術】
ソフトウェア（ソフトウェアプログラム）の部品化は、ソフトウェアの生産性・品質向上の重要な手法である。オブジェクト指向プログラミングは、このソフトウェアの部品化の促進に効果があると従来から期待されていた。その理由は、オブジェクト指向プログラミングでは、継承の機構がソフトウェアの再利用につながる点と、モジュールの独立性の高さや現実世界の「もの」との類似性がそれらの仕様理解を助ける点などとにある。
【０００３】
【発明が解決しようとする課題】
しかしながら、上記のような期待にもかかわらず、実際には、現在もソフトウェアの部品化手法は十分には確立されていない。従来、オブジェクト指向プログラミングだけではソフトウェアの部品化が十分に実現できなかった理由を以下に列挙する。
【０００４】
（Ａ１）継承に基づくプログラミングでは、最も一般化された、抽象度の高い部品から完成していく必要がある。しかし、求められる一般形を見極めるのは、ソフトウェアの機能が大きくなると急激に困難になる。特に、ソフトウェア開発者（プログラム作成者）が対象業務の専門知識を有さない場合には、それが顕著である。また、ソフトウェアに対するユーザ要件は、刻々と変化する。そのために、ある時点では十分な一般性を備えた部品を作成できても、時間経過に伴いその利用可能性が小さくなっていく。
【０００５】
（Ａ２）処理の主体や対象は「もの」として表現するものの、処理主体が（一般には複数の）処理対象にどのように作用して目的の機能を実現するかという点に関しては、従来同様に手続き的な表現が基本となっている。その結果、部品を組み合わせたシステム全体の振る舞いの把握や予測を、物理的な装置のように直感的にできない。そのため、現在は、ソフトウェアの設計やメンテナンスにおける人間の思考支援を目的とした、様々な図表の作成などが必要になっている。
【０００６】
この、オブジェクト指向プログラミングにおいて未解決の部分を補完するために、これまで部品とみなされてきたオブジェクトだけでなく、オブジェクト間の連結部分をも部品化するプログラミング技術が考えられる。つまり、大きなオブジェクトの部品化を目指すのではなく、一連のオブジェクト群が目的の機能を実現するようオブジェクトを組み合わせる素材を部品化するプログラミング技術が考えられる。この技術は、多くの実務処理がそうであるように、各種フォームやレコードなどの受動的性格の強いデータを入出力として加工するソフトウェアの開発において、特に有用となることが予想される。
【０００７】
本発明は上記事情を考慮してなされたものでその目的は、ソフトウェア部品の連結部分をも部品として表現するソフトウェア部品化技術を利用して、最適な手順で実行されるプログラムをソフトウェア開発者が容易に作成できるように支援する、プログラム作成支援方法、プログラム作成支援プログラム及びプログラム作成支援装置を提供することにある。
【０００８】
【課題を解決するための手段】
本発明の１つの観点によれば、ソフトウェア部品の連結手段をリンク部品として表現するソフトウェア部品化技術を利用したプログラムの作成を支援するための計算機により実行されるプログラム作成支援方法が提供される。このプログラム作成支援方法は、データが設定されるフィールドを端子として持つデータ部品と引数を端子として持つリンク部品とに分類されるソフトウェア部品の群をプログラム構成の要素部品の群とし、当該要素部品相互の静的な連結構造が決定されたプログラムの静的構造を生成するステップと、上記プログラムの静的構造中の要素部品群のうちの利用者指定の各データ部品に利用者指定のコストを設定することで、要素部品相互の振る舞いが定義されたプログラム定義情報を生成するステップと、上記プログラム定義情報で定義された要素部品群のうちの各データ部品毎に、当該データ部品の各フィールドに与えられる値を算出するために、いずれのリンク部品を用いるべきかを、候補となるリンク部品の入力側に接続されたデータ部品をたどって、そのたどった先のデータ部品に設定されているコストをもとに、コストが小さいデータ部品に対応するリンク部品ほど優先して用いられるように決定してプログラムコードを生成するステップとを備えている。
【０００９】
このように、本発明の１つの観点に係るプログラム作成支援方法においては、まず、プログラムの静的構造である、当該プログラムを構成する要素部品と、その要素部品相互の静的な連結構造とが生成される。つまり、上記プログラム作成支援方法においては、リンク部品による連結で、データ部品が相互にいかに関連しているかという、相互の静的な連結構造が表現される。そして、上記プログラム作成支援方法においては、利用者の操作による各データ部品毎のコスト指定を受け付けて、その利用者指定の各データ部品に利用者指定のコストを設定することで、プログラム定義情報が生成される。ここで、各データ部品に付けられたコストは、そのデータ部品から、値を与えてもらう際の、一種の回避すべき度合いの重みであり、値を与えてもらう優先度でもある。したがって、データ部品毎のコストは、プログラムの要素部品相互の振る舞い、つまり、どのような順序で、どの要素部品にメッセージを送るかを決定するための情報であるといえる。このように、プログラムの構造が、当該プログラムの静的構造（当該プログラムを構成する要素部品及びその要素部品相互の静的な連結構造）と、プログラムの要素部品相互の振る舞いを定める各データ部品に付されたコストとの２つの階層に分離されるので、それぞれを作成、把握するのが容易になる。このプログラムの構造は、コストが付されたデータ部品群と、それらのデータ部品相互間を連結するリンク部品とで定義されているともいえる。
【００１０】
以上により、生成されたプログラム定義情報は、プログラムの静的構造中の各要素部品を、どのような順序で、どの要素部品にメッセージを送るかが、メソッドとして定義されたプログラム定義情報であるといえる。よって、上記プログラム作成支援方法においては、プログラム定義情報で定義された各データ部品毎に、当該データ部品の各フィールドを満たす値を算出するのに用いるリンク部品を決定するのに、候補となるリンク部品の入力側に接続されたデータ部品をたどって、そのたどった先のデータ部品に設定されているコストをもとに、コストが小さいデータ部品に対応するリンク部品ほど優先して用いられるように決定してプログラムコードを生成することで、プログラム定義情報で定義されたプログラムの最適なプログラムコードを簡単に生成することができる。
【００１１】
しかも、上記プログラム作成支援方法においては、ソフトウェア開発者が記述（定義）すべきプログラムは、データ部品とそのコスト、及び当該データ部品がリンク部品によっていかに連結されているか、つまり要素部品相互の静的な連結構造だけであり、各データ部品について、そのデータ部品の端子（フィールド）に与えられる値（データ）を完成するための最適手順を作成する必要がない。このため上記プログラム作成支援方法においては、参照可能なデータ部品を追加するなどの変更も、容易に、且つ正確に行うことができる。
【００１２】
ここで、上記各要素部品には、その部品がデータ部品、またはリンク部品のいずれであるかにより、次のようなメソッドが予め定義されているとよい。まず、データ部品には、当該データ部品の全てのフィールドを埋めるための第１のメソッドであって、当該データ部品に出力端子が連結された全てのリンク部品に対して、当該リンク部品の全ての入力端子に値が与えられているならば、当該リンク部品の出力端子に値を伝えるための第２のメソッドを送信する第１のメソッドが定義されているとよい。次に、リンク部品には、当該リンク部品の入力端子の中に値が与えられていない入力端子が存在し、且つ当該入力端子にデータ部品が連結されているならば、当該データ部品に上記第１のメソッドを送信し、当該リンク部品の入力端子の中に値が与えられていない入力端子が存在し、且つ当該入力端子に他のリンク部品が連結されているならば、当該連結されているリンク部品に上記第２のメソッドと同じメソッドを送信する第２のメソッドが定義されているとよい。
【００１３】
また、プログラムの静的構造中の要素部品群、及び当該要素部品相互の静的な連結構造を、プログラムを作成するのに用いられるプログラム作成画面のプログラム定義領域に表示して、当該定義領域に表示されている要素部品群のうちのいずれか１つのデータ部品が利用者の操作に応じて指定される毎に、当該利用者に対して当該指定されたデータ部品のコストの指定入力を要求する構成とするならば、利用者は各データ部品のコストの指定入力を効率的に行うことが可能となる。また、指定されたコストを、プログラム定義領域に表示されている対応するデータ部品の近傍に表示するならば、利用者にとってプログラム定義領域上の各データ部品に付されているコストを視認できるため、データ部品のコストの指定入力をより効率的に且つ意図した通りに行うことが可能となる。
【００１４】
また、プログラム作成画面上に、ソフトウェア部品の一覧が表示される部品一覧領域を配置し、当該部品一覧領域から利用者指定の部品を選択して、プログラム定義領域上の利用者指定の位置に移動・配置可能な構成とすると共に、利用者の指定に応じて、プログラム定義領域に配置されている要素部品相互の端子間を連結可能な構成とするならば、利用者は、自身の意図した要素部品から構成されるプログラムの静的構造を効率的に作成することが可能となる。
【００１５】
なお、以上のプログラム作成支援方法に係る本発明は、当該方法を実行してプログラムの作成を支援するためのプログラム作成支援装置に係る発明としても、当該方法を構成する各ステップを計算機に実行させるためのプログラム（プログラム作成支援プログラム）に係る発明としても成立する。
【００１６】
【発明の実施の形態】
以下、本発明の実施の形態につき説明する。
本発明の実施形態の特徴は、オブジェクト間の連結部分（リンク）をも部品化するプログラミング技術（リンク指向プログラミング技術）によりソフトウェアの部品化が容易に実現できるようにした点にある。そこで、本実施形態の理解を容易にするために、本実施形態で適用される、連結部分を部品表現するプログラム記法の体系について説明する。
【００１７】
（Ｂ１）従来のオブジェクト指向プログラミングにおけるオブジェクトに相当するものとして、「データ部品」が存在する。データ部品は、１個以上のフィールド（インスタンスフィールド）を持つ。全てのフィールドは外部に公開されており（隠蔽されておらず）、値の参照及び設定が可能である。
【００１８】
（Ｂ２）データ部品の連結を実現する部品として、「リンク部品」が存在する。リンク部品には「関数型リンク部品」（以下、単に「関数」と称することもある）と「述語型リンク部品」（以下、単に「述語」と称することもある）との２種類がある。
【００１９】
（Ｂ３）関数は、一般にｎ入力ｍ出力の多値関数であり、入力側から出力側へ値をそのまま或いは変換して伝達する。特別な関数の例として、乱数発生関数のように、入力の無い関数とみなすことのできるものがある。
【００２０】
（Ｂ４）述語は、１個以上の入力引数のみを持つ。但し、入力引数に基づく真偽判定の結果により、他のデータ部品、或いはリンク部品にメッセージを送ることができる。
【００２１】
（Ｂ５）データ部品の各フィールド、並びに関数及び述語の各々の引数を、まとめて「端子」と呼ぶ。端子には、値を伝達することのできる方向がある。データ部品の端子は双方向の伝達が可能である。関数の端子は、入力端子は入力方向にのみ、出力端子は出力方向にのみ伝達が可能である。但し、後述する逆関数が定義されている場合には双方向に伝達可能である。述語の端子は、全て入力方向にのみ伝達可能である。
【００２２】
（Ｂ６）データ部品のフィールドのアクセスは、データ部品名とフィールド名とを用いた次の形式
データ部品名.フィールド名
により可能である。
【００２３】
（Ｂ７）関数による部品間連結の表現は、リンク部品の種別を示す関数名（クラス名）、リンク部品の名前であるリンク名（インスタンス名）、入力端子を示す入力名、及び出力端子を示す出力名とを用いた次の形式
0003713466.tif 000002
による。
【００２４】
（Ｂ８）述語による部品間連結の表現は、リンク部品の種別を示す述語名（クラス名）、リンク名（インスタンス名）、入力端子を示す入力名、及び述語の真偽判定の結果に基づく処理内容とを用いた次の形式
0003713466.tif 000003
による。
【００２５】
（Ｂ８）データ部品、関数、及び述語には、それぞれ次のメソッドが定義される。
【００２６】
データ部品には、「fill()」と表現されるメソッド（fillメソッド）が定義される。fill()は、対応するデータ部品のフィールドに値を埋めるメソッドである。そのためfill()は、対応するデータ部品に自身の出力端子を連結された全てのリンク部品に対し、次に述べるflow()を送って値を取り寄せる機能を持つ。ここでは、データ部品に出力端子が連結可能なリンク部品は、関数（関数型リンク部品）に限られる。fill()はまた、フィールド値を完成できたなら、当該fill()を呼び出したメッセージ送信元にsuccess（成功）ステータスを通知し、何らかの理由により完成できなかったなら、failure（失敗）ステータスを通知する機能を有する。
【００２７】
関数には、「flow()」と表現されるメソッド（flowメソッド）が定義される。flow()は、対応する関数の出力端子に値を伝えるメソッドである。即ちflow()は、対応する関数の全ての入力端子に値が与えられているならば、その関数の出力端子の値を算出し、その算出した値を当該出力端子に伝えるソッドである。そのためflow()は、値を与えられていない入力端子がある場合、その入力端子に連結されている部品がデータ部品であれば当該データ部品にfill()を、関数型のリンク部品（関数）であれば当該関数型リンク部品にflow()を、そして述語型のリンク部品（述語）であれば当該述語型リンク部品にtest()を送って、その入力端子を通して値を取得することで全ての入力値を満たし、出力端子に値を伝える機能を有する。flow()はまた、値の伝達処理が正常に行えたなら、当該flow()を呼び出したメッセージ送信元にsuccessステータスを通知し、何らかの理由により伝達できなかったなら、failureステータスを通知する機能を有する。
【００２８】
また、関数の逆関数が定義されている場合に限り、その関数には、「flowBackward()」と表現されるメソッド（flowBackwardメソッド）が定義される。flowBackward()は、対応する関数の入力端子を出力端子に、出力端子を入力端子にして、定義された逆関数のflow()を実行するメソッドである。
【００２９】
述語には、「test()」と表現されるメソッド（testメソッド）が定義される。test()は、対応する述語の全ての入力端子に値が与えられたとき、それらの値に基づいて真偽を判定し、その判定結果に基づいて定義された処理を行って、他のデータ部品またはリンク部品にメッセージを送るメソッドである。そのためtest()は、値を与えられていない入力端子がある場合、その入力端子に連結されている部品がデータ部品であれば当該データ部品にfill()を、関数型のリンク部品であれば当該関数型リンク部品にflow()を、そして述語型のリンク部品であれば当該述語型リンク部品にtest()を送って、その入力端子を通して値を取得することで全ての入力値を満たし、真偽を判定する機能を有する。test()はまた、処理が正常に行えたなら、当該test()を呼び出したメッセージ送信元にsuccessステータスを通知し、何らかの理由により失敗したなら、failureステータスを通知する機能を有する。
【００３０】
（Ｂ９）少なくとも２つのリンク部品を組み合わせて、新しい部品、つまり関数（合成関数）を作成できる。１つの部品を構成する各部品を要素部品と呼ぶ。また、要素部品がリンク部品の場合、その要素部品を要素リンク部品と呼ぶ。要素リンク部品の端子間を接続する場合、入力方向のみの端子同士、あるいは出力方向のみの端子同士を連結することはできない。要素部品間で連結されなかった端子は、新しく作成された部品の端子となる。また、新しい部品（リンク部品）の作成に、リンク部品だけでなくデータ部品を用いることができるのは勿論である。
【００３１】
（Ｂ１０）プログラムの実行は、当該プログラムを構成するデータ部品とリンク部品に対してメッセージを送ることで行われる。
【００３２】
このような、連結部分を部品表現するプログラム記法の体系を適用した本実施形態について、図面を参照して説明する。
図１は本発明の一実施形態に係る、ソフトウェア部品を用いたプログラム作成を支援するプログラム作成支援装置の構成を示すブロック図である。
【００３３】
図１に示すプログラム作成支援装置は、パーソナルコンピュータ等のデータ処理装置（計算機）により実現される。つまり、プログラム作成支援装置は、主として、外部記憶装置１と、主記憶装置２と、表示装置３と、入力装置４と、ＣＰＵ５と、システムバス６とから構成されるデータ処理装置である。
【００３４】
外部記憶装置１は、ハードディスクドライブ（ＨＤＤ）等の大容量記憶装置である。外部記憶装置１には、ソフトウェア部品の定義情報（ソフトウェア部品定義情報）１１と、ソフトウェア部品を表す図像としてのアイコン（部品アイコン）のイメージデータ（アイコンデータ）１２と、作成されたプログラム定義情報１３とプログラムコード１４とが格納されている。
【００３５】
ソフトウェア部品定義情報１１は、予め用意されているソフトウェア部品及び新たに作成されたソフトウェア部品を定義した情報である。ソフトウェア部品定義情報１１は、データ部品の定義情報（データ部品定義情報）１１１と、リンク部品の定義情報（リンク定義情報）１１２とを含む。リンク定義情報１１２は、関数（関数型リンク部品）の定義情報（関数定義情報）１１２ａと、述語（述語型リンク部品）の定義情報（述語定義情報）１１２ｂとを含む。
【００３６】
データ部品定義情報１１１は、予め用意されている各データ部品のフィールド情報を含む。
関数定義情報１１２ａは、予め用意されている各関数及び新たに作成された各関数について、各入出力端子の名前と入出力の方向、継承部品名、アイコンデータ名、及び逆関数定義の有無の情報を含む。
述語定義情報１１２ｂは、予め用意されている各述語及び新たに作成された各述語について、各端子の名前を含む。
【００３７】
主記憶装置２には、プログラムの作成を支援するプログラム（プログラム作成支援プログラム）としてのプログラムエディタ２１が、例えば入力装置４を用いた利用者（ソフトウェア開発者、プログラム作成者）の操作に応じて、外部記憶装置１からロードされる。プログラムエディタ２１は、ＣＰＵ５を、利用者による要素部品の選択を支援する部品選択部２１１、要素部品を表示装置３に表示する部品表示部２１２、及び利用者により指定された端子間の連結を実行して、その連結情報を入力する連結入力部２１３の各機能手段として機能させるためのプログラム要素を含む。プログラムエディタ２１はまた、ＣＰＵ５を、利用者により指定された端子間の連結の状態を表示装置３に表示する連結表示部２１４、プログラムを構成する要素部品群のうちの利用者指定のデータ部品に、利用者指定のコスト（算出コスト）を設定するコスト設定部２１５、及びプログラムコード生成部２１６の各機能手段として機能させるためのプログラム要素も含む。プログラムコード生成部２１６は、作成中のプログラムのコードを生成する。
【００３８】
主記憶装置２にはまた、プログラムエディタ２１を用いて現在作成されているプログラムの定義情報（プログラム定義情報）２２が格納される。プログラム定義情報２２は、要素部品情報２２１と、要素連結情報２２２とを含む。要素部品情報２２１は、作成中のプログラムを構成するソフトウェア部品の各要素部品の情報であり、各要素部品について、当該部品の名前である要素名（要素部品名、インスタンス名）、及び当該部品の種別を表す要素部品種別名（クラス名）を含む。また、要素部品情報２２１は、要素部品がデータ部品である場合には、上記要素名、及び要素部品種別名に加えて、コストを含む。要素連結情報２２２は、上記各要素部品の端子間の連結を定義する情報であり、各連結について、連結元の要素名及び端子名の対、並びに連結先の要素名及び端子名の対を含む。
【００３９】
表示装置３は、ＣＲＴディスプレイ、或いは液晶ディスプレイ等であり、プログラムエディタ２１を用いたプログラム作成のためのＧＵＩ（Graphical User Interface）画面（プログラム作成ＧＵＩ画面）の表示等に用いられる。入力装置４はキーボード、マウス等であり、利用者による上記ＧＵＩ画面の操作を含むプログラムエディタ２１の操作等に用いられる。
【００４０】
ＣＰＵ５は、利用者の操作に従ってプログラムエディタ２１を実行することにより、利用者の要求するプログラムの作成を支援する。
【００４１】
次に、図１の構成におけるプログラム作成支援処理について、図２乃至図４のフローチャートを参照して説明する。
本実施形態におけるプログラム作成支援処理は、プログラム定義情報２２を作成するプログラム定義情報作成処理と、当該プログラム定義情報２２からプログラムコードを生成するプログラムコード作成処理とに大別される。プログラム定義情報作成処理は、プログラムエディタ２１中の例えば部品選択部２１１、連結入力部２１３及びコスト設定部２１５を用いて実行される。プログラムコード作成処理は、プログラムコード生成部２１６を用いて実行される。
【００４２】
まず、プログラム定義情報作成処理について説明する。
今、利用者（プログラム作成者）が入力装置４を操作して、プログラムエディタ２１を起動したものとする。するとＣＰＵ５は、プログラムエディタ２１に従って、図５に示すようなプログラム作成ＧＵＩ画面を表示装置３に表示する。以降の説明では、煩雑さを避けるため、プログラムエディタ２１自身が処理を実行するものとして扱う。
【００４３】
図５に示すプログラム作成ＧＵＩ画面は、既定義のデータ部品５１０の一覧が表示されるデータ部品一覧領域５１と、既定義のリンク部品５２０の一覧が表示されるリンク部品一覧領域５２と、プログラムを作成・定義する領域を提供するプログラム定義領域５３とを含んでいる。
【００４４】
データ部品一覧領域５１へのデータ部品一覧の表示は、外部記憶装置１に格納されているソフトウェア部品定義情報１１中のデータ部品定義情報１１１に基づいて行われる。リンク部品一覧領域５２へのリンク部品一覧の表示は、上記ソフトウェア部品定義情報１１中のリンク定義情報１１２に基づいて行われる。
【００４５】
ここでは、一覧領域５１，５２上の各部品５１０，５２０は、外部記憶装置１に格納されているアイコンデータ１２に基づいて、当該部品５１０，５２０を表すアイコン５１１，５２１で表示される。各部品５１０，５２０のアイコン５１１，５２１の近傍には、その部品の種別を表す要素部品種別名５１２，５２２が表示される。また、部品５２０、つまりリンク部品５２０については、その近傍に、端子間の値の伝達方向を示す矢印５２３がリンク定義情報１１２に基づいて表示される。また、一覧領域５１，５２上の各部品５１０，５２０は縮小表示され、後述するようにプログラム定義領域５３上に移動された際に一定の倍率に拡大して表示される。一覧領域５１，５２内では、一般に部品一覧の全てを表示できないため、その領域内でスクロール可能なようになっている。
【００４６】
一覧領域５１及び５２は、既定義のソフトウェア部品の一覧の表示領域を提供する。ここで、既定義のソフトウェア部品は一般にはシステムに予め用意されているソフトウェア部品であるが、リンク部品については、プログラムエディタ２１を利用して利用者が新たに定義したソフトウェア部品も含まれる。
【００４７】
プログラム定義情報２２は、利用者が図５のプログラム作成ＧＵＩ画面上で、以下に述べるような要素部品選択操作、連結入力操作、及びコスト設定操作を実行することにより作成される。
【００４８】
まず利用者は、入力装置４の例えばマウスを用いて、目的のプログラムを構成するソフトウェア部品の作成・定義に必要な要素部品、つまり目的プログラムの作成・定義に必要な要素部品を、データ部品一覧領域５１またはリンク部品一覧領域５２上の部品一覧から選択する操作を行う。次に利用者は、選択した要素部品、つまりデータ部品またはリンク部品を、プログラム定義領域５３上の所望の位置に移動させるために、マウスを用いてドラッグ＆ドロップ操作を行う。
【００４９】
プログラムエディタ２１中の部品選択部２１１は、利用者がマウスを用いて、データ部品一覧領域５１またはリンク部品一覧領域５２上の部品一覧から要素部品を選択する操作を行ったことを検出すると（ステップＳ１）、その選択された要素部品を、利用者の選択操作に続くドラッグ操作に応じて（ステップＳ２）、部品表示部２１２によりプログラム作成ＧＵＩ画面に表示させながら、プログラム定義領域５３上に移動する（ステップＳ３）。
【００５０】
ここでは、選択された要素部品は、部品の種別がアイコンと種別名で、端子間の値の伝達方向が矢印で、それぞれ表される。
表示するアイコンは、以下の手順で決定される。
（ａ１）選択された部品にアイコンが設定されていれば、それを用いる。
（ａ２）アイコンの設定がなく、継承する部品の設定があれば、上位の部品のアイコン設定を再帰的に探して、これを用いる。
（ａ３）継承情報によってもアイコンの情報が得られなければ、予め定められた暗黙のアイコンを用いる。
【００５１】
一方、表示する矢印の向きは、以下の手順で決定される。
（ｂ１）データ部品の端子は、双方向とする。
（ｂ２）逆関数を設定された関数の端子は、双方向とする。
（ｂ３）それ以外の関数では、入力端子は入力方向とし、出力端子は出力方向とする。
（ｂ４）述語の端子は、入力方向とする。
【００５２】
図６及び図７に、プログラム定義領域５３上での要素部品の表示例を示す。図６はデータ部品、図７は関数（関数型リンク部品）の、それぞれ表示例を示している。
【００５３】
さて、部品選択部２１１は、部品一覧から選択された要素部品を利用者のドラッグ操作に応じてプログラム定義領域５３上に移動している状態で、利用者のドロップ操作を検出すると（ステップＳ４）、当該要素部品の移動処理を停止し、当該要素部品の名前（要素名）の入力を利用者に対して要求する画面を部品表示部２１２により表示させる（ステップＳ５）。ここで、利用者が入力装置４を用いて要素名を入力する操作を行うと、部品選択部２１１はその要素名を入力装置４から受け取って、対応する要素部品のカテゴリを表す要素カテゴリ名及び種別を表す要素部品種別名と組にして、主記憶装置２に格納されているプログラム定義情報２２中の要素部品情報２２１に追加し（ステップＳ６）、利用者の次の要素部品選択操作を待つ。
【００５４】
利用者は、プログラム定義領域５３内に配置した要素部品の端子、及びプログラム定義領域５３で定義されるプログラムを構成するソフトウェア部品の端子のうちの任意の２つの端子間を連結したい場合、入力装置４のマウスを操作して、マウスポインタを一方の端子に合わせた状態で、他方の端子にドラッグする操作を行う。
【００５５】
プログラムエディタ２１中の連結入力部２１３は、利用者が端子間を連結するためのドラッグ操作を行ったことを検出すると（ステップＳ７）、ドラッグ開始位置の端子から現在のドラッグ位置までを連結表示部２１４により線分で表示させる。そして連結入力部２１３は、ドラッグ位置が他の端子に到達すると、両端子間を連結表示部２１４により図５中の矢印Ａ１１〜Ａ１３などのように、矢印で表示させて連結し、その連結情報をプログラム定義情報２２中の要素連結情報２２２に追加する（ステップＳ８）。上記ステップＳ８では、連結入力部２１３は、指定された２つの端子間の連結が可能な値伝達の方向を判別し、その判別結果に応じて、当該端子間が連結されていることと値伝達の方向とを連結表示部２１４により上記した矢印で表示させる。但し、利用者が指定した２つの端子が同一要素部品のものである場合は、連結入力部２１３は利用者に対してエラー通知し、連結を拒否する。
【００５６】
ここでは、
（ｃ１）連結される２つの端子が共に要素部品の端子であるとき、
・その２つの端子が共に双方向の端子であるならば、連結も双方向の伝達が可能となる。
・その２つの端子のうち、少なくも一方が単方向であり、他方も同方向への伝達が可能であるならば、連結はその方向への単方向伝達のみが可能となる。
・それ以外の場合、連結入力部２１３は利用者に対してエラー通知し、連結を拒否する。
【００５７】
次に、
（ｃ２）連結される２つの端子の一方が作成中の部品の端子であるとき、
・その端子の伝達方向は、もう一方の端子である要素部品の端子の伝達方向と同じになる。なお、作成中の部品の１つの端子を、複数の要素部品の端子と連結することは可能であるが、追加される要素部品の端子の伝達方向は、既接続の連結と逆向きであってはならない。その場合には、エラーを通知し、連結を拒否する。
（ｃ３）連結される端子の双方が作成中の部品の端子であるとき
・エラーを通知し、連結を拒否する。
【００５８】
このように本実施形態においては、利用者の操作で指定された２つの端子間の値の伝達方向をプログラムエディタ２１中の連結入力部２１３にて自動判別して、当該端子間を連結（接続）する矢印の方向を決定しているため、利用者は値の伝達方向を指定しなくてもよく、したがって簡単な作成作業で正確な部品の作成が可能になる。但し、例えばマウスの右ボタンクリックにより、利用者自身が連結の方向を指定（制限）可能とする画面を表示させることも可能である。
【００５９】
さて、利用者の要素部品選択操作に従って、部品選択部２１１が利用者の目的とするプログラムを構成する要素部品を選択して、その要素部品の情報である要素名（要素部品名）及び部品種別名を入力し、利用者の連結入力操作に従って、連結入力部２１３が指定の端子間の連結を実行して、その連結情報を入力することにより、当該プログラムの静的構造、即ち当該プログラムの構成要素である要素部品と、要素部品相互の静的な連結構造とが決定される。プログラムの静的構造とは、要素部品相互の静的な連結構造は定義されているものの、要素部品相互の振る舞いについては定義されていないデータ構造をいう。この段階では、プログラム定義情報２２は未完成の状態にあり、当該プログラム定義情報２２の要素部品情報２２１中に各データ部品毎のコストが設定されていない状態にある。このデータ部品毎のコストは、対応するデータ部品の全フィールド値を求めるのに要するコストであり、プログラムの要素部品相互の振る舞い、つまり、どのような順序で、どの要素部品にメッセージを送るかを決定するための情報である。
【００６０】
本実施形態において、要素部品相互の振る舞いは、以下に述べるように、利用者のコスト設定操作に従い、コスト設定部２１５により要素部品情報２２１中に利用者指定のデータ部品の要素名に対応付けて利用者指定のコストを設定することにより決定される。
【００６１】
利用者は、プログラムの静的構造を決定すると、当該プログラムの要素部品相互の振る舞いを決定するために、当該プログラムを構成する要素部品群のうちの各データ部品にコストを設定するための操作を次のように行う。即ち利用者は、コスト設定の対象とするデータ部品を位置指定（選択）するために、当該マウスの操作によりマウスポインタをプログラム定義領域５３上の所望の要素部品（データ部品）に移動させ、その位置でマウスの例えば右ボタンをクリックする。
【００６２】
プログラムエディタ２１中のコスト設定部２１５は、利用者がマウスポインタをプログラム定義領域５３上の任意の要素部品（データ部品）に移動させて、その位置でマウスの右ボタンをクリックする操作を行ったことを検出すると（ステップＳ９）、その位置に対応する要素部品（データ部品）の属性の１つとして、利用者に対してコストを入力することを要求する画面（コスト入力画面）を、その位置の近傍に表示する（ステップＳ１０）。すると利用者は、自身が位置指定したデータ部品の全フィールド値を求めるのに要するコストを、入力装置４を用いてコスト入力画面上で入力するための操作を行う。
【００６３】
コスト設定部２１５は、利用者が入力装置４を用いてコストを入力する操作を行ったことを検出すると（ステップＳ１１）、そのコストを入力装置４から受け取り、主記憶装置２に格納されているプログラム定義情報２２の要素部品情報２２１中に、対応する要素部品（データ部品）の種別名と組になるように設定する（ステップＳ１２）。同時にコスト設定部２１５は、設定したコスト（を示す数値）を、対応する要素部品（データ部品）の近傍に表示する（ステップＳ１３）。そしてコスト設定部２１５は、利用者による次のコスト設定指定操作（右ボタンクリック操作）を待つ。図５には、後述するデータ部品５３１Ａ，５３１Ｂ，５３１Ｃの近傍に、それぞれ値が１（Ａ＝１），２（Ｂ＝２），１０（Ｃ＝１０）のコスト５３０Ａ，５３０Ｂ，５３０Ｃが表示されている様子が示されている。
【００６４】
利用者は、プログラム定義領域５３上の要素部品のうちの目的とする全ての要素部品（データ部品）についてコスト入力操作を終了すると、つまりプログラム定義情報作成処理を終了すると、その時点において主記憶装置２に格納されているプログラム定義情報２２に基づくプログラムコードの作成のための操作を行う。ここでは、利用者は、図５に示すソフトウェア部品作成ＧＵＩ画面に用意されているメニューバー上のファイルメニューＡ２１を開く操作を行う。このファイルメニューＡ２１には、メニュー項目としてファイルの上書き、ファイルの新規保存、及びファイルのオープンに加えて、プログラムコードの作成を指示するための最適コード生成が用意されている。利用者は、この最適コード生成をマウスで選択する。
【００６５】
プログラムエディタ２１中のプログラムコード生成部２１６は、利用者がファイルメニューＡ２１から最適コード生成を選択する操作を行ったことを検出すると（ステップＳ１４）、プログラムコード生成処理（ステップＳ１５）を、図４のフローチャートに従って次のように実行する。
【００６６】
まずプログラムコード生成部２１６は、主記憶装置２に格納されているプログラム定義情報２２から、コストが設定されているデータ部品を１つ、コード生成の対象データ部品として検索する。プログラムコード生成部２１６は、データ部品が検索できたならば、プログラム定義情報２２中の要素連結情報２２２で示されている当該部品の端子（フィールド）の中から、未処理の端子を１つ選択して、その選択した端子をＦとする（ステップＳ３１）。
【００６７】
プログラムコード生成部２１６は、データ部品の端子Ｆを選択すると、その端子Ｆに入力を与えるリンク部品のうち、未処理のリンク部品の１つを選択して、その選択したリンク部品をＬとする（ステップＳ３２）。そしてプログラムコード生成部２１６は、リンク部品Ｌの見込みのコストＣを、当該リンク部品Ｌの入力端子に接続されたデータ部品の中で最大のコストが設定されているもののコストとする（ステップＳ３３）。ここで、リンク部品Ｌの入力端子に接続された要素部品がリンク部品である場合がある。この場合、更にそのリンク部品の入力側に接続された要素部品を、データ部品になるまでたどり、そのたどりついた先のデータ部品を、リンク部品Ｌの入力端子に接続されたデータ部品とする。つまり、リンク部品Ｌの入力端子に接続されたデータ部品とは、当該入力端子に直接または間接に接続されるデータ部品のうち、当該入力端子に至るパス（要素部品数）が最短（最小）のデータ部品である。
【００６８】
次にプログラムコード生成部２１６は、キーと値とのペアを要素とするテーブルＬＬ（図示せず）に、Ｌをキー、Ｃを値とする要素を登録する（ステップＳ３４）。ここで、テーブルＬＬは主記憶装置２上に置かれる。
【００６９】
次にプログラムコード生成部２１６は、プログラム定義情報２２を参照して、他に、対象データ部品の端子Ｆに入力を与える未処理のリンク部品があるか否かを調べる（ステップＳ３５）。もし、未処理のリンク部品があるならば、プログラムコード生成部２１６は未処理のリンク部品の１つについて、ステップＳ３２以降の処理を実行する。
【００７０】
これに対し、対象データ部品の端子Ｆに入力を与える未処理のリンク部品がなくなったならば、プログラムコード生成部２１６は、テーブルＬＬに登録されている要素中で、最もコストの小さいリンク部品Ｌについて、次コード
"if(Lflow()=failure"
を生成する（ステップＳ３６）。このコードにより、リンク部品Ｌに対し、その出力端子から値を出力できるなら、値を出力してもらい、出力できない失敗（failure）時には、次のリンク部品に切り替える機能が実現される。
【００７１】
次にプログラムコード生成部２１６は、テーブルＬＬを参照して、他の未処理の要素が当該テーブルＬＬに登録されているか否かを調べる（ステップＳ３７）。もし、未処理の要素が登録されているならば、直前にコードが生成されたリンク部品の次にコストの小さいリンク部品Ｌについて、次コード
"&& Lflow()=failure"
を生成する（ステップＳ３８）。このコードにより、リンク部品Ｌに対し、その出力端子から値を出力できるなら、値を出力してもらい、出力できない失敗（failure）時には、次のリンク部品に切り替える機能が実現される。プログラムコード生成部２１６は、ステップＳ３８を実行すると、ステップＳ３７に戻る。
【００７２】
これに対し、テーブルＬＬに登録されている全ての要素について、コストの小さいリング部品の順にコード生成が行われた結果、未処理の要素がなくなったなら、プログラムコード生成部２１６はステップＳ３９に進む。このステップＳ３９では、プログラムコード生成部２１６は、次コード
")return failure,"
を生成する。このコードにより、対象データ部品の入力端子（フィールド）の値が完成しなかったとして、当該データ部品のメソッドfill()を呼び出したメッセージ送信元に対し、failureステータスを通知する機能が実現される。
【００７３】
次にプログラムコード生成部２１６は、対象データ部品に他の未処理の端子があるか否かを調べる（ステップＳ４０）。もし、未処理の端子があるならば、プログラムコード生成部２１６は未処理の端子の１つについて、ステップＳ３１以降の処理を実行する。これに対し、対象データ部品の全ての端子についてステップＳ３１以降の処理を実行した結果、未処理の端子がなくなったなら、プログラムコード生成部２１６は、次コード
")return failure,"
を生成して（ステップＳ４１）、対象データ部品に関するコード生成処理を終了する。このコードにより、対象データ部品の入力端子（フィールド）の値が完成したとして、当該データ部品のメソッドfill()を呼び出したメッセージ送信元に対し、successステータスを通知する機能が実現される。
【００７４】
プログラムコード生成部２１６は、以上に述べた図４のフローチャートに従う処理を、プログラム定義情報２２で定義されているプログラムを構成する要素部品群のうちの全てのデータ部品について実行する。
【００７５】
このようにプログラムコード生成部２１６は、プログラム定義情報２２で定義されているプログラムを構成する要素部品群のうちのデータ部品について、そのデータ部品の端子（フィールド）に与えられる値を算出するために、いずれのリンク部品を用いるべきかを、候補となるリンク部品の入力側に接続されたデータ部品をたどって、そのたどった先のデータ部品に設定されているコストをもとに、コストが小さいデータ部品に直接または間接に接続されたリンク部品（つまりコストが小さいデータ部品に対応するリンク部品）ほど優先して用いられるように決定してプログラムコードを生成する。生成されたコード（プログラムコード）は、外部記憶装置１に保存される。
【００７６】
以上に述べた説明から明らかなように、本実施形態におけるリンクをも部品として扱うプログラミング（リンク指向プログラミング）では、従来のように単一の目的を持つ手順としてプログラムを記述するのではない。即ち本実施形態では、
（ａ）プログラムの静的構造、つまりプログラムを構成する要素部品と、その要素部品相互の静的な連結構造を決定する。
（ｂ１）プログラムの構成要素となっている全てのデータ部品のメソッドfill()を定義する。
【００７７】
（ｂ２）プログラムの構成要素となっている全ての関数（関数型リンク部品）のメソッドflow()を定義する。
【００７８】
（ｂ３）プログラムの構成要素となっている全ての述語（述語型部品）のメソッドtest()を定義する。
【００７９】
（ｃ）プログラムの構成要素をどのように機能させるか、つまり、どのような順序で、どの構成要素にメッセージを送るかを、メソッドとして定義する。
【００８０】
の３段階でプログラムを実現する。
【００８１】
明らかなように、上記（ｃ）は、プログラムの構成要素（要素部品）中の各データ部品にコストを設定するだけで実現される。したがって、本実施形態においてプログラム作成者が記述（定義）すべきプログラムは、データ部品とそのコスト、及び当該データ部品がリンク部品によっていかに連結されているか、つまり要素部品相互の静的な連結構造だけであり、各データ部品について、そのデータ部品の端子（フィールド）に与えられる値（データ）を完成するための最適手順を作成する必要がない。このため本実施形態においては、参照可能なデータ部品を追加するなどの変更も、容易に、且つ正確に行うことができる。
【００８２】
なお本実施形態では、上述のように、データ部品一覧領域５１及びリンク部品一覧領域５２から所望の部品群を選択してプログラム定義領域５３に配置し、目的のプログラムを構成する１つのソフトウェア部品を定義する場合、そのソフトウェア部品の端子も定義することができる。ここでは、入力装置４のマウスを操作して、マウスポインタをプログラム定義領域５３の境界線上に移動させて端子位置を指定することで、端子の新設、端子の削除、及び端子の変更のいずれか１つを選択的に実行可能なようになっている。図５の例では、端子Ａ４１〜Ａ４７が定義されている。
【００８３】
さて利用者は、プログラム定義情報２２を作成し終えた場合、或いは作成途中で操作を終了したい場合、プログラム作成ＧＵＩ画面上に用意されているメニューバー上のファイルメニューＡ２１を開く操作を行う。そして利用者は、開かれたファイルメニューＡ２１上で、作成終了した、或いは作成途中のプログラム定義情報２２を、名前を付けて新規に外部記憶装置１に保存するための操作を行う。また利用者は、外部記憶装置１に既に保存されているプログラム定義情報を主記憶装置２上にプログラム定義情報２２として呼び出して、要素部品プログラム定義領域５３上で対応するプログラムの作成に関する編集を行っていた場合であれば、元のプログラム定義情報を更新するための、いわゆる上書き保存操作を行う。
【００８４】
プログラムエディタ２１中の図示せぬプログラム登録部は、図５に示すようなプログラム作成ＧＵＩ画面が表示されている状態で、利用者がファイルメニューＡ２１を開いて上書き保存を指定する操作を行ったことを検出すると（ステップＳ１６）、その時点に主記憶装置２に格納されているプログラム定義情報２２で、外部記憶装置１に保存されているプログラム定義情報１３中の対応する情報を更新する上書き保存を行う（ステップＳ１７）。また、プログラム登録部は、利用者がファイルメニューＡ２１を開いて、新規保存を指定する操作を行ったことを検出すると（ステップＳ１８）、対象となるプログラム定義情報の名前を利用者に指定させ、現在主記憶装置２に格納されているプログラム定義情報２２を、利用者により指定されたプログラム定義情報名に対応付けて、外部記憶装置１内のプログラム定義情報１３に新規に保存する（ステップＳ１９）。
【００８５】
また、プログラム登録部は、利用者がファイルメニューＡ２１を開いて、オープンを指定すると共に、対象となるファイルとして、プログラム定義情報を示すプログラム定義情報名を指定すると（ステップＳ２０）、その指定のプログラム定義情報を外部記憶装置１に保存されているプログラム定義情報１３から取り出して、プログラム定義情報２２として主記憶装置２に読み込む（ステップＳ２１）。ここでは、プログラム定義情報２２に基づいて、当該プログラム定義情報２２中の要素部品情報２２１で示されるプログラムを構成する各要素部品が、プログラム作成ＧＵＩ画面上のプログラム定義領域５３に配置される。また、各要素部品間が、プログラム定義情報２２中の要素連結情報２２２に従って、矢印で連結される。また、要素部品情報２２１中に要素名と組をなしてコストが設定されている要素部品（データ部品）については、当該コストが対応する要素部品（データ部品）の近傍に表示される。これにより利用者にとって、コストの新規設定、変更等が容易となる。
【００８６】
さて、図５には、住宅購入に伴う税控除処理のための控除額算出プログラムを定義し終えた状態の画面表示例が示されている。この控除額算出プログラムは、購入価格が設定されるフィールドを持つ３つの「購入金額」データ部品５３１Ａ，５３１Ｂ，５３１Ｃと、データ部品５３１Ａ〜５３１Ｃのいずれかから与えられる購入金額と、外部から与えられる購入年度、借入残高、及び控除金額の上限値とを受け、予め定められた計算を行って控除額を算出する「控除額計算」リンク部品（関数型リンク部品）５３２とを用いて構成されている。ここで、データ部品５３１Ａ，５３１Ｂ，５３１Ｃの入力端子（フィールド）に与えられる購入金額は、それぞれ、（Ａ）税金を扱う窓口システムのデータベースに過去に記録されたもの、（Ｂ）他部門のシステムのデータベースに過去に記録されたもの、（Ｃ）税控除を要求する納税者により入力されるものとする。この場合、プログラム作成者は、望ましさから、（Ａ）が最適、（Ｂ）は多少時間がかかるが、納税者を煩わす（Ｃ）よりは適切、等の判断により、「控除額計算」リンク部品５３２の入力端子（Price）に「購入金額」を与える選択肢となるデータ部品５３１Ａ，５３１Ｂ，５３１Ｃに、それぞれＡ＝１，Ｂ＝２，Ｃ＝１０のようにコストを付与する。このコストは、「控除額計算」リンク部品５３２がデータ部品５３１Ａ，５３１Ｂ，５３１Ｃのいずれかから、値（購入金額）を与えてもらう際の、一種の回避すべき度合いの重みであり、値（購入金額）を与えてもらう優先度であるともいえる。
【００８７】
上記実施形態では、プログラムエディタ２１にプログラムコード生成部２１６を持たせ、プログラム定義情報をもとに最適な実行手順をプログラムコードとして生成している。しかし、最適な実行手順を、プログラム定義情報で定義されるプログラムの実行時に、例えばインタプリタにより決定することも可能である。
【００８８】
なお、本発明は、上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。更に、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件から幾つかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出され得る。
【００８９】
【発明の効果】
以上詳述したように本発明によれば、ソフトウェア部品の連結手段をリンク部品として表現するソフトウェア部品化技術を利用して、データ部品とリンク部品とに分類されるソフトウェア部品の群をプログラム構成の要素部品の群とし、当該要素部品相互の静的な連結構造が決定されたプログラムの静的構造を生成し、しかる後に当該プログラムの静的構造中の要素部品群のうちの利用者指定の各データ部品に、利用者指定のコストを設定することで、プログラムの構造を２つの階層に分離するようにしたので、それぞれを作成、把握するのが容易となり、ソフトウェア開発者がプログラムを容易に作成できるように支援することができる。
【００９０】
しかも本発明によれば、プログラム定義情報で定義された各データ部品毎に、当該データ部品の各フィールドを満たす値を算出するのに用いるリンク部品を決定するのに、候補となるリンク部品の入力側に接続されたデータ部品をたどって、そのたどった先のデータ部品に設定されているコストをもとに、コストが小さいデータ部品に対応するリンク部品ほど優先して用いられるように決定してプログラムコードを生成するようにしているので、ソフトウェア開発者は、各データ部品の各フィールドを満たすための最適手順を作成する必要がない。
【図面の簡単な説明】
【図１】本発明の一実施形態に係る、プログラム作成支援装置の構成を示すブロック図。
【図２】同実施形態におけるプログラム作成支援処理を説明するためのフローチャートの一部を示す図。
【図３】同実施形態におけるプログラム作成支援処理を説明するためのフローチャートの残りを示す図。
【図４】図３中のステップＳ１５のプログラムコード生成処理の詳細な手順を示すフローチャート。
【図５】同実施形態で適用されるプログラム作成ＧＵＩ画面の構成例と当該画面を用いて定義されたプログラムの構成例とを示す図。
【図６】図５中のプログラム定義領域５３上でのデータ部品の表示例を示す図。
【図７】図５中のプログラム定義領域５３上での関数型リンク部品の表示例を示す図。
【符号の説明】
１…外部記憶装置
２…主記憶装置
３…表示装置
４…入力装置
５…ＣＰＵ
１１…ソフトウェア部品定義情報
１２…アイコンデータ
１３…プログラム定義情報
１４…プログラムコード
２１…プログラムエディタ（プログラム作成支援プログラム）
２２…プログラム定義情報
５１…データ部品一覧領域
５２…リンク部品一覧領域
５３…プログラム定義領域
２１１…部品選択部
２１２…部品表示部
２１３…連結入力部
２１４…連結表示部
２１５…コスト設定部
２１６…プログラムコード生成部
２２１…要素部品情報
２２２…要素連結情報
【図１】
0003713466.tif 000004
【図２】
0003713466.tif 000005
【図３】
0003713466.tif 000006
【図４】
0003713466.tif 000007
【図５】
0003713466.tif 000008
【図６】
0003713466.tif 000009
【図７】
0003713466.tif 000010