(57)【要約】【課題】視覚プログラミングにおいて、作成中プログラムに追加する流用プログラムをより効率的にデータベースから検索可能とする。【解決手段】視覚プログラミング装置は、１以上のクラス部品から構成される作成中プログラムに対して、該作成中プログラムに含まれる１つのクラス部品における１つの入出力ポートの指定を受け付ける受付手段と、受付手段で指定された入出力ポートを有するクラス部品を含み、かつ、作業中プログラムのフルセット又はサブセットとなる１以上の部分プログラムを作成中プログラムから抽出する第１の抽出手段と、受付手段で指定された入出力ポートを有するクラス部品を含み、かつ、クラス部品の接続状態に関して第１の抽出手段により抽出された１以上の部分プログラムとの間で矛盾が存在しない１以上のプログラム部品をデータベースから抽出する第２の抽出手段と、第２の抽出手段により抽出された１以上のプログラム部品を、作成中プログラムに流用するプログラム部品の候補として提示する提示手段と、を有する。【選択図】図２
2015099564.tif 000002
【特許請求の範囲】
【請求項１】
複数の部品を視覚的に操作することによりプログラムを作成する視覚プログラミング装置であって、該視覚プログラミング装置は、それぞれが複数のクラス部品を接続することにより構成された複数のプログラム部品を記憶するデータベースと通信可能に構成されており、前記視覚プログラミング装置は、
１以上のクラス部品から構成される作成中プログラムに対して、該作成中プログラムに含まれる１つのクラス部品における１つの入出力ポートの指定を受け付ける受付手段と、
前記受付手段で指定された入出力ポートを有するクラス部品を含み、かつ、前記作業中プログラムのフルセット又はサブセットとなる１以上の部分プログラムを前記作成中プログラムから抽出する第１の抽出手段と、
前記受付手段で指定された入出力ポートを有するクラス部品を含み、かつ、クラス部品の接続状態に関して前記第１の抽出手段により抽出された１以上の部分プログラムとの間で矛盾が存在しない１以上のプログラム部品を前記データベースから抽出する第２の抽出手段と、
前記第２の抽出手段により抽出された１以上のプログラム部品を、前記作成中プログラムに流用するプログラム部品の候補として提示する提示手段と、
を有することを特徴とする視覚プログラミング装置。
【請求項２】
前記データベースは、プログラム部品を該プログラム部品が過去に流用された頻度を示す頻度情報と関連付けて記憶するよう構成されており、
前記頻度情報に基づいてプログラム部品に対する優先度を算出する優先度算出手段を更に有し、
前記提示手段は、前記優先度に従って、前記第２の抽出手段により抽出された１以上のプログラム部品を提示する
ことを特徴とする請求項１に記載の視覚プログラミング装置。
【請求項３】
前記提示手段により提示された１以上のプログラム部品から１つのプログラム部品の選択を受け付ける選択受付手段と、
前記選択受付手段により選択を受け付けた１つのプログラム部品における複数のクラス部品の接続状態の構造を前記作成中プログラムに統合する統合手段と、
を更に有することを特徴とする請求項１又は２に記載の視覚プログラミング装置。
【請求項４】
前記選択受付手段により選択を受け付けた１つのプログラム部品に含まれるクラス部品と前記作成中プログラムに含まれるクラス部品との対応付けを編集する編集手段を更に有することを特徴とする請求項３に記載の視覚プログラミング装置。
【請求項５】
前記統合手段により前記作成中プログラムに統合されたプログラム部品に関する前記データベースにおける頻度情報を更新する更新手段を更に有することを特徴とする請求項２に記載の視覚プログラミング装置。
【請求項６】
前記作成中プログラムにおいて、前記受付手段で指定された入出力ポートを有するクラス部品における未接続の入出力ポートと他のクラス部品における未接続の入出力ポートとの仮の接続を設定する仮接続設定手段を更に有し、
前記第１の抽出手段は、前記仮接続設定手段によって設定された仮の接続により接続されたプログラムを前記作業中プログラムとして１以上の部分プログラムを抽出する
ことを特徴とする請求項１乃至５の何れか一項に記載の視覚プログラミング装置。
【請求項７】
前記作業中プログラムを構成する１以上のクラス部品は、所定の座標が設定された平面に配置されており、
前記作業中プログラムに含まれる１以上のクラス部品の座標位置に基づいて前記優先度算出手段により算出された優先度を修正する修正手段を更に有する
ことを特徴とする請求項２に記載の視覚プログラミング装置。
【請求項８】
前記提示手段により提示されたプログラム部品のサブセットとなるプログラム部品を前記データベースに登録する登録手段を更に有する
ことを特徴とする請求項１乃至７の何れか一項に記載の視覚プログラミング装置。
【請求項９】
複数の部品を視覚的に操作することによりプログラムを作成する視覚プログラミング装置の制御方法であって、該視覚プログラミング装置は、それぞれが複数のクラス部品を接続することにより構成された複数のプログラム部品を記憶するデータベースと通信可能に構成されており、前記制御方法は、
１以上のクラス部品から構成される作成中プログラムに対して、該作成中プログラムに含まれる１つのクラス部品における１つの入出力ポートの指定を受け付ける受付工程と、
前記受付工程で指定された入出力ポートを有するクラス部品を含み、かつ、前記作業中プログラムのフルセット又はサブセットとなる１以上の部分プログラムを前記作成中プログラムから抽出する第１の抽出工程と、
前記受付工程で指定された入出力ポートを有するクラス部品を含み、かつ、クラス部品の接続状態に関して前記第１の抽出工程により抽出された１以上の部分プログラムとの間で矛盾が存在しない１以上のプログラム部品を前記データベースから抽出する第２の抽出工程と、
前記第２の抽出工程により抽出された１以上のプログラム部品を、前記作成中プログラムに流用するプログラム部品の候補として提示する提示工程と、
を有することを特徴とする視覚プログラミング装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、視覚プログラミングを支援する視覚プログラミング装置およびその制御方法に関するものである。
【背景技術】
【０００２】
種々のアルゴリズム（システム）を実現するプログラムの作成方法として、文字ベースのプログラミング方法に対し、グラフィカルな操作で部品を配置し、部品同士を接続することによってプログラミングを行う視覚プログラミング（ビジュアルプログラミング）が知られている。
【０００３】
視覚プログラミングでは、表示画面上で”部品”をひとつひとつ配置し、部品同士を接続することによりプログラムを作成していく。そして、多くの視覚プログラミング方法がデータフローの考え方に基づいている。ここで、データフローとはデータの流れを意味しており、データがなんらかの処理により変異を行うことを基本とし、これを組み合わせることにより、アルゴリズムを実現する。
【０００４】
ところで、作成する多くのプログラムで共通して使われる特定の部品の組合せが存在する。そこで、よく使われる部品あるいは部品の組合せ（これもプログラムである）を、プログラム作成時に、ユーザ（プログラム作成者）に提示し、選択させ、それを作成中のプログラムと統合することにより、プログラム開発効率を高めようとする試みがある。
【０００５】
例えば、特許文献１では、２つの部品の未接続ポートと該ポート間の接続を通じたデータの流れを、ひとつまたは複数指定し、これらを満たすプログラムをデータベースより検索し、作成中のプログラムに統合する方法が開示されている。また、特許文献２では、１つの部品の未接続ポートを指定し、このポートに接続可能な部品を使用頻度順にデータベースより検索・提示し、ユーザに選択させ、選択部品を指定部品の指定ポートにリンクで接続する方法が開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平９−２１２３５４号公報
【特許文献２】特開２０００−２７６３３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、例えば、特許文献１の方法では、少なくとも２つの部品を配置・指定しなければならないという問題がある。また、データベースから検索されたプログラムの一部分を流用・統合したい場合には、別途、不要な部分を削除する手間がかかることになる。また、特許文献２の方法では、指定ポートに対し１つの部品を接続することしか行わないため、検索されたプログラムに複数の部品およびリンクが含まれていても、当該複数の部品およびリンク全体を利用できない。
【０００８】
またいずれの方法においても、作成中のプログラムにおいて既に配置・接続を行った複数の部品・ポートおよびリンクを用いた、プログラムの検索・提示ができない。さらに、部品間の関係を明示的に指定しなければならない。
【０００９】
本発明は上述の問題点に鑑みなされたものであり、視覚プログラミングにおいて、作成中プログラムに追加する流用プログラムをより効率的にデータベースから検索可能とする技術を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述の問題点を解決するため、本発明に係る視覚プログラミング装置は以下の構成を備える。すなわち、複数の部品を視覚的に操作することによりプログラムを作成する視覚プログラミング装置であって、該視覚プログラミング装置は、それぞれが複数のクラス部品を接続することにより構成された複数のプログラム部品を記憶するデータベースと通信可能に構成されており、前記視覚プログラミング装置は、１以上のクラス部品から構成される作成中プログラムに対して、該作成中プログラムに含まれる１つのクラス部品における１つの入出力ポートの指定を受け付ける受付手段と、前記受付手段で指定された入出力ポートを有するクラス部品を含み、かつ、前記作業中プログラムのフルセット又はサブセットとなる１以上の部分プログラムを前記作成中プログラムから抽出する第１の抽出手段と、前記受付手段で指定された入出力ポートを有するクラス部品を含み、かつ、クラス部品の接続状態に関して前記第１の抽出手段により抽出された１以上の部分プログラムとの間で矛盾が存在しない１以上のプログラム部品を前記データベースから抽出する第２の抽出手段と、前記第２の抽出手段により抽出された１以上のプログラム部品を、前記作成中プログラムに流用するプログラム部品の候補として提示する提示手段と、を有する。
【発明の効果】
【００１１】
本発明によれば、視覚プログラミングにおいて、作成中プログラムに追加する流用プログラムをより効率的にデータベースから検索可能とする技術を提供することができる。
【図面の簡単な説明】
【００１２】
【図１】「部品」および「プログラム」を説明する図である。
【図２】第１実施形態に係る情報処理装置の動作を説明するフローチャートである。
【図３】データベースに登録されたプログラムを例示的に示す図である。
【図４】ユーザが部品とポートを指定する動作を説明する図である。
【図５】部分プログラム抽出ステップ（Ｓ１１２）の動作を説明するフローチャートである。
【図６】リンク対応表を説明する図である。
【図７】流用プログラム候補抽出ステップ（Ｓ１１３）の動作を説明するフローチャートである。
【図８】流用プログラム候補抽出ステップにおける動作を説明する図である。
【図９】「矛盾するリンク」を説明する図である。
【図１０】流用プログラム候補抽出ステップによって出力される流用プログラムレコードの例を示す図である。
【図１１】流用プログラム候補のユーザへの提示及びユーザによる選択の動作を説明する図である。
【図１２】流用プログラム候補のユーザへの提示及びユーザによる選択の他の動作を説明する図である。
【図１３】部品間対応編集ステップにおける編集操作の例を説明する図である。
【図１４】部品間対応編集ステップにおける動作を説明する図である。
【図１５】第２実施形態に係る情報処理装置の動作を説明するフローチャートである。
【図１６】部分プログラム拡張ステップ（Ｓ１２１）の動作を説明するフローチャートである。
【図１７】部分プログラム拡張ステップにおける動作を説明する図である。
【図１８】抽出された部分プログラム候補の例を示す図である。
【図１９】部分プログラム拡張ステップの詳細動作を説明する図である。
【図２０】動作の説明において、「データの原則的な流れ」を説明する図である。
【図２１】流用プログラムの部分プログラムを説明する図である。
【図２２】第４実施形態に係る情報処理装置の動作を説明するフローチャートである。
【図２３】流用プログラム編集ステップにおける編集操作の例を説明する図である。
【図２４】流用プログラム編集ステップの動作を説明する図である。
【図２５】流用プログラム追加登録ステップ（Ｓ１３２）の動作を説明するフローチャートである。
【図２６】流用プログラム追加登録ステップの動作を説明する図である。
【図２７】変形例に係る情報処理装置の動作を説明するフローチャートである。
【図２８】情報処理装置のハードウェア構成を示す図である。
【発明を実施するための形態】
【００１３】
以下に、図面を参照して、この発明の好適な実施の形態を詳しく説明する。なお、以下の実施の形態はあくまで例示であり、本発明の範囲を限定する趣旨のものではない。
【００１４】
（第１実施形態）
本発明に係る視覚プログラミングの第１実施形態として、情報処理装置１００を例に挙げて以下に説明する。
【００１５】
＜１．前提技術＞
まず、視覚プログラミングで用いられる用語である「部品」「ポート」「リンク」について簡単に説明する。
【００１６】
図１は、「部品」および「プログラム」を説明する図である。図１（ａ）は、視覚プログラミングで用いられる”部品（クラス部品）”の例を示している。また、図１（ｂ）は、複数の部品を接続して構成された”プログラム（プログラム部品）”の例を示している。
【００１７】
図１（ａ）は部品の一例を示しており、”Ａ１”は処理を表すクラスが”Ａ”であり、それをインスタンス化したものが”Ａ１”であることを表している。ここで”処理”とは数値の加減算や、ヒストグラム生成、画像の二値化、画像エッジ抽出、画像特徴抽出等、任意の処理であり得る。たとえば「Ｓｏｂｅｌフィルタ」処理であれば、入力画像から、水平方向勾配画像と垂直方向勾配画像を算出する処理である。
【００１８】
部品１に対するデータの入出力は、両側に付されたポート１１、１２、１３を経由して行われる。入出力の数やデータ型はクラス（この場合は”Ａ”）によって予め定められている。部品１の左側にあるポート１１が入力ポートで、ここからデータが入力される。部品１によって処理されたデータは、右側にある出力ポート１２、１３から出力される。入力ポートあるいは出力ポートが複数ある場合、以下の説明においては、図において上側に記載されたポートから順に番号を付して呼ぶこととする。例えば、図１（ａ）の場合、出力ポート１２は「出力ポート１」、出力ポート１３は「出力ポート２」と呼ぶ。
【００１９】
なお、クラスによって、各ポートの型（入出力データの型）が予め定められている。たとえば、前述の「Ｓｏｂｅｌフィルタ」処理の特定の実装においては、入力ポートの型（データ型）は「符号なし整数画像」であり、出力ポートの型はふたつとも「符号あり整数画像」となる。
【００２０】
すなわち、図１（ａ）の部品１は、処理（クラス）が”Ａ”であり、入力ポートが１つ、出力ポートが２つあり、インスタンス化されたものが”Ａ１”である部品を表している。なお、ポートの型は明示されていないが、クラス”Ａ”によって予め定まっている。
【００２１】
視覚プログラミングにおいては、視覚的に、このような部品の入出力ポート間を「リンク」によって接続することで”処理”と”データの流れ”を定義し、プログラムを作成していく。
【００２２】
図１（ｂ）は３つの部品を接続して構成されたプログラムの一例を示している。部品Ｂ１の出力ポート１からの出力が部品Ａ１の入力ポート１に入り、部品Ａ１の出力ポート１の出力が部品Ｃ１の入力ポート２に入ることを表している。これらの接続関係はリンクを用いて表されており、データの流れる向き（出力ポートから入力ポートへ）に矢印が付されている。
【００２３】
上記の例に倣い、以下ではインスタンス名（たとえば”Ａ１”）の最初の１文字（この場合は”Ａ”）はクラスを表すものとして説明を行うが、表記規則はこれに限定されるものでは無い。たとえば、インスタンスからクラスを取得する方法（たとえばＣ＋＋言語ではＲＴＴＩ（Runtime Type Information）という機能グループが定義されている）を用いる等、クラスとインスタンスを独立して管理を行えばよい。
【００２４】
また、部品に対するポートの左右位置による入出力ポートの別、リンクに付された矢印等の表記法は、本発明を説明するための一例に過ぎない。また「Ｓｏｂｅｌフィルタ」の入出力ポートの構成についてもあくまで例であり、「Ｓｏｂｅｌフィルタ」の実装によっては他の入出力ポートや、他のデータ型を用いる場合もある。
【００２５】
＜２．装置構成＞
図２８は、情報処理装置のハードウェア構成を示す図である。情報処理装置１００は、バス１０１、ＣＰＵ１０５、ＲＯＭ１０２、ＲＡＭ１０６、データベース（ＤＢ）１０４、入力インタフェース１０３、ディスプレイインタフェース１０７を含む。
【００２６】
ＣＰＵ１０５は、情報処理装置１００の起動プログラム、オペレーティングシステム（ＯＳ）、各種の処理プログラムを実行する機能部である。バス１０１は、ＣＰＵ１０５が他の機能部との間でデータを読み書きするための通信機能を提供する。ＲＯＭ１０２は、情報処理装置１００を起動するためのプログラムが記憶されている。例えば、情報処理装置１００に電源が投入されるとＲＯＭ１０２に保持されたプログラムがＣＰＵ１０５により読み出されて実行され、各機能部の初期化やＯＳの起動等を行う。ＲＡＭ１０６は、ＣＰＵ１０５が処理プログラムを実行する際のワークエリア、あるいは、データの一時保存を行う記憶部として機能する。ディスプレイインタフェース１０７は、情報処理装置１００からの映像出力、例えば、各種グラフィカルユーザインタフェース（ＧＵＩ）の表示に係る画像信号をディスプレイ１２０が処理可能な信号に変換し出力する。入力インタフェース１０３は、キーボード・マウス１１０からの電気信号をＣＰＵ１０５が処理可能な情報に変換する。
【００２７】
また、情報処理装置１００には、入力インタフェース１０３を介してキーボード・マウス１１０等のユーザ入力を受け付ける入力装置が接続されている。なお、入力装置として、ペンあるいはタッチパネルを利用するよう構成しても良い。さらに、情報処理装置１００には、ディスプレイインタフェース１０７を介して、操作画面を表示するディスプレイ１２０が接続されている。ディスプレイとしては、液晶ディスプレイ、プラズマディスプレイ、ＣＲＴディスプレイ等が利用可能である。なお、データベース（ＤＢ）１０４については、情報処理装置１００と例えばネットワークを介して通信可能に接続された外部データベースであってもよい。
【００２８】
＜３．装置の動作＞
図２は、第１実施形態に係る情報処理装置の動作を説明するフローチャートである。具体的には、視覚プログラミング方法を実践する処理の流れの例を示している。特に、図２（ａ）は、データベース１０４にプログラムを登録する処理、図２（ｂ）は、作成中のプログラムに流用プログラムを統合する処理である。
【００２９】
ユーザ（プログラム開発者）は、予めデータベース１０４に登録されたプログラムを、作成中のプログラムの一部として流用することにより、プログラム作成効率を上げる。そのため、データベースにはプログラムを予め登録しておく（ステップＳ１０１）必要がある。
【００３０】
データベースへは、部品のクラスとポートの組合せを検索キーとして、プログラムそのものと当該プログラムが流用された回数（頻度情報）とを関連付けて登録する。なお検索キーとして指定したクラスに対応する部品を特定する情報は、検索結果のプログラムに含まれる。
【００３１】
検索キーとして指定する部品のクラスとポートの組合せに関しては、後述の部品選択ステップ（ステップＳ１１１）において説明する。なお、データベースは、既存の様々なタイプのものが利用可能である。
【００３２】
図３は、データベースに登録されたプログラムを例示的に示す図である。ここでは、例として、３つの検索キーに対応するプログラムのリストを詳細に表している。
【００３３】
最も左の列は「クラス”Ａ”の出力ポート１」を検索キーとして検索される４つのプログラム（Ｐｒｏｇｒａｍ２＿Ａ１１、Ｐｒｏｇｒａｍ３＿Ａ１１、Ｐｒｏｇｒａｍ４＿Ａ２１、Ｐｒｏｇｒａｍ１＿Ａ１１）を表している。Ｐｒｏｇｒａｍ２＿Ａ１１に注目すると、流用回数が４回（”ｕｓｅｄ＝”の右に示す数値）であり、検索キーのクラスに対応する部品はＡ１（部品の背景に網をかけている）、検索キーのポートは出力ポート１（黒塗りにしてある）である。
【００３４】
次に、データベースに登録されたプログラムを、ユーザが作成中のプログラムに統合する手順を図２（ｂ）を参照して説明する。
【００３５】
＜部品選択ステップ（Ｓ１１１）＞
ステップＳ１１１では、情報処理装置１００は、作成中プログラム内における部品とポートの指定をユーザから受け付ける（受付手段）。図４は、ユーザが部品とポートを指定する動作を説明する図である。図４（ａ−１）はユーザが作成中のプログラムであり、クラス”Ａ”の部品Ａｘがひとつ配置してある（１以上のクラス部品から構成される作成中プログラム）。図では、白抜き矢印で表示されているマウスポインタを部品Ａｘの出力ポート２に重ねる（マウスオーバーする）ことによって指定している。なお、部品とポートの指定方法は、指定ポートのマウスオーバーに限定されるものでは無い。例えば、指定ポートのマウスクリックやコンテクストメニューからの選択、キーボードによる入力など他の方法で指定してもよい。図４（ｂ−１）、（ｃ−１）、（ｄ−１）、（ｅ−１）はユーザ作成中プログラムの他の例を示している。いずれも図４（ａ−１）と同様、「部品Ａｘの出力ポート２」を選択している。
【００３６】
以降のステップでは、ステップＳ１１１で指定したポートに繋がる、あるいは指定したポートを核として流用プログラムを検索し作成中のプログラムに統合する。なお、ここでは部品およびポートを指定したが、部品のみを指定するようにしてもよい。この場合はステップＳ１０１では、部品のクラスを検索キーとしてプログラムと流用回数をデータベースへ登録する。
【００３７】
＜部分プログラム抽出ステップ（Ｓ１１２）＞
ステップＳ１１２では、情報処理装置１００は、ステップＳ１１１で受け付けた部品とポートを含むプログラム（以下、部分プログラムと呼ぶ）を抽出する（第１の抽出手段）。具体的には、作業中プログラムのフルセット又はサブセットとなる１以上の部分プログラムを抽出する。
【００３８】
図４（ａ−２）は、図４（ａ−１）から抽出した部分プログラムを、図４（ｂ−２）は、図４（ｂ−１）から抽出した部分プログラムを示している。また、図４（ｃ−２）は、図４（ｃ−１）から抽出した部分プログラムを、図４（ｄ−２）は、図４（ｄ−１）から抽出した部分プログラムを、図４（ｅ−２）は、図４（ｅ−１）から抽出した部分プログラムを、それぞれ示している。
【００３９】
図４（ａ−１）の場合、作成中プログラムには部品Ａｘのみが含まれており、かつ部品Ａｘが指定されている。そのため部品Ａｘのみを含むプログラム４０１が部分プログラムとして抽出される。また、図４（ｂ−１）の場合は、指定部品Ａｘと部品Ｃｘがリンクによって繋がっているため、Ａｘのみのプログラム４１１と、Ｃｘとリンクを含むプログラム４１２の２つが部分プログラムとして抽出される。
【００４０】
リンクで繋がった先の部品から、さらにリンクが出ている場合の例が図４（ｃ−１）である。この場合はプログラム４２１、４２２、４２３の３つが部分プログラムとして抽出される。図４（ｄ−１）は複数のリンクが同一部品から出ている場合の例である。この場合は一方のリンク、他方のリンクと辿ったあとに、それらを組合せることにより、プログラム４３１、４３２、４３３、４３４の４つが部分プログラムとして抽出される。
【００４１】
図４（ｅ−１）は図４（ｃ−１）に部品Ｅｘを追加配置したものであるが、部品Ｅｘは部品Ａｘとリンクを辿った接続関係を持たないため、部品Ｅｘを含むプログラムは抽出されず、図４（ｃ−２）と同様な処理を経て、プログラム４４１、４４２、４４３の３つが部分プログラムとして抽出される。
【００４２】
このようにリンクを辿っていくことにより、すべての部分プログラムを抽出できる。なお、他の方法、例えば、すべての部分プログラム候補を総当たりで調べることにより、部分プログラムを抽出するよう構成しても良い。総当たりによる抽出は、計算量は増えるが、アルゴリズムはシンプルになるという点で有利である。
【００４３】
図５は、部分プログラム抽出ステップ（Ｓ１１２）の動作を説明するフローチャートである。以下では、例として、図４（ｃ−１）のプログラムの部分プログラムを抽出する場合について説明する。
【００４４】
ステップＳ１１２１では、情報処理装置１００は、リンク対応表を作成する。リンク対応表とは、あるリンクを追加して部分プログラムを拡張した場合に、そのリンクを追加することにより新たに部分プログラムの拡張に用いることができるようになるリンクを表形式にとして生成したものである。
【００４５】
図６は、リンク対応表を説明する図である。図６（ａ）は図４（ｃ−１）に対応したリンク対応表を示す。最小の部分プログラムはユーザが指示を行った部品Ａｘである。この状況で、部分プログラムを拡張するのに使えるリンクは、部品Ａｘに接続しているリンクであるＬｉｎｋＣＡ４２０２であり、これが１行目に示されている。また、ＬｉｎｋＢＣ４２０１を追加して、部分プログラムを拡張した場合に、新たに部分プログラムを拡張するのに使えるリンクは、ＬｉｎｋＢＣ４２０１の両端の部品に接続しているリンクであり、この場合は、ＬｉｎｋＣＡ４２０２となり、これが２行目に示されている。同様に、ＬｉｎｋＣＡ４２０２を追加して、部分プログラムを拡張した場合に、新たに部分プログラムを拡張するのに使えるリンクは、ＬｉｎｋＣＡ４２０２の両端の部品に接続しているリンクである、ＬｉｎｋＢＣ４２０１となり、これが２行目に示されている。このように、リンク対応表は、対象とするプログラムに含まれるリンクの数＋１の行（表題行を除く）から構成される。
【００４６】
ステップＳ１１２２では、情報処理装置１００は、すべての部分プログラムをリンクの組合せとして列挙する。部分プログラムは、ユーザが指示した部品からリンクを辿って拡張したものであるから、リンクの数が”０”のものも含めて、リンクの組合せをすべて列挙する。これにより、すべての候補（以下、部分プログラム候補と呼ぶ）を列挙することができる。なお、リンクの数が”０”の部分プログラムとは、ユーザが指定した部品のみからなるものである。
【００４７】
図６（ｂ）は、図４（ｃ−１）のプログラムから抽出される４つの部分プログラム候補を示している。次に抽出された４つの部分プログラム候補の各々に対して、部分プログラムであるかどうかのチェックを行う。
【００４８】
ステップＳ１１２３では、情報処理装置１００は、リンク集合の初期化を行う。リンク集合とは部分プログラム候補を構成するリンクの集合のうち、未検証のリンクの集合である。すなわち、リンク集合が空集合となった時点で、チェック中のプログラムは、部分プログラムであると確認できたことになる。
【００４９】
まず、プログラム４２１についてチェックを行う。リンク集合の初期値として、ステップＳ１１２２で列挙したリンクの組合せの集合を用いる。図６（ｂ）を参照すると、プログラム４２１に対するリンク集合の初期値は空集合φとなる。
【００５０】
ステップＳ１１２４では、情報処理装置１００は、許容リンク集合の初期化を行う。許容リンク集合とは、部分プログラム候補を構成するリンクが、許容リンク集合に含まれるものであれば、部分プログラムであると認められるリンクの集合である。許容リンク集合の初期値として、リンク対応表の「リンク」がない行の許容リンクを用いる。これは図６（ａ）を参照して、｛ＬｉｎｋＣＡ｝となる。
【００５１】
ステップＳ１１２５では、情報処理装置１００は、リンク集合に含まれるリンクのうち、許容リンクに含まれるものを抽出する。これには、リンク集合と許容リンク集合の積集合をとればよい。この結果を、検証済リンク集合とする。
【００５２】
検証済リンク集合  ＝  リンク集合  ∩  許容リンク集合
その結果、検証済リンク集合は空集合φとなる。
【００５３】
ステップＳ１１２６では、情報処理装置１００は、リンク集合の更新を行う。リンク集合から検証済リンク集合を引いた差集合が、未検証なリンクの集合となる。
【００５４】
リンク集合  ＝  リンク集合  ＼  検証済リンク集合
その後、リンク集合が空集合か否かがチェックされ、空集合である場合、ステップＳ１１２７で部分プログラムであるとの決定がなされる。つまり、前述したとおり、リンク集合が空集合であるとは、部分プログラム候補を構成するすべてのリンクが検証済ということであるので、チェック中のプログラムは部分プログラムということになる。上述のようにプログラム４２１に対するリンク集合の初期値は空集合φであるためステップＳ１１２７に進む。
【００５５】
ステップＳ１１２７では、情報処理装置１００は、プログラム４２１を部分プログラムとして決定する。ここで決定された部分プログラムは後述のステップＳ１１２９で出力されることになる。以上の処理により、プログラム４２１についてのチェックが終了する。
【００５６】
図６（ｂ）の順に従って、次に、プログラム４２４についてチェックを行う。ステップＳ１１２３では、リンク集合が、ステップＳ１１２４で許容リンク集合が次のように初期化される。
【００５７】
リンク集合      ＝｛ＬｉｎｋＢＣ｝
許容リンク集合  ＝｛ＬｉｎｋＣＡ｝
ステップＳ１１２５では、検証済リンク集合が次のように算出される。
【００５８】
検証済リンク集合  ＝｛ＬｉｎｋＢＣ｝∩｛ＬｉｎｋＣＡ｝
＝  φ
ステップＳ１１２６では、リンク集合が次のように更新される。
【００５９】
リンク集合  ＝｛ＬｉｎｋＢＣ｝＼φ
＝｛ＬｉｎｋＢＣ｝
ここでリンク集合は空集合ではないため、ステップＳ１１２６によってリンク集合に変化があったか否かをチェックする。リンク集合が変化しないということは、リンク集合には部分プログラムとして条件を満たすリンクが一本もないということを示しており、これは注目しているプログラムが部分プログラムではないことを意味する。プログラム４２４については、ステップＳ１１２６の前後で、リンク集合は｛ＬｉｎｋＢＣ｝のまま変化していない。以上の処理により、プログラム４２４についてのチェックが終了する。つまり、プログラム４２４は部分プログラムではないとして処理される。
【００６０】
図６（ｂ）の順に従って、次に、プログラム４２２についてチェックを行う。ステップＳ１１２３でリンク集合が、ステップＳ１１２４で許容リンク集合が次のように初期化される。
【００６１】
リンク集合      ＝｛ＬｉｎｋＣＡ｝
許容リンク集合  ＝｛ＬｉｎｋＣＡ｝
ステップＳ１１２５で検証済リンク集合が次のように算出される。
【００６２】
検証済リンク集合  ＝｛ＬｉｎｋＣＡ｝∩｛ＬｉｎｋＣＡ｝
＝｛ＬｉｎｋＣＡ｝
ステップＳ１１２６でリンク集合が次のように更新される。
【００６３】
リンク集合  ＝｛ＬｉｎｋＣＡ｝＼｛ＬｉｎｋＣＡ｝
＝  φ
ここでリンク集合が空集合であるので、ステップＳ１１２７で、プログラム４２２を部分プログラムとして決定する。
【００６４】
同様に、図６（ｂ）の順に従って、次に、プログラム４２３についてチェックを行う。ステップＳ１１２３でリンク集合が、ステップＳ１１２４で許容リンク集合が次のように初期化される。
【００６５】
リンク集合      ＝｛ＬｉｎｋＢＣ，ＬｉｎｋＣＡ｝
許容リンク集合  ＝｛ＬｉｎｋＣＡ｝
ステップＳ１１２５で検証済リンク集合が次のように算出される。
【００６６】
検証済リンク集合  ＝｛ＬｉｎｋＢＣ，ＬｉｎｋＣＡ｝∩｛ＬｉｎｋＣＡ｝
＝｛ＬｉｎｋＣＡ｝
ステップＳ１１２６でリンク集合が次のように更新される。
【００６７】
リンク集合  ＝｛ＬｉｎｋＢＣ，ＬｉｎｋＣＡ｝＼｛ＬｉｎｋＣＡ｝
＝｛ＬｉｎｋＢＣ｝
リンク集合は空集合ではなく、かつ、ステップＳ１１２６の前後でリンク集合は変化しているため、ステップＳ１１２８で許容リンク集合を更新する。検証済リンク集合は新たに拡張された部分プログラムと考えられるため、このリンクによってさらに部分プログラムの拡張ができるようになったリンクを追加する。これには、検証済リンクの各要素リンクについてリンク対応表の対応する許容リンクを求め、それらの和集合と、許容リンク集合の和集合を求めればよい。
【００６８】
検証済リンク集合の要素リンクＬｉｎｋＣＡに対応する許容リンクを図６（ａ）のリンク対応表から引くと、ＬｉｎｋＢＣが得られる。検証済リンク集合の他の要素リンクはないため、許容リンク集合は以下のように更新される。もし検証済リンク集合の他の要素リンクがあった場合は、各々についてリンク対応表から許容リンクを求め、それらの和集合をとればよい。
【００６９】
許容リンク集合  ＝｛ＬｉｎｋＣＡ｝∪｛ＬｉｎｋＢＣ｝
＝｛ＬｉｎｋＢＣ，ＬｉｎｋＣＡ｝
許容リンク集合を更新したら、再びステップＳ１１２５からの処理を行う。
【００７０】
ステップＳ１１２５で検証済リンク集合が次のように算出される。
【００７１】
検証済リンク集合  ＝｛ＬｉｎｋＢＣ｝∩｛ＬｉｎｋＢＣ，ＬｉｎｋＣＡ｝
＝｛ＬｉｎｋＢＣ｝
ステップＳ１１２６でリンク集合が次のように更新される。
【００７２】
リンク集合  ＝｛ＬｉｎｋＢＣ｝＼｛ＬｉｎｋＢＣ｝
＝  φ
ここでリンク集合が空集合となったので、ステップＳ１１２７でプログラム４２３を部分プログラムとして決定する。
【００７３】
以上で、４つの部分プログラム候補のチェックが終了する。そのため、ステップＳ１１２９に進み、ステップＳ１１２７で決定された全ての部分プログラムを出力する。ここでは、プログラム４２１、４２２、４２３の３つが部分プログラムとして抽出される。このようにして、ステップＳ１１２の処理が終了する。
【００７４】
＜流用プログラム候補抽出ステップ（Ｓ１１３）＞
ステップＳ１１３では、情報処理装置１００は、作成中プログラムに流用・統合する流用プログラムの候補を抽出する（第２の抽出手段）。図７は、流用プログラム候補抽出ステップ（Ｓ１１３）の動作を説明するフローチャートである。
【００７５】
ステップＳ１１３１では、情報処理装置１００は、データベースから候補プログラムを検索する。ここでは、ユーザの作成中プログラムが図４（ｂ−１）の場合を例にとり、詳細に説明する。図４（ｂ−１）の場合、「クラス”Ａ”の部品の出力ポート２」で検索を行うと、６つの候補プログラムが検索される。
【００７６】
図８は、流用プログラム候補抽出ステップにおける動作を説明する図である。図８（ａ）は、ステップＳ１１３１で検索される６つの候補プログラムを示している。後のステップでは、このうちのひとつを選択し、作成中プログラムに流用する。なお、図８（ａ）では、説明をわかりやすくするため、後に説明する優先度（この段階では流用回数と同じ）の高い順に候補プログラムを整列しているが、整列していなくてもよい。
【００７７】
次に検索された全ての候補プログラムの各々について、流用可能か否かをチェックする。プログラムの流用の可否は、作成中のプログラムの一部が候補プログラムの一部と同じ構造（同型）を含んでいるか否かで判断する。同じ構造を含んでいる場合、候補プログラムの残りの構造を作成中プログラムに反映することで、流用・統合がなされる。
【００７８】
そのため、候補プログラムごとに、部分プログラム抽出ステップＳ１１２で抽出された各々の部分プログラムとの組合せをチェックする。つまり、候補プログラムと部分プログラムの１対１の組合せごとに、流用の可否をチェックしていく。ここでは、候補プログラムとして、「クラス”Ａ”の部品の出力ポート２」を核とする６つの候補プログラムのうち、まず、Ｐｒｏｇｒａｍ５＿Ａ１２を選択した場合について説明する。
【００７９】
ステップＳ１１３２では、情報処理装置１００は、個々の部分プログラムとの組合せをチェックするのに先立ち、一時レコードをクリアする。一時レコードとは、処理中の情報を一時的に保持しておくもので、優先度、部分プログラム、部品間対応のフィールドを持つ。なお、”優先度”はステップＳ１１３４および流用プログラム選択ステップＳ１１４で、”部品間対応”はステップＳ１１３３の説明の際に、併せて説明する。
【００８０】
なお、詳しくは後述するが、流用プログラム候補抽出ステップＳ１１３の最後で上記フィールドに加えて流用プログラム候補を加えた流用プログラムレコードを用いる。そのため、ここでは一時レコードに流用プログラムフィールドを更に有するものとして説明を行う。
【００８１】
一時レコードのクリアは、各フィールドをクリアすることによって行う。ここでは、流用プログラムフィールドをＰｒｏｇｒａｍ５＿Ａ１２、優先度フィールドを”０”（またはそれ以下の値）とし、部分プログラムフィールドを「なし」、部品間対応フィールドを「なし」としておく。
【００８２】
ここでは、図４（ｂ−２）を参照して、まず、部分プログラム４１１を選択する。
【００８３】
ステップＳ１１３３では、情報処理装置１００は、候補プログラムが部分プログラムと同型のプログラムを包含するか否かをチェックする。ここで”同型”とは、部品のクラスや部品間のリンクによる接続状態が同一のことを表すものとする。
【００８４】
ただし、部分プログラムと候補プログラムは、別個のプログラムであるため、部品のクラスが同じであってもインスタンスが異なる。そのため、候補プログラムの流用可否は、部品のインスタンスそのものの比較ではなく、部品のクラスの比較、および部品のインスタンス間の接続状態の比較で判断する。そのため、候補プログラムと部分プログラム間の、部品インスタンスの対応関係を用いるとよい。
【００８５】
候補プログラムＰｒｏｇｒａｍ５＿Ａ１２と部分プログラム４１１においては、ＡｘとＡ１が対応する。これは、前述のとおり、検索キーとなるクラス”Ａ”に対応する部品がＡ１であることが、データベースの検索結果（部品の背景に網をかけている）から得られるためである。
【００８６】
図８（ｂ）は、候補プログラムと部分プログラムの部品間対応示している。部分プログラム４１１はＡｘのみから構成されるため、以上で部分プログラム４１１内のすべての部品と、候補プログラムＰｒｏｇｒａｍ５＿Ａ１２内の部品との対応が取れたことになる。これは、部分プログラム４１１と同型のプログラムが候補プログラムに包含されることを表している。
【００８７】
ステップＳ１１３４では、情報処理装置１００は、候補プログラムに対する優先度を算出する（優先度算出手段）。優先度とは後に説明するように、流用プログラム選択ステップＳ１１４にて、候補プログラムをユーザに提示する際に用いる指標である。ここでは、優先度は、流用プログラムが過去に流用された流用回数（頻度情報）と、部分プログラムに含まれるリンクの数を用いて算出する。
【００８８】
つまり、流用回数が多いプログラムほど再度流用される可能性が高いと考えられるためである。なお、流用回数は、プログラム候補をデータベースから検索する際に得られる。また、複雑な接続状態の構造を持ったプログラムが、異なるプログラムの一部となる可能性は低いと考えられるため、複雑度の指標として部分プログラムに含まれるリンクの数を用いているのである。
【００８９】
流用回数とリンクの数とに基づく優先度の算出方法は様々な方法が考えられるが、ここでは、次のような式を用いることにする。
【００９０】
優先度  ＝  流用回数×第１重み  ＋  部分プログラムに含まれるリンクの数×第２重み
ここでは、第１重みを”１”、第２重みを”１００００”とするが、これらの値に限定されるものではない。
【００９１】
部分プログラム４１１の場合、リンクの数が”０”なので、優先度の値は候補プログラムＰｒｏｇｒａｍ５＿Ａ１２の流用回数である”４”となる。
【００９２】
なお、優先度の他の計算式の例としては、流用プログラムとどれだけ一致しているかを考慮した次のようなものでもよい。いずれにせよ、流用回数と部分プログラムに含まれるリンクの数を用いて優先度を算出する。
【００９３】
優先度  ＝  流用回数×第１重み  ＋  （部分プログラムに含まれるリンクの数／流用プログラム候補に含まれるリンクの数）×第２重み
ステップＳ１１３５では、情報処理装置１００は、算出した優先度の値が一時レコードの優先度フィールドの値よりも大きいかどうかをチェックする。ここでは一時レコードの優先度フィールドの値は”０”であるため、ステップＳ１１３６に進む。もし優先度の値が一時レコードの優先度フィールドの値より大きくなければ、ステップＳ１１３６の実行をスキップする。
【００９４】
ステップＳ１１３６では、情報処理装置１００は、一時レコードの、優先度フィールドを”４”、部分プログラムフィールドを”プログラム４１１”、部品間対応フィールドを”Ａｘ⇔Ａ１”に更新する。
【００９５】
ここで、部分プログラム４１１に関する処理は終了し、次の部分プログラム４１２について、ステップＳ１１３３からの処理を繰り返す。
【００９６】
ステップＳ１１３３では、情報処理装置１００は、候候補プログラムＰｒｏｇｒａｍ５＿Ａ１２が、部分プログラム４１２と同型のプログラムを包含するか否かをチェックする。これにはさきほどと同様に候補プログラムと部分プログラム間の、部品インスタンスの対応関係を用いる。
【００９７】
まずＡｘとＡ１が対応する。図８（ｃ−１）は、この時点で部品間対応を示している。次に、図４（ｂ−２）のプログラム４１２を参照して、Ａｘからリンクを辿ると、Ａｘの入力ポート１とＣｘの出力ポート１が接続されている。そこで、対応する部品Ａ１の入力ポート１からリンクを辿ると、Ｃ１の出力ポート１と接続されている。図８（ｃ−１）の部品間対応を参照すると、ＣｘとＣ１との間にはまだ部品間対応はない。しかしともにクラス”Ｃ”であり、該リンクはどちらの部品にも出力ポート１で接続している。そこで、これらの部品間に対応を作る。図８（ｃ−２）は、この時点での部品間対応を示している。
【００９８】
以上で、部分プログラム４１２内すべての部品の対応がとれ、なおかつすべてのリンクを辿った。これを以て、候補プログラムＰｒｏｇｒａｍ５＿Ａ１２は、部分プログラム４１２と同型のプログラムを包含していると、判断できる。なお、ステップＳ１１３３における包含関係をチェックする際にリンクを辿る方法に関しては、任意の手法が利用可能であるが、例えば、Ａｘをルートノードとするツリー探索アルゴリズムを用いることができる。ツリー探索アルゴリズムは、一般によく知られた技術であるので、詳細については割愛する。
【００９９】
ステップＳ１１３４では、情報処理装置１００は、優先度を算出する。候補プログラムＰｒｏｇｒａｍ５＿Ａ１２の流用回数は”４”、部分プログラム４１２に含まれるリンクの数は”１”であるので、前述の式を用いると、優先度は”１０００４”と算出される。
【０１００】
ステップＳ１１３５では、情報処理装置１００は、算出した優先度と一時レコードの優先度とを比較する。ここでは、一時レコードの優先度フィールドである”４”と比べると、優先度の”１０００４”の方が大きい。そのため、ステップＳ１１３６で、一時レコードの、優先度フィールドを”１０００４”、部分プログラムフィールドを”プログラム４１２”、部品間対応フィールドを”Ａｘ⇔Ａ１”および”Ｃｘ⇔Ｃ１”に更新する。
【０１０１】
ここで、部分プログラム４１２に関する処理は終了し、図４（ｂ−２）の全ての部分プログラムの処理が終了したため、ステップＳ１１３８に進む。
【０１０２】
ステップＳ１１３８では、情報処理装置１００は、一時レコードを複製して出力レコード（流用プログラムレコード）を生成する。生成した出力レコードは後にステップＳ１１３９にて、流用プログラム候補抽出ステップＳ１１３の出力に含める処理を行う。図８（ｄ）は、生成した出力レコードを示している。
【０１０３】
以上により、候補プログラムＰｒｏｇｒａｍ５＿Ａ１２に関する処理が終わったので、次の候補プログラムＰｒｏｇｒａｍ３＿Ａ１２について、ステップＳ１１３２からの処理を繰り返す。処理の内容の多くは候補プログラムＰｒｏｇｒａｍ５＿Ａ１２に関する処理と同様であるため、以下では新たに説明が必要な箇所を中心に説明する。
【０１０４】
まず、部分プログラム４１１に対して処理を行うが、これは候補プログラムＰｒｏｇｒａｍ５＿Ａ１２に関する処理と同様であるので省略する。次に部分プログラム４１２について、ステップＳ１１３３の処理を行う。すなわち、候補プログラムＰｒｏｇｒａｍ３＿Ａ１２が部分プログラム４１２と同型のプログラムを包含するか否かをチェックする。
【０１０５】
プログラム４１２において、Ａｘの入力ポート１にリンクが接続しているが、候補プログラムＰｒｏｇｒａｍ３＿Ａ１２の対応する部品Ａ１にはリンクがない。そこで、「包含しない」という結果を得る。
【０１０６】
次にステップＳ１１３７で矛盾するリンクがあるか否かを調べる。矛盾するリンクとは、部分プログラム内のある部品（注目部品）に注目した際に、以下の３つの条件を満たすリンクを意味する。
【０１０７】
（１）対応する部品（対応部品）が候補プログラム内に存在する。
【０１０８】
（２）注目部品のあるポート（注目ポート）に接続しているリンク（注目リンク）に対応する、対応部品の対応ポート（対応ポート）に接続しているリンク（対応リンク）が存在する。
【０１０９】
（３）注目リンクの注目ポート側ではない部品・ポートと、対応リンクの対応ポート側ではない部品・ポート同士が対応しない。
【０１１０】
図９は、「矛盾するリンク」を説明する図である。図９（ａ）は、矛盾するリンクが無い場合の例を、図９（ｂ）は、後述する矛盾するリンクが有る場合の例を、それぞれ示している。
【０１１１】
ここでは、まず部分プログラム４１２の部品Ａｘ（注目部品）と、対応する候補プログラムＰｒｏｇｒａｍ３＿Ａ１２の部品Ａ１（対応部品）を見つける。次に、Ａｘとつながるリンクを探すと、Ａｘの入力ポート１と、Ｃｘの出力ポート１との間を接続しているリンク（注目リンク）が見つかる。対応部品Ａ１の入力ポート１を調べると、接続しているリンク（対応リンク）がない。つまり、ここでは矛盾するリンクはない。ここで部分プログラム４１２に関する処理は終了した。以上ですべての部分プログラムの処理が終了したため、ステップＳ１１３８に進む。
【０１１２】
このようにして、候補プログラムＰｒｏｇｒａｍ４＿Ａ１２、Ｐｒｏｇｒａｍ４＿Ａ２２、Ｐｒｏｇｒａｍ６＿Ａ２２に関する処理を同様に進めていく。候補プログラムＰｒｏｇｒａｍ６＿Ａ２２と部分プログラム４１２に関する処理においては、ステップＳ１１３３でのチェックの結果、候補プログラムは部分プログラムを包含しないため、ステップＳ１１３７にて矛盾するリンクのチェックを行う。
【０１１３】
まず部分プログラム４１２の部品Ａｘ（注目部品）と、対応する候補プログラムＰｒｏｇｒａｍ６＿Ａ２２の部品Ａ２（対応部品）を見つける。この対応は前述したようにデータベースからの検索結果に含まれており、図８（ａ）のＰｒｏｇｒａｍ６＿Ａ２２で網をかけてある（部品Ａ２）。次にＡｘとつながるリンクを探すと、Ａｘの入力ポート１（注目ポート）と、Ｃｘの出力ポート１との間を接続しているリンク（注目リンク）が見つかる。さらに、対応部品Ａ２の入力ポート１（対応ポート）を調べると、リンク（対応リンク）が見つかる。
【０１１４】
ここで注目リンクの注目ポート側ではないポートを見ると、「Ｃｘの出力ポート１」であるが、対応リンクの対応ポート側ではないポートは「Ｅ１の出力ポート１」である。
【０１１５】
ＣｘとＥ１間には対応関係はなく、部品のクラスもクラス”Ｃ”とクラス”Ｅ”であるため、対応関係を新たに持たせることもできない。これをもって、注目リンクが矛盾するリンクであると判断できる。
【０１１６】
矛盾するリンクがあった場合、ステップＳ１１３８を実行せずに、次の候補プログラムに関する処理を行う。そのため、ステップＳ１１３における出力には、候補プログラムＰｒｏｇｒａｍ６＿Ａ２２に関するレコードは含まれないことになる。
【０１１７】
なお、ステップＳ１１３７で矛盾するリンクであると判断した場合、候補プログラム自体を候補から外すのではなく、該部分プログラムの処理を中断した上で、該候補プログラムの優先度を落として、処理を続行してもよい。
【０１１８】
上記のように処理を進めていき、すべての候補プログラムに関する処理が完了すると、ステップＳ１１３８では、生成された出力レコード（流用プログラムレコード）を全て出力し（ステップＳ１１３９）、ステップＳ１１３を完了する。
【０１１９】
図１０は、流用プログラム候補抽出ステップによって出力される流用プログラムレコードの例を示す図である。なお、図１０では流用プログラムレコードを優先度順に整列しているが、整列していなくてもよい。
【０１２０】
＜流用プログラム選択ステップ（Ｓ１１４）＞
ステップＳ１１４では、情報処理装置１００は、ステップ１１３で抽出した流用プログラム候補を、優先度の高い順にユーザに提示し（提示手段）、ユーザからの選択を受け付ける（選択受付手段）。優先度の高い順にユーザに提示することにより、ユーザはより効率的に流用するプログラムを選択することが可能となる。
【０１２１】
図１１は、流用プログラム候補のユーザへの提示及びユーザによる選択の動作を説明する図である。ここでは、選択ポートから吹き出し状に広がるウィンドウ１１０１が表示され、流用プログラム候補１１０３１，１１０３２，１１０３３，１１０３４，１１０３５はこのウィンドウ内に表示される。
【０１２２】
流用プログラム候補内の部品のうち、対応部品は背景を網に、部品間対応がとれた部品は枠を太くして、作成中プログラム内の部品との対応をわかりやすく表示している。たとえば、流用プログラム候補１１０３２は部品Ａ２の背景を網に、部品Ａ２およびＣ１の枠を太く表示している。また、流用プログラム候補は優先度の高いものから順に並べられており、マウスポインタ１１０２によってマウスオーバーされた流用プログラム候補１１０３２は、大きさを大きく、境界線を太くして、他の候補よりも目立つように表示する。なお、プログラムの選択は、マウスオーバーしている流用プログラム候補の上で、マウスボタンのクリックを行うことによってなされ得る。
【０１２３】
なお、整列された流用プログラム候補のユーザへの具体的な提示方法および選択方法は様々な形態が利用可能である。図１２は、流用プログラム候補のユーザへの提示及びユーザによる選択の他の動作を説明する図である。
【０１２４】
図１２において、部品ＡｘおよびＣｘと、Ａｘ・Ｃｘ間のリンクはユーザが作成したプログラムに含まれるものである。部品間対応がとれた部品を太枠で表示している。破線で示した部品およびリンクは、流用プログラム候補を適用した場合に新規に作成されることを示している。
【０１２５】
流用プログラム候補のその他の情報は、バナー１２０１に表示される。たとえば図１２（ａ）では、流用プログラム候補の名前が”Ｐｒｏｇｒａｍ４＿Ａ２２”であり、全５候補中の２番目の候補であり、優先度が１０００２であることを示している。図１２（ｂ）では、それぞれ”Ｐｒｏｇｒａｍ３＿Ａ１２”、３番目の候補、優先度”３”であることを示している。流用プログラム候補の切り替えは、例えばユーザによるマウスのホイール操作によってなされ得、選択はクリックでなされ得る。ステップＳ１１４で、流用プログラム候補からひとつ、流用プログラムを選択すると、ステップＳ１１５の部品間対応の編集に進む。
【０１２６】
＜部品間対応編集ステップ（Ｓ１１５）＞
ステップＳ１１５では、情報処理装置１００は、ステップ１１４で選択した流用プログラムに対して、ユーザからの部品間対応の編集を受け付ける。図１３は、部品間対応編集ステップにおける編集操作の例を説明する図である。また、図１４は、部品間対応編集ステップにおける動作を説明する図である。なお、ステップＳ１１５を実現するユーザインターフェースは図１３で示したものに限定されるものではない。
【０１２７】
たとえばユーザの作成中プログラムが図１３（ａ）のようであった場合に、流用プログラム選択ステップＳ１１４で、流用プログラムとしてＰｒｏｇｒａｍ４＿Ａ２２（図１３（ｂ））を選択すると、図１４（ａ）の流用プログラムレコードが出力される。図１３（ｃ）は、図１４（ａ）の流用プログラムレコードをユーザの作成中プログラム画面に反映したものに相当する。
【０１２８】
図１３（ｃ）において、部品Ｃｘの入力ポート２とリンクで繋がる部品として、新規に作成する部品Ｂ１が提案されている。しかし、ユーザは、新たに部品を作成するのではなく、ユーザの作成中プログラム内にある既存部品Ｂｘを使用したいとする。こうした場合は、図１３（ｄ）に示すように、新規作成部品Ｂ１をマウスでドラッグし、部品Ｂｘの上でドロップする。このように新たに部品との対応が指示された場合には、図１４（ｂ）に示すように部品間対応を更新する。
【０１２９】
図１３（ｅ）は、部品間対応の更新に伴って、ユーザの作成中プログラム画面を更新した例を示している。ここでは、流用プログラム４＿Ａ２２内の部品Ｂ１の対応がとれたため、新規部品として提案した部品Ｂ１は、ユーザの画面上から削除されている。提案された新規作成部品から既存部品に対応を変更するのではなく、既存部品から既存部品、あるいは既存部品から新規作成部品に対応を変更する場合も同様である。
【０１３０】
たとえば、図１３（ｅ）のように、既存部品（Ｂｘ）に対応付けられている部品を、他の既存部品、あるいは新規作成部品に対応付けることを考える。この場合は、対応済み既存部品（Ｂｘ）をドラッグすると新規作成部品（Ｂ１）が現れるので（図１３（ｄ））、これを所望の既存部品上、または部品のないところにドロップする。もし部品のない場所にドロップした場合は、新規作成部品（Ｂ１）が現れる（図１３（ｃ））。
【０１３１】
なお、部品間対応の編集の終了は、たとえば、ユーザによるマウスボタンのダブルクリックにより指示されうる。もちろん、他の指示方法を用いてもよい。
【０１３２】
＜流用プログラム更新ステップ（Ｓ１１６）＞
ステップＳ１１６では、情報処理装置１００は、流用プログラムの流用回数を１増やしてデータベースを更新する。流用プログラムとしてＰｒｏｇｒａｍ４＿Ａ２２を選択した場合は、流用回数の”２”を１増やし”３”としてデータベースを更新する。
【０１３３】
＜独立部品生成・対応ステップ（Ｓ１１７）＞
ステップＳ１１７では、情報処理装置１００は、ユーザの作成プログラム内に部品を生成（インスタンス化）し、流用プログラム内の部品と対応をとる。たとえば図１４（ｂ）のような部品間対応が与えられた場合を考える。この場合、図１３（ｅ）のように、部品Ａ１，Ｃ２，Ｆ１の対応が取れていない。
【０１３４】
そこで部品Ａ１（クラス＝”Ａ”），Ｃ２（クラス＝”Ｃ”），Ｆ１（クラス＝”Ｆ”）に対応する部品Ａｙ，Ｃｙ，Ｆｘをユーザ作成プログラム内にインスタンス化する。さらに生成した部品と流用プログラム内の部品との対応をとる。これにより、流用プログラム内のすべての部品が、ユーザの作成プログラム内の部品と対応がとれることになる。
【０１３５】
図１４（ｃ）に更新された部品間対応を示す。この部品間対応を前述のユーザインターフェース方法を用いて提示した状態を図１３（ｆ）に示す。流用プログラムＰｒｏｇｒａｍ４＿Ａ２２（図１３（ｂ））のすべての部品が、ユーザの作成中プログラム内の部品と対応がとれていることがわかる。
【０１３６】
＜統合ステップ（Ｓ１１８）＞
ステップＳ１１８では、情報処理装置１００は、流用プログラム内のすべてのリンクを、ユーザの作成中プログラム内の部品間に反映させる。流用プログラム内のリンクは、対応するリンクがユーザの作成中プログラム内にあるかないかの２つの場合に分けて考えることができる。
【０１３７】
対応するリンクがあるもの（図１３（ｆ）の太実線のリンク）は、特に何もしなくてよい。一方、対応するリンクがないもの（図１３（ｆ）の破線リンク）は、対応する部品の対応ポート間に新たなリンクを生成する。
【０１３８】
以上により流用プログラムが、ユーザの作成中プログラムに統合（反映）されることになる。図１３（ｇ）は、統合後のユーザの作成中プログラムを示している。
【０１３９】
以上説明したとおり第１実施形態によれば、視覚プログラミングにおいて、より適切な流用プログラムをユーザに提示することが可能となる。特に、２つ以上の部品を配置・指定する必要なく、流用プログラムをユーザに提示することが可能となる。
【０１４０】
なお、各ステップで用いるデータに依存関係がない場合は、図２（ｂ）に示した実行順序に限定されることは無い。たとえば、流用プログラム更新（ステップＳ１１６）の前に独立部品生成・対応（ステップＳ１１７）を実行するよう構成しても良い。
【０１４１】
（第２実施形態）
第２実施形態では、「部品は置いたが、まだリンクを生成していない」という状況に対処可能とする形態について説明する。すなわち、第１実施形態の部分プログラム抽出（ステップＳ１１２）においては、ユーザが指定した部品からリンクを辿り、部分プログラムを抽出する。そのため、ユーザがプログラムの作成中に遭遇する「部品は置いたが、まだリンクを生成していない」という状況には対処できない。
【０１４２】
図１５は、第２実施形態に係る情報処理装置の動作を説明するフローチャートである。当該フローチャートは、上述の状況に対処すべく、図２（ｂ）の手順に対して後述する部分プログラム拡張ステップ（Ｓ１２１）を追加したものである。また、図１６は、部分プログラム拡張ステップ（Ｓ１２１）の動作を説明するフローチャートである。更に、図１７は、部分プログラム拡張ステップにおける動作を説明する図である。ここで、図１７（ａ）は、ユーザの作成中プログラムを示し、図１７（ｂ）は、部品間対応候補を例示的に示している。
【０１４３】
＜部分プログラム拡張ステップ（Ｓ１２１）＞
以下の説明では、ステップＳ１１３において図１０に示す５つの流用プログラムレコード１００１、１００２、１００３、１００４、１００５が出力される場合について説明する。ステップＳ１２１では、ここで得られた各流用プログラムレコードに対して順番に処理をしていく。
【０１４４】
まず流用プログラムレコード１００１に対して処理を行う。ステップＳ１２１１では、情報処理装置１００は、各流用プログラムレコードに対して最初に対応候補部品を抽出する。流用プログラムレコード１００１には部品間対応がとれた部品が記載されているが、追加で部品間対応をとる候補の部品を抽出する。ここでは、流用プログラム候補は、流用プログラムレコード１００１の流用プログラムフィールドを参照して、Ｐｒｏｇｒａｍ５＿Ａ１２である。また、流用プログラム候補内で部品間対応がとれていない部品は、Ｐｒｏｇｒａｍ５＿Ａ１２内の部品Ａ１、Ｃ１、Ｆ１のうち、流用プログラムレコード１００１の部品間対応に現れない、Ｆ１（クラス”Ｆ”）である。
【０１４５】
そのため、作成中プログラム（図１７（ａ））内で部品間対応がとれていない部品（Ｂｘ，Ａｙ，Ｃｙ）のうち、クラス”Ｆ”の部品を探すことになる。しかしそのような部品は存在しないため、流用プログラムレコード１００１に対する処理は終了し、次の流用プログラムレコード１００２に対する処理を行う。
【０１４６】
流用プログラム候補はＰｒｏｇｒａｍ４＿Ａ２２であり、流用プログラム候補内で部品間対応がとれていない部品はＡ１，Ｂ１，Ｃ２，Ｆ１の４つある。そこで作成中プログラム内で部品間対応がとれていない部品のうち、クラス”Ａ”、クラス”Ｂ”、クラス”Ｃ”、クラス”Ｆ”に該当する部品を探し、部品間対応候補とする（図１７（ｂ））。
【０１４７】
ステップＳ１２１２では、情報処理装置１００は、部分プログラム４１２内の部品の、リンクが接続されていないポート（未接続ポート）に対する部分プログラム候補を抽出する。具体的には、当該未接続ポートから、部品間対応候補の部品の未接続ポートに対して、仮にリンク（仮リンク）で接続したものを部分プログラム候補とする。ただし、仮リンクは矛盾しないものとする。
【０１４８】
図１８は、抽出された部分プログラム候補の例を示す図である。なお、破線のリンクが仮リンクである（仮接続設定手段）。さらに他の部分プログラム候補についても同様に、仮リンクを用いて部分プログラム候補を抽出していく。こうしてすべての部分プログラム候補を抽出する。もし、部分プログラム候補がひとつも抽出できなかった場合には、流用プログラムレコード１００２に対する処理は終了し、次の流用プログラムレコード１００３に対する処理を行う。
【０１４９】
以下のステップＳ１２１３以降では、得られた部分プログラム候補の各々と流用プログラム候補Ｐｒｏｇｒａｍ４＿Ａ２２との組合せから優先度を算出し、最も優先度の高い部分プログラム候補で流用プログラムレコード１００２を更新する。これらの一連の処理はステップＳ１１３（図７）とほぼ同様であるため、ここでは異なる部分を中心に説明する。
【０１５０】
ステップＳ１２１３では、情報処理装置１００は、一時レコードを流用プログラムレコード１００２で初期化する。ステップＳ１１３２では基準となる部分プログラムが「無い」状態であったため、一時レコードをクリアしたが、ステップＳ１２１３では、流用プログラムレコード１００２の部分プログラムを基準とする。以下では個々の部分プログラム候補について、流用プログラム候補Ｐｒｏｇｒａｍ４＿Ａ２２との組合せにおける優先度が次々とチェックされる。
【０１５１】
まず、一つ目の部分プログラム候補１８０１が選択される。ステップＳ１２１４では、情報処理装置１００は、ステップＳ１１３３と同様に部分プログラム候補が流用プログラム候補に包含されるかどうかをチェックする。この際、仮リンクは通常のリンクと同様なものとして、包含関係をチェックする。包含関係のチェックの具体的手順は、前述のステップＳ１１３３と同様であるので省略する。包含関係チェックの結果、「包含する」と判断された場合、ステップＳ１２１５で優先度を算出する。もし「包含しない」と判断した場合は、次のプログラム候補を選択し、ステップＳ１２１４に進む。
【０１５２】
ステップＳ１２１５では、情報処理装置１００は、ステップＳ１１３４と同様に優先度を算出する。ただし、優先度の算出には、たとえば次のような、仮リンクも考慮したものを用いる。
【０１５３】
優先度  ＝  流用回数×第１重み  ＋  部分プログラム候補に含まれるリンクの数×第２重み  ＋  部分プログラム候補に含まれる仮リンクの数×第３重み
流用プログラム候補抽出ステップＳ１１３で算出する優先度との一貫性を保つため、ここでは第１重み＝”１”、第２重み＝”１００００”、第３重み＝”１００”とする。ただし、ここで示した式および重みの値に限定されるものでは無い。ここでは、優先度を求める式により、優先度＝”１０１０２”と算出される。
【０１５４】
ステップＳ１２１６では、情報処理装置１００は、算出した優先度と一時レコードの優先度フィールドを比較する。これはステップＳ１１３５と同様である。その結果、優先度の値”１０１０２”は一時レコードの優先度フィールドの値”１０００２”よりも大きい。そのため、ステップＳ１２１７では、情報処理装置１００は、一時レコードの優先度フィールドを”１０１０２”に更新する。同様に、部分プログラムフィールドを部分プログラム候補１８０１、部品間対応フィールドを「Ａｘ⇔Ａ２」と「Ｃｘ⇔Ｃ１」と「Ｃｙ⇔Ｃ２」に更新する。なおステップＳ１２１７の処理はステップＳ１１３６と同様である。もしステップＳ１１３５で優先度が一時レコードの優先度フィールドよりも大きくない、と判断された場合には、ステップＳ１２１７の更新処理は行わない。
【０１５５】
以上の処理により部分プログラム候補１８０１に対する処理が終了する。そのため、次の部分プログラム候補１８０２の処理（ステップＳ１２１４〜Ｓ１２１７）を行う。部分プログラム候補の処理は既に説明したとおりであるので省略する。全ての部分プログラム候補（１８０１〜１８１３）に対して、ステップＳ１２１４〜Ｓ１２１７の処理を行う。
【０１５６】
図１９は、部分プログラム拡張ステップの詳細動作を説明する図である。図１９（ａ）において「部分プログラム候補」列はどの部分プログラム候補に対する処理を行っているかを示している。また、包含判断（Ｓ１２１４）、優先度（Ｓ１２１５）、優先度判断（Ｓ１２１６）の各列は各ステップでの結果を表す。また「一時レコード更新（Ｓ１２１７）」の各列は、各処理を終えた時点での一時レコードのフィールドの値である。なお、図１９（ａ）において”↑”はステップＳ１２１７が実行されなかったことを示す。
【０１５７】
以上、すべての部分プログラム候補の処理を終えた時点で、一時レコードの優先度フィールドは１０３０２、部分プログラムフィールドは１８１２となっていることがわかる。
【０１５８】
ステップＳ１２１８では、情報処理装置１００は、処理対象の流用プログラムレコード１００２を一時レコードで更新する。更新された流用プログラムレコード１００２を図１９（ｂ）に示す。流用プログラムレコード１００２の処理を終了し、次の流用プログラムレコード１００３の処理も同様に行う。こうしてすべての流用プログラムレコードに対して処理を終えたら、ステップＳ１２１の処理を終了する。なお、ステップＳ１２１８において、一時レコードを複製して部分プログラム拡張ステップ１１９の出力に追加するよう構成しても良い。
【０１５９】
以上説明したとおり第２実施形態によれば、誤った部分プログラムの拡張により本来必要な部分プログラムが候補から外れることを防ぐことができる。そのため「部品は置いたが、まだリンクを生成していない」という状況に対処することが可能となる。
【０１６０】
（第３実施形態）
第３実施形態では、部品間のデータの流れが「原則的な流れ」に逆行するか否かを併せて考慮する形態について説明する。
【０１６１】
すなわち、第２実施形態では流用プログラム候補内の未対応の部品に対応する部品をユーザの作成中のプログラム中から探し、部分プログラムを拡張した。しかし、たとえば先に部品を多数並べたあとで、プログラムの流用を行おうとした場合には、目的とする流用プログラム候補とは無関係な部品を用いて部分プログラムを拡張してしまう。その結果、目的とする流用プログラム候補の優先順位が低くなってしまい、流用作業自体が億劫になってしまうという問題が発生しうる。また、不要に流用プログラム候補の数が多くなり、処理負荷が非常に高くなった結果、流用プログラム候補の提示に時間がかかったり、過負荷によって処理続行が不可能になったりして、プログラム作成作業そのものに支障が出てしまう、という問題がある。
【０１６２】
そこで、第３実施形態では、具体的には、部品間のデータの流れが「原則的な流れ」に逆行する部分プログラムは候補から外すか、流用プログラム候補との間で算出される優先度を下げる。
【０１６３】
図２０は、動作の説明において、「データの原則的な流れ」を説明する図である。たとえば、図２０（ａ）のようなプログラムを作成する際に、図２０（ｂ−１）のように部品Ａｘ，Ｃｘを平面上に配置することはあっても、図２０（ｂ−２）のように配置することは稀である。そこで図２０（ｂ−２）のように、仮リンクのデータの流れがデータの原則的な流れに逆行するような場合、その仮リンクを含む部分プログラム候補をステップＳ１２１２の出力から除く。
【０１６４】
すなわち、図１（ａ）で説明したように、ここで説明に用いている部品は、左側に入力ポート、右側に出力ポートが配置される。入力ポートのデータが、処理によって何らかの変換が施されて出力ポートに現れると考えると、部品内ではデータは左から右に流れている。このような部品を用いてプログラムを作成する場合、多くのケースで左から右にデータが流れるように部品を配置する。この左から右への「原則的」なデータの流れに逆らうような部品配置はプログラムの見通しを悪くすると考えられる。
【０１６５】
データの流れの方向は、ステップＳ１２１２で部分プログラム候補を出力する際に、仮リンクの終点の水平座標から、始点の水平座標を減じた値（ｄ＿ｐｏｒｔ）の符号を調べることにより決定可能である。そして、座標差ｄ＿ｐｏｒｔが負の場合には部分プログラム候補としないようにすればよい。
【０１６６】
ただし、「データの原則的な流れに逆行する」とは、必ずしも「（図において）データが左方向に流れる」こととは一致しない。図２０（ｄ）は、「データの原則的な流れ」を示す他の例を示す図である。ここでは、部品Ａ１，Ａ２，Ａ３に対応するユーザの作成中のプログラム内の部品はプログラム作成画面内で垂直方向に並べても「データの原則的な流れに逆行する」わけではない。リンク２１１、２１２に限ってはデータが左に流れても構わないのである。
【０１６７】
こうした場合に対処するには、上述のステップＳ１２１２への追加処理に変えて、たとえばステップＳ１２１４の処理を変更する。ステップＳ１２１４では、部分プログラム候補が流用プログラム候補に包含されるかどうかをチェックするが、その際、右方向に流れている流用プログラム候補内のリンクに対応する仮リンクが左方向に流れている場合に、「包含しない」とすればよい。すなわち流用プログラム候補内で左方向に流れているリンクに関しては、仮リンクの方向をチェックしないよう制御する。
【０１６８】
なお「右方向に流れているリンク」とは、終点の水平方向座標から始点の水平方向座標を減じた値（座標位置の差）が正の値となるリンクのことである。また「左方向に流れているリンク」とは、座標差が負の値となるリンクのことである。
【０１６９】
たとえば、図２０（ｄ）の流用プログラムに部分プログラムが包含されるかどうかをチェックする場合、リンク２１１、２１２の２つのリンクに関しては、対応する仮リンクの方向によって「包含しない」と判断することはしない。しかし他のリンクに対応する仮リンクの場合、左向きに流れる仮リンクが一つでもあった場合には、「包含しない」と判断する。
【０１７０】
なお、ステップＳ１２１５で優先度を調整するよう構成してもよい。たとえば、図２０（ｃ）のｄ＿ｐｏｒｔの値が負であった場合、その値に重み（所定の正の値）を乗じたものを優先度に加える。こうすることで、レイアウトの都合で仮リンクが少し左側に流れてしまった場合であっても、部分プログラム候補が除外または優先度を大きく下げることはない。一方で大きく左側に流れている仮リンクは優先度を大きく下げるため、流用プログラム候補と無関係な部品が部分プログラム候補に含まれてしまう可能性を低く抑えられる。
【０１７１】
なお、たとえば「逆行仮リンクの数が２あるいは所定の値以上の場合に、部分プログラム候補から除外する」よう構成しても良い。
【０１７２】
なお、上述の説明では図１（ａ）で示したような、部品を流れるデータが左から右のものを想定して説明したが、部品の上側に入力ポートを、下側に出力ポートを配置する表記法もよく用いられる。この場合は上記説明において「左」を「上」に、「右」を「下」に読み替えればよい。
【０１７３】
以上説明したとおり第３実施形態によれば、部品間のデータの流れが「原則的な流れ」に逆行する部分プログラムを候補から外すか、流用プログラム候補との間で算出される優先度を下げる。これにより、より適切な流用プログラムを提示することが可能となる。
【０１７４】
（第４実施形態）
第４実施形態では、予めデータベースに登録されているプログラムの一部分のみを流用する実施形態について説明する。第１実施形態に従ってＰｒｏｇｒａｍ４＿Ａ２２を流用プログラムとして流用・統合したあとに、部品Ａ１および部品Ｂ１に対応する部品を削除することも出来る。ただし、不要な部品を削除しなければならない、という問題に加え、本来の流用目的プログラム２２０１ではないプログラム（Ｐｒｏｇｒａｍ４＿Ａ２２）の優先度を上げてしまう、という問題がある。
【０１７５】
図２１は、流用プログラムの部分プログラムを説明する図である。たとえば、Ｐｒｏｇｒａｍ４＿Ａ２２は何度か流用したために、データベースに登録されている。しかし、ユーザが流用したいのはＰｒｏｇｒａｍ４＿Ａ２２の一部分を構成する部分プログラム２２０１であるとする。
【０１７６】
そこで、第４実施形態では、流用プログラムＰｒｏｇｒａｍ４＿Ａ２２の部分プログラム２２０１を新たに流用プログラムとし、さらに次回以降にプログラム２２０１を流用プログラム候補として選択可能になるよう、プログラム２２０１をデータベースに登録する。
【０１７７】
図２２は、第４実施形態に係る情報処理装置の動作を説明するフローチャートである。当該フローチャートは、図２（ｂ）の処理の流れにこれらのステップを加えた処理の流れをに示す図である。なお、図２７に示すように、第２実施形態（図２（ｂ））に対して上述のＳ１３１及びＳ１３２を追加するよう構成しても良い。
【０１７８】
＜流用プログラム編集ステップ（Ｓ１３１）＞
ステップＳ１３１では、情報処理装置１００は、流用プログラム選択ステップＳ１１４で選択された流用プログラムの部分プログラムを新たな流用プログラムとする。ステップＳ１１４で、流用プログラムＰｒｏｇｒａｍ４＿Ａ２２を選択した状態が図１３（ｃ）であることは既に述べた。この状態でユーザは部分プログラム２２０１に相当する部分を指定する。たとえば、マウスを用いて前記部分プログラムに相当する部分に含まれる部品をクリックする。
【０１７９】
図２３は、流用プログラム編集ステップにおける編集操作の例を説明する図である。図２３（ａ）は、部品の周辺の色を変えることで指定した部品がわかるように、ユーザに提示した例である。図２３（ｂ）は、他の指定方法として、流用プログラムＰｒｏｇｒａｍ４＿Ａ２２を表示し、その上で部分プログラムの範囲を、マウスを用いて閉領域で指定する例をに示す。これらいずれの方法、または他の方法によって流用プログラムＰｒｏｇｒａｍ４＿Ａ２２内の部分プログラム２２０１を指定する。
【０１８０】
図２４は、流用プログラム編集ステップの動作を説明する図である。ここで、図２４（ａ）は、流用プログラム編集による修正前の一時プログラムを例示的に示している。また、図２４（ｂ）は、流用プログラムレコードを例示的に示している。
【０１８１】
流用プログラムの部分プログラム２５１（Ｐｒｏｇｒａｍ＿Ｔｍｐ）を一時的に生成し、入力レコード（流用プログラムレコード）の流用プログラムフィールドを当該プログラムで更新したものを出力する。なお、部品間対応がとれている部品が、流用プログラムの部分プログラムに含まれなかった場合には、後の参照時に無視されるため更新する必要はない。
【０１８２】
ステップＳ１１５では、情報処理装置１００は、ステップＳ１３１によって更新された流用プログラムレコードに対して前述した処理を行う。なお、ステップＳ１１５の後、再度、ステップＳ１３１によって流用プログラムの再編集を行ってもよい。ステップＳ１１５を経て、編集が終了すると、流用プログラム追加登録ステップＳ１１６によって更新された流用プログラムをデータベースに登録する。
【０１８３】
＜流用プログラム追加登録ステップ（Ｓ１３２）＞
図２５は、流用プログラム追加登録ステップ（Ｓ１３２）の動作を説明するフローチャートである。
【０１８４】
ステップＳ１３２１では、情報処理装置１００は、入力レコードの流用プログラムフィールドのプログラムが、流用プログラム編集ステップＳ１３１で更新された一時プログラムかどうかをチェックする。一時プログラムではなかった場合は、処理を終了する。一時プログラムであった場合は、ステップＳ１３２２に進む。
【０１８５】
ステップＳ１３２２では、情報処理装置１００は、一時プログラムおよび流用プログラムレコードの部品間対応を修正する。たとえば一時プログラム２５１（図２４（ａ））は、クラス”Ａ”のインスタンスとしてＡ２があるがＡ１はない。その場合、続くステップＳ１３２３で一時プログラム２５１がデータベースにあるか否かをチェックするが、その際にインスタンス名が異なると容易に検索ができないことがある。このようなデータベースを用いている場合は、登録する流用プログラム内の同じクラスのインスタンスは、一定の規則によって名前付けされているとよい。
【０１８６】
ここでは左側にあるインスタンスから順にＸ１，Ｘ２，．．．（クラス”Ｘ”のインスタンスの場合）と名前付けすることにする。一時プログラム２５１の場合、部品インスタンス”Ａ２”の名前を”Ａ１” と変更する。また名前が修正されたインスタンスＡ２に対応する、流用プログラムレコード内の部品間対応フィールドも修正する。
【０１８７】
図２６は、流用プログラム追加登録ステップの動作を説明する図である。図２６（ａ）は、修正後の一時プログラムを示し、図２６（ｂ）は、流用プログラムレコードを示している。
【０１８８】
なお、ステップＳ１３２２で説明した処理は、データベースからのプログラム検索を可能にするための一例であり、たとえばデータベースからのプログラム検索にクラスを用いるように工夫する等、他の方法でも構わない。
【０１８９】
ステップ１３２３では、情報処理装置１００は、一時プログラムがデータベースに登録されているかどうかをチェックする。データベースに一時プログラムが登録されていた場合には、データベース内のプログラムで流用プログラムレコードの流用プログラムフィールドを更新する。一方、登録されていなければステップＳ１３２４で、新しい名前で一時プログラムをデータベースに新規登録する。なお新規登録の際には流用回数は”０”と設定するとよい。そして流用プログラムレコードの流用プログラムフィールドをデータベースに登録したプログラム（新しい名前）で更新する。
【０１９０】
以上説明したとおり第４実施形態によれば、予めデータベースに登録されているプログラムの一部分のみを流用プログラムとして登録する。これにより、プログラムの一部分を流用・統合したい場合に、プログラムの全部を統合した後に不要な部分を削除するというような煩雑な操作を低減することが可能となる。
【０１９１】
（その他の実施例）
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
2015099564.tif 000003
【図２】
2015099564.tif 000004
【図３】
2015099564.tif 000005
【図４】
2015099564.tif 000006
【図５】
2015099564.tif 000007
【図６】
2015099564.tif 000008
【図７】
2015099564.tif 000009
【図８】
2015099564.tif 000010
【図９】
2015099564.tif 000011
【図１０】
2015099564.tif 000012
【図１１】
2015099564.tif 000013
【図１２】
2015099564.tif 000014
【図１３】
2015099564.tif 000015
【図１４】
2015099564.tif 000016
【図１５】
2015099564.tif 000017
【図１６】
2015099564.tif 000018
【図１７】
2015099564.tif 000019
【図１８】
2015099564.tif 000020
【図１９】
2015099564.tif 000021
【図２０】
2015099564.tif 000022
【図２１】
2015099564.tif 000023
【図２２】
2015099564.tif 000024
【図２３】
2015099564.tif 000025
【図２４】
2015099564.tif 000026
【図２５】
2015099564.tif 000027
【図２６】
2015099564.tif 000028
【図２７】
2015099564.tif 000029
【図２８】
2015099564.tif 000030