(57)【特許請求の範囲】
【請求項１】
分岐先を複数に振り分ける分岐部を生成するための複数の命令と、各分岐部における各分岐先を、下位の分岐部または具体的な処理の何れか一方に指定する分岐条件とが記述された分岐ルールコードを格納した記憶手段と、
複数の値の配列よりなる複合条件が与えられた場合に、上記分岐ルールコードに基づいてメモリ上に生成された、複数の分岐部が階層状に配置された木構造中の各分岐部に対して、複合条件の値を配列の要素順に上位の分岐部から順に適用し、各分岐部の分岐条件に合致する分岐先を辿ることにより、具体的な処理を特定する処理決定手段と、
特定された処理を実行する処理実行手段と、
を備えたことを特徴とするプログラム実行システム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はプログラム実行システムに係り、特に、分岐処理のためのif文やswitch文を用いることなく、必要な分岐処理を実行可能なシステムに関する。
【背景技術】
【０００２】
これまで、コンピュータに複雑な分岐処理を実行させるためには、いわゆるif文やelse if文、switch文を用いてソースコードを記述する必要があった。図１４はその一例を示すものであり、以下の分岐処理が規定されている。
(1) 分岐条件であるx,y,zの値がそれぞれ1,20,100である場合には、αの入力に対してprocessAの処理を実行し、その処理結果であるβの値が０よりも大きい場合には、βを入力としてprocessAAの処理を実行し、γを出力する。
(2) 分岐条件であるx,y,zの中、x,yの値がそれぞれ1,30である場合には、zの値を問わずαの入力に対してprocessBの処理を実行し、その処理結果であるβの値が０よりも大きい場合には、βを入力としてprocessBBの処理を実行し、γを出力する。
(3) 上記以外の場合には、αの入力に対してprocessXの処理を実行し、その処理結果であるβの値が０よりも大きい場合には、βを入力としてprocessXXの処理を実行し、γを出力する。
【非特許文献１】C#によるプログラム入門／条件分岐［平成１８年７月１５日検索］インターネットURL:http://ufcpp.net/study/csharp/st_branch.html
【発明の開示】
【発明が解決しようとする課題】
【０００３】
上記のようにif文等を用いることにより、分岐条件に応じてコンピュータの処理を切り替えることが可能となる利点があるが、その一方で同じプログラム中に分岐のルールと処理ロジックが混在する結果となるため、分岐条件が上記x,y,zのように複数の値の組み合わせで与えられる場合（複合条件）や、分岐の包含関係が繰り返されてネスト構造が深化する場合などにはプログラムの動作を把握することが困難となり、プログラムの保守作業の非効率化やプログラムの品質低下の要因ともなっていた。また、大規模システムにおいては、同一の分岐ルールが複数の箇所で繰り返されることがあるが、これまでは当該分岐ルールがそれぞれの箇所に重複して記述されていたため、プログラム全体を通して一元管理ができないという問題もあった。
【０００４】
この発明は、コンピュータの分岐処理に纏わる従来の上記問題を解決するために案出されたものであり、ソースコード中にif文やswitch文等を用いた分岐ルールと処理ロジックを混在させることなく、所望の分岐条件に基づいてコンピュータの処理を複数に振り分け可能であり、分岐ルールの一元管理も可能なシステムを実現することを目的としている。
【課題を解決するための手段】
【０００５】
上記の目的を達成するため、請求項１に記載したプログラム実行システムは、分岐先を複数に振り分ける分岐部を生成するための複数の命令と、各分岐部における各分岐先を、下位の分岐部または具体的な処理の何れか一方に指定する分岐条件とが記述された分岐ルールコードを格納した記憶手段と、複数の値の配列よりなる複合条件が与えられた場合に、上記分岐ルールコードに基づいてメモリ上に生成された、複数の分岐部が階層状に配置された木構造中の各分岐部に対して、複合条件の値を配列の要素順に上位の分岐部から順に適用し、各分岐部の分岐条件に合致する分岐先を辿ることにより、具体的な処理を特定する処理決定手段と、特定された処理を実行する処理実行手段とを備えたことを特徴としている。
【発明の効果】
【００１２】
請求項１に記載したプログラム実行システムにあっては、複数の分岐条件と分岐後の処理内容との対応関係が分岐ルールコードにまとめて記述されており、処理決定手段が入力された分岐条件をこの分岐ルールコードに当てはめて分岐後の処理内容を特定し、この結果に基づいて具体的処理が実行される仕組みを備えている。この結果、処理ロジックと分岐ルールを、ソースコードの段階で明確に分離できるようになり、従来のようにソースコード中に処理ロジックとif文やswitch文からなる分岐ルールを混在させる場合に比べ、分岐ルールの把握が容易となり、保守作業の効率化や品質の維持・向上が可能となる。
【発明を実施するための最良の形態】
【００１８】
図１は、この発明に係るプログラム実行システム10の機能構成を示すブロック図であり、処理内容決定部12と、処理実行部14と、分岐ルールを記述した分岐ルールコード16とを備えている。上記の処理内容決定部12及び処理実行部14は、コンピュータのCPUが、専用のプログラムに従って必要な処理を実行することによって実現される。また、上記分岐ルールコード16は、コンピュータのハードディスクに格納されている。
【００１９】
図２の(a)は、このシステム10全体の処理の流れを制御するシナリオプログラムの一例を示すものであり、以下の処理ロジックが規定されている。
(1) 分岐条件の配列を管理するための「Object[]」を初期化する。
(2) ディシジョンツリー（decisionTree）を取得する。
(3) 入力αに基づいてメインプロセスを実行し、βを出力する。
(4) βが０より大きい場合には、入力βに基づいてオプションプロセスを実行し、γを出力する。
【００２０】
図３は、分岐パターンの一例を示すテーブルであり、分岐条件がＸ（１または２）、Ｙ（20、30または50）、Ｚ（０、50または100）の３桁の値の組み合わせで与えられる場合に、実行されるべき処理の内容が「結論」として規定されている。ここで例えば、「Ｘ＝１、Ｙ＝20、Ｚ＝100」の複合条件が与えられた場合、コンピュータは「ProcessA、ProcessAA」の処理を実行すべきこととなる。
【００２１】
図４は、図３の分岐パターンから分岐ルールを抽出し、木構造として階層表現した模式図である。この第１の分岐ルールによれば、まず第１の分岐部において分岐条件配列の最初の桁であるＸの値が１か否かが判断され、１以外の場合には即座に結論である「ProcessX_XX」が導かれる。これは、図３のテーブルにおいて、Ｘの値が１以外の場合（２の場合）には結論が全て「ProcessX_XX」となっていることに対応している。これに対し、Ｘの値が１の場合には、第２の分岐部において次の桁であるＹの値が20か30か、それら以外かが判断され、30の場合には結論「ProcessB_BB」が即座に導かれる。これは、図３のテーブルにおいて、Ｘの値が１でＹの値が30の場合には、Ｚの値にかかわらず全て結論「ProcessB_BB」に関連付けられていることに対応している。
【００２２】
また、Ｙの値が20及び30以外の場合には、結論「ProcessX_XX」が導かれる。これは、図３のテーブルにおいて、Ｘの値が１でＹの値が20及び30以外の場合（50の場合）には、Ｚの値にかかわらず全て結論「ProcessX_XX」に関連付けられていることに対応している。これに対し、Ｙの値が20の場合には、第３の分岐部において次の桁であるＺの値が100かそれ以外かが判断され、100の場合には結論「ProcessA_AA」が導かれ、100以外の場合には結論（ProcessX_XX）が導かれる。これは、図３のテーブルにおいて、Ｘの値が１、Ｙの値が20の場合、Ｚの値が100の場合にのみ「ProcessA_AA」に関連付けられており、Ｚの値が０及び50の場合には結論「ProcessX_XX」に関連付けられていることに対応している。このように、第１の分岐ルールは予め想定される分岐パターン（分岐条件と分岐結果との組合せ）に基づき、効率的に結論に到達するための分岐ロジックを体現したものである。
【００２３】
図２の(b)は、第１の分岐ルールに対応した分岐ルールコードを示すものであり、(1) 〜(5)のコードは図４の(1) 〜(5)の結論にそれぞれ対応している。この分岐ルールコードにおける「DecisionTree」は、第１の分岐ルールにおける各分岐部を実現するためのプログラム部品を意味しており、第１行目の「new DecisionTree ()」によって第１の分岐部が生成され、そこに与えられたＸの値が「１」であれば第３行目の「new DecisionTree()」によって第２の分岐部が生成され、そこに与えられたＹの値が「20」であれば第11行目の「new DecisionTree()」によって第３の分岐部が生成されることが記述されている。このように、分岐ルールコードにおいては、「new DecisionTree」を各レベルにおいて再帰的に呼び出すことにより、図４に示した第１の分岐ルールの木構造を生成する旨が規定されている。
【００２４】
図５は処理プログラムの一例を示すものであり、(d-1)はProcessA_AAに、(d-2)はProcessB_BBに、(d-3)はProcessX_XXにそれぞれ対応している。また、図２の(c)はjava言語特有のインターフェイスを示しており、シナリオプログラム18において抽象的に記述されたメインプロセス及びオプションプロセスを、具体的なProcessA_AA、ProcessB_BB、ProcessX_XXに繋げる役割を果たしている。
【００２５】
以下、図６のフローチャートに従い、このシステム10の処理手順を説明する。まず事前に、シナリオプログラム及び分岐ルールコード16がメモリにロードされると共に、処理内容決定部12及び処理実行部14の領域がメモリ上に確保される（Ｓ10〜Ｓ14）。このＳ10〜Ｓ14の処理が一旦実行された後は、その状態がメモリ上にキャッシュされるため、以下の処理が繰り返される度に再実行される必要はない。
【００２６】
つぎに、シナリオプログラムが実行されると（Ｓ16）、上記処理内容決定部12をメモリから取り出す（Ｓ18）。この際、生成済の分岐ルールコード16もメモリから同時に取り出される（Ｓ20）。つぎに、キーボード等の入力装置を介して分岐条件x,y,zが入力されると（Ｓ22）、「Object[]」の領域がメモリ上に確保され、上記の条件値が代入される（Ｓ24）。つぎに処理内容決定部12は、Object[]に格納された条件値を分岐ルールコード16に記述された分岐ルールに当てはめ、実行すべき処理プログラムを特定する（Ｓ26）。ここで例えば、「1,20,100」が分岐条件として与えられると、処理内容決定部12はProcessA_AAを処理内容として特定する。この際、上記Object[]内においては、x,y,zそれぞれの配列における順序が保持されているため、処理内容決定部12は「1,20,100」を「X=1, Y=20, Z=100」と正しく認識することができる。
【００２７】
以上の結果、図４(d-1)の処理プログラムに対応した処理実行部14がメモリから取り出され（Ｓ28）、必要な処理を実行する。具体的には、コンピュータのキーボードから入力されたαに基づいてメイン処理（ProcessA）を実行し、βを出力する（Ｓ30）。つぎにシナリオプログラムは、このβが０よりも大きいか否かを判定し（Ｓ32）、Noの場合にはそのままβを処理結果として外部に出力させる（Ｓ34）。これに対しYesの場合、シナリオプログラムはβを入力値として処理実行部14に与えてオプション処理（ProcessAA）を実行させ、最終的な処理結果であるγを外部に出力させる（Ｓ36）。
【００２８】
図７は、他の分岐ロジックが規定された第２の分岐ルールを示すものであり、図８はそれをコーディングした分岐ルールコードを示している。この第２の分岐ルールにおいては、まず条件Ｘの値が１か否かを判断し、１以外の場合には即座に結論（ProcessY_YY）が導かれる。これに対し、Ｘの値が１の場合には、Ｙの値が20か30か、それ以外かを判断し、30の場合には結論（ProcessD_DD）が導かれる。また、Ｙの値が20及び30以外の場合には、結論（ProcessY_YY）が導かれる。これに対し、Ｙの値が20の場合には、Ｚの値が100かそれ以外かを判断し、100の場合には結論（ProcessC_CC）が導かれ、100以外の場合には結論（ProcessY_YY）が導かれる。すなわち、この第２の分岐ルールは、分岐結果として実行される処理が異なるだけであり、分岐条件自体は第１の分岐ルールと等しい。
【００２９】
このような場合、第１の分岐ルール及び第２の分岐ルールの共通部分を抽出・規定した汎用的な分岐ルールコードをを準備し、分岐結果である具体的な処理のセットを切り替えるように構成すれば、一旦記述した分岐ルールコードの再利用が可能となり、プログラミングの効率化に資することとなる。図９はその一例を示すものであり、(a)は分岐ルールコードにおける結論の処理が記述されるべき箇所に１〜３のインデックスが設定された汎用的な第１の分岐ルールコードを示しており、(b)及び(c)は各インデックスに対応する具体的な処理が列記された第２の分岐ルールコードを示している。
【００３０】
この場合、処理内容決定部12は、第２の分岐ルールコードを参照して対応の第１の分岐ルールコードを取得し、そこに記述された１〜３のインデックスに第２の分岐ルールコードに記述された対応の処理プログラムを補充することにより、分岐ルールコードを完成させる。後は、この分岐ルールコードに分岐条件であるx,y,zを当てはめることにより、具体的な処理プログラムが特定されることとなる。
【００３１】
上記においては、分岐条件全体を再利用する例について説明したが、分岐ルールに含まれる一部の分岐部を再利用することも可能である。例えば、図１０に示すように、第１の分岐ルールにおける第３の分岐部（Ｚの値が100の場合にProcessA及びProcessAAを指定し、Ｚの値が100以外の場合にProcessX及びProcessXXを指定する）と同じ機能を備えた分岐部σが、他の分岐ルール中に既に存在している場合、図１１に示すように、分岐ルールコード中において分岐部σを示すコード「subTreeσ」を記述し、分岐部σを引用することにより、新たに第３の分岐部について定義する作業を省略することができる。
【００３２】
図１２は、分岐ルールコードの他の構成例を示すものであり、図１３に示す第３の分岐ルールに対応している。上記においては、分岐条件を構成する値の組合せと結論の組合せからなる分岐パターンを分析し、これから木構造を備えた分岐ルールを抽出した後、それに合わせて分岐ルールコードをコーディングする例を示したが、第３の分岐ルール（図１３）のように分岐ロジックが複雑化すると、そのコーディング作業が大きな負担となる。そこで、図１２に示すように、分岐ルールを行列構造でコーディングする方法を導入することにより、分岐ルールをより直感的にコーディングすることが可能となる。
【００３３】
この分岐ルールコードの場合、横方向に分岐条件を構成する各桁の値及び当該分岐条件に対応する処理が記述されている。また、縦方向には、複数の分岐条件が各桁の値に応じて昇順に整列配置されている。
【００３４】
この場合、分岐条件を構成する各桁毎に値を設定していくわけであるが、一つ前の行と同じ値については記述を省略することができ、値が変わる場合のみ新しい値を明示する。また、分岐条件は、配列の順番が先のものが上位概念を構成し、順番が後になる程下位概念を構成している。そして、各桁毎に具体的な値を設定していく際に、「その他の値」を設定する場合には「DecisionTree.DEFAULT」の値が設定され、ある桁までで結論に到達できる場合には、後続の桁について「DecisionTree.ANY」の値が設定され、具体的な値の記述が省略される。
【００３５】
例えば、図１３の分岐ルールの場合には、分岐条件の最初の桁が「１」「２」「３」以外の場合には即座に結論である「処理Ｋ」が導かれるため、設計者は図１２の行列において最初の桁に「DecisionTree.DEFAULT」を設定し、それ以降の桁に「DecisionTree.ANY」を設定し、結論部分に「K」を記述すれば足りる。これに対し、図１３の処理Ａに到達するためには、分岐条件として「1,10,100,1000」の配列が揃う必要があるため、設計者は図１０の行列において"1"、"10"、"100"、"1000"を分岐条件の各桁に設定し、結論部分に"A"を記述することとなる。
【００３６】
分岐ルールコードが上記のように行列構造によって与えられた場合、処理内容決定部12は、記述が省略されている桁に値を補って分岐ルールを完成させた後、入力される分岐条件の配列をこの分岐ルールに照らして具体的な結論を特定する。そして、処理実行部14は、この結論に対応した具体的な処理を実行する。
【００３７】
上記のように、このシステム10によれば、分岐ルールが分岐ルールコードにまとめて規定され、処理ロジックを規定するシナリオプログラムや処理プログラムと分離されているため、if文やswitch文を用いて処理ロジックと分岐ルールとを混在させる場合に比べてソースコードの記述が簡素化される。この結果、プログラム全体の動作を正確に把握することが可能となり、保守作業の容易化が実現でき、改修に際してプログラムの品質が低下することを防止できる。
【図面の簡単な説明】
【００３８】
【図１】この発明に係るプログラム実行システムの機能構成を示すブロック図である。
【図２】シナリオプログラム、分岐ルールコード、インターフェイスの一例を示す説明図である。
【図３】分岐ルールの元になる分岐パターンの一例を示すテーブルである。
【図４】第１の分岐ルールを示す説明図である。
【図５】分岐後に実行される処理プログラムの一例を示する説明図である。
【図６】このシステムの処理手順を示すフローチャートである。
【図７】第２の分岐ルールを示す説明図である。
【図８】第２の分岐ルールに対応した分岐ルールコードを示す説明図である。
【図９】第１の分岐ルールコード及び第２の分岐ルールコードを示す説明図である。
【図１０】既存の分岐部を再利用する例を示す説明図である。
【図１１】既存の分岐部を再利用する場合の分岐ルールコードを示す説明図
【図１２】行列構造の分岐ルールコードを示す説明図である。
【図１３】第３の分岐ルールを示す説明図である。
【図１４】従来のソースコードの一例を示す説明図である。
【符号の説明】
【００３９】
10 プログラム実行システム
12 処理内容決定部
14 処理実行部
16 ディシジョンツリー
x,y,z 分岐条件
α 入力
β 出力／入力
γ 出力
【図１】
0005117029.tif 000002
【図２】
0005117029.tif 000003
【図３】
0005117029.tif 000004
【図４】
0005117029.tif 000005
【図５】
0005117029.tif 000006
【図６】
0005117029.tif 000007
【図７】
0005117029.tif 000008
【図８】
0005117029.tif 000009
【図９】
0005117029.tif 000010
【図１０】
0005117029.tif 000011
【図１１】
0005117029.tif 000012
【図１２】
0005117029.tif 000013
【図１３】
0005117029.tif 000014
【図１４】
0005117029.tif 000015