JP2016024794A - プログラム作成装置 - Google Patents
プログラム作成装置 Download PDFInfo
- Publication number
- JP2016024794A JP2016024794A JP2014151235A JP2014151235A JP2016024794A JP 2016024794 A JP2016024794 A JP 2016024794A JP 2014151235 A JP2014151235 A JP 2014151235A JP 2014151235 A JP2014151235 A JP 2014151235A JP 2016024794 A JP2016024794 A JP 2016024794A
- Authority
- JP
- Japan
- Prior art keywords
- processing
- component
- unit
- program
- storage
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
【課題】 データフローの経験が乏しいオブジェクト指向経験者のデータフローでのプログラム開発効率が落ちないようにする装置を提供する。【解決手段】 データフロープログラムを作成するプログラム作成装置であって、データフロープログラムを構成する処理部品がいずれの記憶手段に対してデータの読み書きをするかを定める特定手段を備える。【選択図】 図1
Description
本発明はプログラム作成装置に関し、特にデータフロープログラムの作成装置に関する。
種々のアルゴリズムを実現するプログラムの開発手法のひとつとして、データフロープログラミングが知られている。データフロープログラミングはデータの流れ(データフロー)に注目したプログラム開発手法であって、データフロー図(DFD;DataFlow Diagram)を用いてグラフィカルにプログラミングすることが多い。
DFD等で表されたデータフロープログラムは本質的に並列処理である。このため、マルチコアシステムやメニーコアシステムに適しており、さらにはプロセッサを持たないFPGA(field programmable gate array)やASIC(application specific integrated circuit)といったハードウェアシステムに対しても適している。
DFD等で表されたデータフロープログラムは本質的に並列処理である。このため、マルチコアシステムやメニーコアシステムに適しており、さらにはプロセッサを持たないFPGA(field programmable gate array)やASIC(application specific integrated circuit)といったハードウェアシステムに対しても適している。
しかしながらデータフロープログラミングは大規模プログラム開発においては、複雑になりがちであり、開発効率や保守性に問題があると指摘する声もある。
一方、オブジェクト指向プログラミングは大規模プログラム開発に向いているとされ、現在のプログラム開発手法の主流である。そのためよく知られたアルゴリズムやロジックに関しては、ソースコードやライブラリといった形で入手可能であり、最新のアルゴリズムに関しても論文発表と同時に入手可能となることが多い。
しかしオブジェクト指向によって効率的な並列処理を実現するためには、プログラム開発者に高いプログラム設計スキルが必要とされる。
一方、オブジェクト指向プログラミングは大規模プログラム開発に向いているとされ、現在のプログラム開発手法の主流である。そのためよく知られたアルゴリズムやロジックに関しては、ソースコードやライブラリといった形で入手可能であり、最新のアルゴリズムに関しても論文発表と同時に入手可能となることが多い。
しかしオブジェクト指向によって効率的な並列処理を実現するためには、プログラム開発者に高いプログラム設計スキルが必要とされる。
現在、組込機器からスーパーコンピュータまで、幅広い分野でプロセッサのマルチコア/マルチプロセッサ化が進行しており、並列処理に適したデータフロープログラミングの重要性がますます高まってきている。
このような状況において、新規に開発するアルゴリズムの並列処理検討を早期に行うには、プログラム開発手法としてデータフローを基本とした上で、既存資産や最新アルゴリズムの流用、オブジェクト指向での設計経験・スキルの活用を行うことが重要となる。
特に開発者の多くがデータフローの考え方に馴染めていない現状では、複雑な部分は慣れているオブジェクト指向で設計・作成し、それらをオブジェクト指向の考えでもってデータフロープログラム構成部品として利用できる仕組みが必要である。
このような状況において、新規に開発するアルゴリズムの並列処理検討を早期に行うには、プログラム開発手法としてデータフローを基本とした上で、既存資産や最新アルゴリズムの流用、オブジェクト指向での設計経験・スキルの活用を行うことが重要となる。
特に開発者の多くがデータフローの考え方に馴染めていない現状では、複雑な部分は慣れているオブジェクト指向で設計・作成し、それらをオブジェクト指向の考えでもってデータフロープログラム構成部品として利用できる仕組みが必要である。
オブジェクト指向を構成する概念にはいくつかあるが、以下ではカプセル化、特にデータ隠蔽化についてのみ考える。具体的には、以下の性質である。
オブジェクトは状態を持ち、その状態が意味するところはオブジェクト外部からは知りえない。
オブジェクトの状態の一部または全部を取得・変更する場合は原則としてメソッド(メンバ関数)を通して行う。
オブジェクトは状態を持ち、その状態が意味するところはオブジェクト外部からは知りえない。
オブジェクトの状態の一部または全部を取得・変更する場合は原則としてメソッド(メンバ関数)を通して行う。
データフローとオブジェクト指向に関連した特許文献として、特許文献1および特許文献2があるが、いずれもDFDからオブジェクトの抽出を行うものであり、オブジェクト指向の資産や考え方をデータフロープログラミングの下で扱うものではない。また、DFD記述に関してもオブジェクト指向との親和性のために拡張された部分はない。
データフローにオブジェクト指向の考え方を導入した実例としては、LabVIEW(National Instruments社製のシステム開発ソフトウェア)がある。LabVIEWではメンバーVIと呼ぶ、C++のメンバー関数に相当する処理部品があり、メンバーVIには処理データの入力・出力の他にメンバーVIが所属するオブジェクトデータの入力および出力が1つずつ設けられている。
これはオブジェクトそのものもデータの1つと考え、メンバーVIの処理によってオブジェクトの状態の一部または全部が変更され、変更された状態を持つ新たなオブジェクトが出力される、という考え方である。
データフローにオブジェクト指向の考え方を導入した実例としては、LabVIEW(National Instruments社製のシステム開発ソフトウェア)がある。LabVIEWではメンバーVIと呼ぶ、C++のメンバー関数に相当する処理部品があり、メンバーVIには処理データの入力・出力の他にメンバーVIが所属するオブジェクトデータの入力および出力が1つずつ設けられている。
これはオブジェクトそのものもデータの1つと考え、メンバーVIの処理によってオブジェクトの状態の一部または全部が変更され、変更された状態を持つ新たなオブジェクトが出力される、という考え方である。
特許文献1および特許文献2は、いずれもDFDからオブジェクトの抽出を行うものであり、プログラム開発手法としてデータフローを基本とした上で、オブジェクト指向の資産の流用やオブジェクト指向での設計経験の活用を促進するものではない。
また非特許文献1では“オブジェクトそのものをデータの1つとして捉える”という考え方が開示されている。しかし、この考え方は、“メンバー関数(メソッド)にはオブジェクトをデータとして与えない”というC++やJava(登録商標)を始めとする多くのオブジェクト指向言語やUML(Unified Modeling Language)による表記と一致しない。
また非特許文献1では“オブジェクトそのものをデータの1つとして捉える”という考え方が開示されている。しかし、この考え方は、“メンバー関数(メソッド)にはオブジェクトをデータとして与えない”というC++やJava(登録商標)を始めとする多くのオブジェクト指向言語やUML(Unified Modeling Language)による表記と一致しない。
そのため、データフローの経験が乏しいオブジェクト指向経験者にとっては、考えたことがそのまま記述できないため、プログラム開発効率が落ちてしまう、という課題があった。
さらに作成されたデータフロープログラムには、入出力データとしてのオブジェクトが多く含まれる。それがデータフローの経験が乏しいオブジェクト指向経験者による、プログラムからアルゴリズムを理解する際の妨げとなり、プログラムの再利用性が上がらなかった、という課題があった。
さらに作成されたデータフロープログラムには、入出力データとしてのオブジェクトが多く含まれる。それがデータフローの経験が乏しいオブジェクト指向経験者による、プログラムからアルゴリズムを理解する際の妨げとなり、プログラムの再利用性が上がらなかった、という課題があった。
さらに非特許文献1の“オブジェクトそのものをデータの1つとして捉える”という考え方は、作成されたデータフロープログラムには、入出力データとしてのオブジェクトが多く含まれるため、プログラムの可読性が低かった、という課題があった。
以上の課題を解決するため、本発明のプログラム作成装置は、
データフロープログラムを作成するプログラム作成装置であって、
前記データフロープログラムを構成する処理部品がいずれの記憶手段に対してデータの読み書きをするかを定める特定手段を備えることを特徴とする。
データフロープログラムを作成するプログラム作成装置であって、
前記データフロープログラムを構成する処理部品がいずれの記憶手段に対してデータの読み書きをするかを定める特定手段を備えることを特徴とする。
また本発明のプログラム作成装置は、
処理部品と、複合部品と、前記複合部品がデータの読み書きをする記憶手段とを含むデータフロープログラムを作成し、表示手段に表示するプログラム作成装置であって、
前記複合部品がいずれの記憶手段に対してデータの読み書きをするかを定める特定手段を備え、
前記複合部品は、データフロープログラムを内包し、内包したデータフロープログラムを処理内容として処理を行う部品であって、
前記処理部品が前記複合部品に直接的に内包されており、前記特定手段により該複合部品が記憶手段を特定している場合に、
前記複合部品に直接的に内包されている前記処理部品は、前記複合部品が特定する記憶手段に対してデータの読み書きをする
ことを特徴とする。
処理部品と、複合部品と、前記複合部品がデータの読み書きをする記憶手段とを含むデータフロープログラムを作成し、表示手段に表示するプログラム作成装置であって、
前記複合部品がいずれの記憶手段に対してデータの読み書きをするかを定める特定手段を備え、
前記複合部品は、データフロープログラムを内包し、内包したデータフロープログラムを処理内容として処理を行う部品であって、
前記処理部品が前記複合部品に直接的に内包されており、前記特定手段により該複合部品が記憶手段を特定している場合に、
前記複合部品に直接的に内包されている前記処理部品は、前記複合部品が特定する記憶手段に対してデータの読み書きをする
ことを特徴とする。
上記構成によれば、本発明のプログラム作成装置は、データフローの経験が乏しいオブジェクト指向経験者にとって、プログラム開発効率の低下を低減させる、という効果がある。
さらに、プログラムの再利用性を向上させる、という効果がある。
さらに、プログラムの可読性を向上させる、という効果がある。
さらに、プログラムの再利用性を向上させる、という効果がある。
さらに、プログラムの可読性を向上させる、という効果がある。
以下、添付の図面を参照して本発明の好適な実施形態について説明する。
DFDの表記法には種々のものがあるが、本実施例ではデマルコ式を基本とし、異なる箇所および拡張する箇所については都度説明を行う。
なお以下では“プロセス”が行う内容を“処理”、“処理”を行う実体を“処理部品”として区別するが、明確に区別する必要のない個所ではいずれも同義とする。
DFDの表記法には種々のものがあるが、本実施例ではデマルコ式を基本とし、異なる箇所および拡張する箇所については都度説明を行う。
なお以下では“プロセス”が行う内容を“処理”、“処理”を行う実体を“処理部品”として区別するが、明確に区別する必要のない個所ではいずれも同義とする。
またプロセスに流入するデータフローを「入力データフロー」、プロセスから流出するデータフローを「出力データフロー」と、区別して呼ぶことがある。
また、各処理部品は処理内容により、予めどのような型のデータがいくつ入出力されるかが定められている。処理部品において、入力データフローが接続される点を“入力ポート”、出力データフローが接続される点を“出力ポート”と呼ぶことにする。
また、各処理部品は処理内容により、予めどのような型のデータがいくつ入出力されるかが定められている。処理部品において、入力データフローが接続される点を“入力ポート”、出力データフローが接続される点を“出力ポート”と呼ぶことにする。
[実施例1]
図1は本実施例のプログラム作成装置で扱うプログラムの例である。図1(a)および図1(b)はC++で書かれたプログラムの抜粋であり、図1(a)はクラスAのクラス定義の例であり、図1(b)はクラスAのインスタンスへのポインタであるobjAを用いたプログラムの例である。
図1は本実施例のプログラム作成装置で扱うプログラムの例である。図1(a)および図1(b)はC++で書かれたプログラムの抜粋であり、図1(a)はクラスAのクラス定義の例であり、図1(b)はクラスAのインスタンスへのポインタであるobjAを用いたプログラムの例である。
なお、簡単のため、クラスA以外の変数やメンバー関数の戻り値の型はint型を想定しているが、本発明はint型に限定されるものではなく、いかなる型を用いても構わない。
objAは必ずしもこのような定義である必要はなく、objAの型がわかればよい(たとえば関数の引数でもよい)。
in1,in2は入力変数であるので、どこかで値がアサインされているものとする。
s3,s4は出力変数である。
またここではポインタ変数を用いているが、ポインタ変数が指す実体はどこかでアサインされるものとする。
また、本実施例ではC++をオブジェクト指向の実装言語としているが、本発明はC++に限ったものではなく、Java(登録商標)でもC#でもよく、前記説明を行ったカプセル化の要件を備えていればどのような言語でもよい。
objAは必ずしもこのような定義である必要はなく、objAの型がわかればよい(たとえば関数の引数でもよい)。
in1,in2は入力変数であるので、どこかで値がアサインされているものとする。
s3,s4は出力変数である。
またここではポインタ変数を用いているが、ポインタ変数が指す実体はどこかでアサインされるものとする。
また、本実施例ではC++をオブジェクト指向の実装言語としているが、本発明はC++に限ったものではなく、Java(登録商標)でもC#でもよく、前記説明を行ったカプセル化の要件を備えていればどのような言語でもよい。
本実施例のプログラム作成装置を用いて、図1(b)のプログラムをDFDで記述したものが図1(c)である。
図1(b)の5行目に注目すると、以下のことを表している。
・オブジェクトobjAの ・・・(項目1)
・メンバー関数A1に、 ・・・(項目2)
・入力引数in1を与え、 ・・・(項目3)
・得られた結果(戻り値)を変数s1に代入する ・・・(項目4)
図1(b)の5行目に注目すると、以下のことを表している。
・オブジェクトobjAの ・・・(項目1)
・メンバー関数A1に、 ・・・(項目2)
・入力引数in1を与え、 ・・・(項目3)
・得られた結果(戻り値)を変数s1に代入する ・・・(項目4)
これに対応する部分が図1(c)の処理A1およびその周辺の記述である。
記憶部品objA(11)は、オブジェクトobjAの、メンバー変数dataAを始めとする全データを保持している。すなわち記憶部品objA(11)がobjA(のデータ)そのものを表す記憶部である(項目1)。
処理部品A1(121)はメンバー関数A1の処理を実行する。ここで、処理部品A1(121)は記憶部品objA(11)を特定可能であり、特定された記憶部品objA(11)内のデータに対し、自由に読み書きを行い、処理A1を実行することが可能である。
これは、メンバー関数A1は、オブジェクトobjAのメンバー変数すべてに対してアクセスできることと対応している(項目2)。
記憶部品objA(11)は、オブジェクトobjAの、メンバー変数dataAを始めとする全データを保持している。すなわち記憶部品objA(11)がobjA(のデータ)そのものを表す記憶部である(項目1)。
処理部品A1(121)はメンバー関数A1の処理を実行する。ここで、処理部品A1(121)は記憶部品objA(11)を特定可能であり、特定された記憶部品objA(11)内のデータに対し、自由に読み書きを行い、処理A1を実行することが可能である。
これは、メンバー関数A1は、オブジェクトobjAのメンバー変数すべてに対してアクセスできることと対応している(項目2)。
図1(c)において、処理部品A1(121)と、それが特定する記憶部品objA(11)とは点線で結ばれているが、これについては後述する。
処理部品A1(121)には、変数in1に相当する記憶部品in1(141)から、データフロー131によって、データin1が入力されているが、これはメンバー関数A1に入力引数in1が与えられていることと対応している(項目3)。
処理部品A1(121)には、変数in1に相当する記憶部品in1(141)から、データフロー131によって、データin1が入力されているが、これはメンバー関数A1に入力引数in1が与えられていることと対応している(項目3)。
処理部品A1(121)は、処理を行ったあと、結果としてデータs1をデータフロー133およびデータフロー134によって出力しているが、これはメンバー関数A1が処理結果を変数s1に代入することと対応している(項目4)。
図1(c)において、データフロー133およびデータフロー134は、処理部品A1(121)から出た一本のデータフローを途中で分岐させて表しているが、これは処理部品A1の出力が1つだけであることをわかりやすく表すためである。本発明はこのような表記法に限定されるものではなく、出力データフローを途中で分岐させずに処理部品A1(121)から二つの出力データフロー(133および134)を直接出しても構わない。
図1(c)において、データフロー133およびデータフロー134は、処理部品A1(121)から出た一本のデータフローを途中で分岐させて表しているが、これは処理部品A1の出力が1つだけであることをわかりやすく表すためである。本発明はこのような表記法に限定されるものではなく、出力データフローを途中で分岐させずに処理部品A1(121)から二つの出力データフロー(133および134)を直接出しても構わない。
同様に、図1(b)の6行目、7行目、8行目も、図1(c)に表されている。
なお、メンバー関数A4には2つの入力引数s1とs2が与えられているが、これは処理部品A4(124)にs1をデータとするデータフロー134と、s2をデータとするデータフロー135が入力されることで表されている。
以上、メンバー関数に相当する処理部品から、オブジェクトを表す記憶部品を特定し、特定された記憶部品内のオブジェクトデータを自由に読み書きする仕組みを説明した。
この仕組みにより、オブジェクト指向によって開発されたプログラムを、データフロープログラムで用いることが可能となる。またオブジェクト指向の考え方によって、データフロープログラムを作成することが可能になる。
なお、メンバー関数A4には2つの入力引数s1とs2が与えられているが、これは処理部品A4(124)にs1をデータとするデータフロー134と、s2をデータとするデータフロー135が入力されることで表されている。
以上、メンバー関数に相当する処理部品から、オブジェクトを表す記憶部品を特定し、特定された記憶部品内のオブジェクトデータを自由に読み書きする仕組みを説明した。
この仕組みにより、オブジェクト指向によって開発されたプログラムを、データフロープログラムで用いることが可能となる。またオブジェクト指向の考え方によって、データフロープログラムを作成することが可能になる。
次に、図1(b)に示すC++のソースコードから図1(c)に示すデータフロープログラムを生成する処理について説明する。
手順
1)オブジェクト変数、入力変数および出力変数を記憶部品として配置・表示する。
2)図1(b)の上の行から順に、以下の処理を行う。結果は表形式で上の行から記入していく。
I)メソッドおよび関数を特定する(図1(b)の例ではすべてメソッドである)。
II)なお、メソッドは同一メソッドであっても個別に特定する(図1(b)の例ではそのようなものはない)。各メソッドがどのオブジェクトインスタンスのメソッドであるかを特定する。
III)各メソッドの入力(変数)を特定する。
IV)各メソッドの出力(変数)を特定する。ここで出力変数が手順1)の出力変数のいずれとも異なり、かつ既に表に記入済の入力変数、あるいは出力変数であった場合、記入済の該変数名を他の名前に書き換える。
3)以上の結果をまとめると表1のようになる。なおこれらの特定処理は通常のコンパイラ技術を用いることで可能である。
手順
1)オブジェクト変数、入力変数および出力変数を記憶部品として配置・表示する。
2)図1(b)の上の行から順に、以下の処理を行う。結果は表形式で上の行から記入していく。
I)メソッドおよび関数を特定する(図1(b)の例ではすべてメソッドである)。
II)なお、メソッドは同一メソッドであっても個別に特定する(図1(b)の例ではそのようなものはない)。各メソッドがどのオブジェクトインスタンスのメソッドであるかを特定する。
III)各メソッドの入力(変数)を特定する。
IV)各メソッドの出力(変数)を特定する。ここで出力変数が手順1)の出力変数のいずれとも異なり、かつ既に表に記入済の入力変数、あるいは出力変数であった場合、記入済の該変数名を他の名前に書き換える。
3)以上の結果をまとめると表1のようになる。なおこれらの特定処理は通常のコンパイラ技術を用いることで可能である。
4)表1の上から順に1行ずつ取り出し、以下の処理を行う。
I)メソッドをひとつの処理部品(円形のシンボル)として配置・表示する。
II)オブジェクトに注目し、同じ名前のオブジェクト変数に対応する記憶部品を特定する。
III)後述する記憶部特定部が前記Iの処理部品と前記IIの記憶部品とを点線で結ぶ。
I)メソッドをひとつの処理部品(円形のシンボル)として配置・表示する。
II)オブジェクトに注目し、同じ名前のオブジェクト変数に対応する記憶部品を特定する。
III)後述する記憶部特定部が前記Iの処理部品と前記IIの記憶部品とを点線で結ぶ。
・処理部品から、処理部品に向けて、矢印(データフロー)
5)表から1行ずつ順に出力欄を見ていき、表内で入力欄に同じ名前がある行を特定する。
前記特定された入力と同一行のメソッドに対応する処理部品から、前記特定された出力と同一行のメソッドに対応する処理部品に向けて、矢印(データフロー)を配置・表示する。なお、同じ名前のある入力が複数ある場合、これらすべての入力に対応する行についてこの処理を行う。
5)表から1行ずつ順に出力欄を見ていき、表内で入力欄に同じ名前がある行を特定する。
前記特定された入力と同一行のメソッドに対応する処理部品から、前記特定された出力と同一行のメソッドに対応する処理部品に向けて、矢印(データフロー)を配置・表示する。なお、同じ名前のある入力が複数ある場合、これらすべての入力に対応する行についてこの処理を行う。
・記憶部品から、処理部品に向けて、矢印(データフロー)
6)表から1行ずつ順に入力欄を見ていき、1)で配置・表示を行った記憶部品(入力変数)と同じ名前であるものを順に抽出し、該記憶部品から該入力欄の行のメソッドに対応する処理部品に向けて、矢印(データフロー)を配置・表示する。
・処理部品から、記憶部品に向けて、矢印(データフロー)
7)表から1行ずつ順に入力欄を見ていき、1)で配置・表示を行った記憶部品(出力変数)と同じ名前であるものを順に抽出し、該入力欄の行のメソッドに対応する処理部品から該記憶部品に向けて、矢印(データフロー)を配置・表示する。
8)以上で配置・表示の処理は終了である。なお、プログラム開発を画面上で行うためには、画面上で各部品を見やすく配置する必要があるが、これは本発明の範囲外であるので説明を割愛する。
6)表から1行ずつ順に入力欄を見ていき、1)で配置・表示を行った記憶部品(入力変数)と同じ名前であるものを順に抽出し、該記憶部品から該入力欄の行のメソッドに対応する処理部品に向けて、矢印(データフロー)を配置・表示する。
・処理部品から、記憶部品に向けて、矢印(データフロー)
7)表から1行ずつ順に入力欄を見ていき、1)で配置・表示を行った記憶部品(出力変数)と同じ名前であるものを順に抽出し、該入力欄の行のメソッドに対応する処理部品から該記憶部品に向けて、矢印(データフロー)を配置・表示する。
8)以上で配置・表示の処理は終了である。なお、プログラム開発を画面上で行うためには、画面上で各部品を見やすく配置する必要があるが、これは本発明の範囲外であるので説明を割愛する。
なお、図1(b)ではメンバー関数の実行順序がA1,A2,A3,A4となる。しかし、図1(c)では「A1(121)の後にA3(123)」「A1(121)の後にA4(124)」「A2(122)の後にA4(124)」という、処理部品の実行順序しか定められていない。また、たとえばA1(121)とA2(122)の処理部品の処理は同時に実行されるかもしれない。
これらは、データフロープログラミングが本質的にタスク並列処理であることの利点であるが、従来のオブジェクト指向(手続き型)プログラムからの移植においては問題となることがある。
処理部品の実行順序制御や、同時実行の回避(排他実行処理)は、本発明の範囲外であり、詳細は割愛するが、従来技術によって容易に問題を回避できる。
処理部品の実行順序制御や、同時実行の回避(排他実行処理)は、本発明の範囲外であり、詳細は割愛するが、従来技術によって容易に問題を回避できる。
たとえば、前述のLabVIEWにおいては、シーケンスストラクチャやエラークラスタを利用することにより、処理部品の実行順序制御が行える。また処理部品の排他実行処理は、セマフォやクリティカルセクションといった一般的なプログラミング手法で対応できる。
なお、図1(c)において、処理部品A1(121)と、それが特定する記憶部品objA(11)とは点線で結ばれている。本発明は、この“特定”関係を“点線”に限定するものではないが、データフローの表記のような、“データの流れ”を想起させるものではないことに特徴がある。
DFDにおいて、データフローは矢印によって、データの流れを表している。
そのため処理に対する入力を入力データフローで、処理の結果である出力を出力データフローで表記することにより、オブジェクト指向プログラムにおけるメンバー関数(メソッド)の入力引数と、出力引数や戻り値の対応付けが容易に行える。
なお、図1(c)において、処理部品A1(121)と、それが特定する記憶部品objA(11)とは点線で結ばれている。本発明は、この“特定”関係を“点線”に限定するものではないが、データフローの表記のような、“データの流れ”を想起させるものではないことに特徴がある。
DFDにおいて、データフローは矢印によって、データの流れを表している。
そのため処理に対する入力を入力データフローで、処理の結果である出力を出力データフローで表記することにより、オブジェクト指向プログラムにおけるメンバー関数(メソッド)の入力引数と、出力引数や戻り値の対応付けが容易に行える。
しかしメンバー関数(メソッド)が“オブジェクトデータを自由に読み書きできる”という関係は、読み書きできるという“権利”であり、入力や出力、あるいは入出力といったアクセスの方向やデータの流れを表すものではない。これはメンバー関数(メソッド)と、入力引数や出力引数、戻り値との関係とは異なるものである。
“特定”関係が、入力データフローや出力データフローと同じ表記、あるいはデータの流れを想起させる表記であった場合、作成されたデータフロープログラムから、元のオブジェクト指向におけるアルゴリズムを理解することが困難になってしまう。
これはDFDのような図を用いた表記はもちろんであるが、コード表記されたデータフロープログラムでも同様である。
“特定”関係が、入力データフローや出力データフローと同じ表記、あるいはデータの流れを想起させる表記であった場合、作成されたデータフロープログラムから、元のオブジェクト指向におけるアルゴリズムを理解することが困難になってしまう。
これはDFDのような図を用いた表記はもちろんであるが、コード表記されたデータフロープログラムでも同様である。
図2はコード表記されたデータフロープログラムの例である。いずれも図1(b)のプログラムを表したものである。
図2(a)では一行に2つある“->”の真ん中にオブジェクト(objA)とメンバー関数(メソッド)(A1、A2、A3、A4)が書かれ、左側に入力変数、右側に出力変数が書かれている。
図2(a)では一行に2つある“->”の真ん中にオブジェクト(objA)とメンバー関数(メソッド)(A1、A2、A3、A4)が書かれ、左側に入力変数、右側に出力変数が書かれている。
それに対し図2(b)ではオブジェクト(objA)が入力変数や出力変数と同様に書かれている。
本実施例では図2(b)ではなく、図2(a)のような表記(視覚形態)を用いることを特徴とする。
なお、本発明におけるデータフロープログラムのコード表記は、図2(a)で示した表記法に限定するものではなく、入力データフローまたは出力データフローと異なり、さらにデータの流れを想起させるものではない視覚形態であればよい。
以下では、これまで説明してきた仕組みを実現する、具体的な構成および動作に関して説明する。
本実施例では図2(b)ではなく、図2(a)のような表記(視覚形態)を用いることを特徴とする。
なお、本発明におけるデータフロープログラムのコード表記は、図2(a)で示した表記法に限定するものではなく、入力データフローまたは出力データフローと異なり、さらにデータの流れを想起させるものではない視覚形態であればよい。
以下では、これまで説明してきた仕組みを実現する、具体的な構成および動作に関して説明する。
図3は処理部品A1(121)、処理部品A2(122)、処理部品A3(123)、処理部品A4(124)の構造を表したクラス図の例である。
図3はさらに記憶部品in1(141)、記憶部品in2(142)、記憶部品s3(143)、記憶部品s4(144)、および記憶部品objA(11)の構造を表したクラス図の例である。
処理部312は全処理部品に共通の処理を行うクラスであり、後に詳しく説明するように、主に処理部品内の実行制御を行う。
処理部312には記憶部特定部(特定手段)311がひとつ関連付けられており、記憶部特定部311は記憶部32を高々ひとつ特定する。記憶部32が“部品”として具現化したものが記憶部品であり、記憶部品の実体は記憶部そのものである。
図3はさらに記憶部品in1(141)、記憶部品in2(142)、記憶部品s3(143)、記憶部品s4(144)、および記憶部品objA(11)の構造を表したクラス図の例である。
処理部312は全処理部品に共通の処理を行うクラスであり、後に詳しく説明するように、主に処理部品内の実行制御を行う。
処理部312には記憶部特定部(特定手段)311がひとつ関連付けられており、記憶部特定部311は記憶部32を高々ひとつ特定する。記憶部32が“部品”として具現化したものが記憶部品であり、記憶部品の実体は記憶部そのものである。
なお、本発明において処理部品が特定する記憶部32は必ずしもひとつに限るものではなく、複数の記憶部32を特定することによってオブジェクト指向における多重継承を表すことができる。しかし最近では、多重継承は継承元オブジェクトの判別が困難になるため、好ましくないという意見が一般的である。そこで以下では、処理部品が特定する記憶部32は高々ひとつであるとして、説明する。
また、以下の説明では、記憶部特定部311は、個々の処理部品が備え、該処理部品が特定する記憶部32を定めるものとしているが、本発明はそのような構成に限定するものではない。たとえば、プログラム作成装置が記憶部特定部をひとつ備え、該記憶部特定部が、個々の処理部品がどの記憶部32を特定するのかを定めても構わない。
図1の例では、オブジェクトobjAそのものを表すデータを保持する、記憶部32を継承したクラスA記憶部321が、記憶部品objA(11)に対応するクラスである。
各処理部品に特有の処理は処理部312を継承するクラスで実装する。図3では処理部品A1〜処理部品A4の4つの処理部品について示しており、処理部A1(331)、処理部A2(332)、処理部A3(333)、処理部A4(334)が対応する。
各処理部品に特有の処理は処理部312を継承するクラスで実装する。図3では処理部品A1〜処理部品A4の4つの処理部品について示しており、処理部A1(331)、処理部A2(332)、処理部A3(333)、処理部A4(334)が対応する。
処理部品共通部31は、処理部312および記憶部特定部311を含んだサブシステムであり、全処理部品に共通する部分である。
後に説明するように、本実施例のプログラム作成装置では、データフロープログラムを、プログラムを構成する処理部品の集合として管理する。より具体的には各処理部品の継承元クラスである処理部品共通部31の集合として管理する。
後に説明するように、本実施例のプログラム作成装置では、データフロープログラムを、プログラムを構成する処理部品の集合として管理する。より具体的には各処理部品の継承元クラスである処理部品共通部31の集合として管理する。
各処理部品にはあらかじめ、どのような型のデータがいくつ入出力されるかが定められており、各処理部品に特有の処理部から関連付けられた入力ポートや出力ポートとして実装される。
処理部品A1(121)は、int型の入力ポート、int型の出力ポートをそれぞれひとつずつ備える。これは処理部A1(331)から、入力ポートint部351、出力ポートint部352へひとつずつ関連を持つことで表される。
処理部品A1(121)は、int型の入力ポート、int型の出力ポートをそれぞれひとつずつ備える。これは処理部A1(331)から、入力ポートint部351、出力ポートint部352へひとつずつ関連を持つことで表される。
同様に処理部品A2(122)もint型の入力ポート、int型の出力ポートをひとつずつ備えるが、これは処理部A2(332)から、各々入力ポートint部351、出力ポートint部352にひとつずつ関連を持つことで表される。
同様に処理部品A3(123)もint型の入力ポート、int型の出力ポートをひとつずつ備えるが、これは処理部A3(333)から、各々入力ポートint部351、出力ポートint部352にひとつずつ関連を持つことで表される。
処理部品A4(124)はint型の入力ポートをふたつ、int型の出力ポートをひとつ備えるが、これは処理部A4(334)から入力ポートint部351へふたつ、出力ポートint部352へひとつの関連を持つことで表される。
同様に処理部品A3(123)もint型の入力ポート、int型の出力ポートをひとつずつ備えるが、これは処理部A3(333)から、各々入力ポートint部351、出力ポートint部352にひとつずつ関連を持つことで表される。
処理部品A4(124)はint型の入力ポートをふたつ、int型の出力ポートをひとつ備えるが、これは処理部A4(334)から入力ポートint部351へふたつ、出力ポートint部352へひとつの関連を持つことで表される。
この様子をわかりやすく示すために、処理部品121〜124、および記憶部品objA(11)のインスタンス仕様の構造を図4に示す。
図4(a)は処理部品A1(121)と記憶部品objA(11)、図4(b)は処理部品A2(122)と記憶部品objA(11)のインスタンス仕様の構造を示す。図4(c)は処理部品A3(123)と記憶部品objA(11)、図4(d)は処理部品A4(124)と記憶部品objA(11)のインスタンス仕様の構造を示す。
図4(a)は処理部品A1(121)と記憶部品objA(11)、図4(b)は処理部品A2(122)と記憶部品objA(11)のインスタンス仕様の構造を示す。図4(c)は処理部品A3(123)と記憶部品objA(11)、図4(d)は処理部品A4(124)と記憶部品objA(11)のインスタンス仕様の構造を示す。
処理部品A1(121)では処理部A1(411)から記憶部特定部(特定手段)412がひとつ、そして入力ポートint部4131がひとつ、出力ポートint部4132がひとつ接続されている。
処理部品A2(122)でも同様に処理部A2(421)から記憶部特定部(特定手段)422がひとつ、そして入力ポートint部4231がひとつ、出力ポートint部4232がひとつ接続されている。
処理部品A2(122)でも同様に処理部A2(421)から記憶部特定部(特定手段)422がひとつ、そして入力ポートint部4231がひとつ、出力ポートint部4232がひとつ接続されている。
処理部品A3(123)でも同様に処理部A3(431)から記憶部特定部(特定手段)432がひとつ、そして入力ポートint部4331がひとつ、出力ポートint部4332がひとつ接続されている。
処理部品A4(124)では、処理部A4(441)から記憶部特定部(特定手段)442がひとつ、そして入力ポートint部は4431、4433のふたつ、出力ポートint部4432がひとつ接続されている。
処理部品A4(124)では、処理部A4(441)から記憶部特定部(特定手段)442がひとつ、そして入力ポートint部は4431、4433のふたつ、出力ポートint部4432がひとつ接続されている。
処理部品A1(121)〜処理部品A4(124)では、入力ポート、出力ポートともにint型のデータを入出力するものである。このため、入力ポートに対応するクラスとして入力ポートint部351を、出力ポートに対応するクラスとして出力ポートint部352を共通に用いた。もしint型以外の入出力を持つ処理部品の場合はそれぞれ対応するクラス(不図示)を用いればよい。
なお入力ポートを実装するクラスは入力ポートIF341を、出力ポートを実装するクラスは出力ポートIF342を実現している。
なお入力ポートを実装するクラスは入力ポートIF341を、出力ポートを実装するクラスは出力ポートIF342を実現している。
処理部312は、各処理部品が持つ全ての入力ポートを入力ポートIF341で、全ての出力ポートを出力ポートIF342で管理する。
また出力ポートを実装するクラスは、接続先の処理部品の入力ポートに対してデータを投入するために、入力ポートIF341を要求インターフェースとして使用依存している。
また出力ポートを実装するクラスは、接続先の処理部品の入力ポートに対してデータを投入するために、入力ポートIF341を要求インターフェースとして使用依存している。
なお、記憶部32も、処理部品と同様に入力や出力を持ち、データフローを用いて処理部品と接続を行う。そこで本実施例では記憶部32を処理部品の一形態として考え、処理部312を継承させている。こうすることで処理部品と記憶部32を同じように管理することができる。ただし、本発明はこのような構成を強制するものではなく、処理部品と記憶部32を、独立して管理してもよい。
記憶部品in1(141)、記憶部品in2(142)、記憶部品s3(143)、記憶部品s4(144)はint型のデータを入出力し、保持する。対応するクラスは記憶部32を継承したint記憶部322である。int記憶部322はint型の入出力を行うため、入力ポートint部351、出力ポートint部352をそれぞれひとつずつ持つ。
記憶部品in1(141)、記憶部品in2(142)、記憶部品s3(143)、記憶部品s4(144)はint型のデータを入出力し、保持する。対応するクラスは記憶部32を継承したint記憶部322である。int記憶部322はint型の入出力を行うため、入力ポートint部351、出力ポートint部352をそれぞれひとつずつ持つ。
図5に、図1に対応するインスタンス仕様の構造を示す。出力ポートと入力ポートをつなぐリンク(131〜137)は入力ポートIF341を介して接続される。
なお出力ポートint部4132からは2本のリンク(133、134)によって入力ポートint部(4331、4431)と接続されている。
記憶部品in1(141)と記憶部品in2(142)は出力ポートのみの接続であるため、入力ポートint部(5131、5231)は他の出力ポートint部には未接続である。
なお出力ポートint部4132からは2本のリンク(133、134)によって入力ポートint部(4331、4431)と接続されている。
記憶部品in1(141)と記憶部品in2(142)は出力ポートのみの接続であるため、入力ポートint部(5131、5231)は他の出力ポートint部には未接続である。
記憶部品s3(143)と記憶部品s4(144)は入力ポートのみの接続であるため、出力ポートint部(5332、5432)は他の入力ポートint部には未接続である。
また記憶部品in1(141)、記憶部品in2(142)、記憶部品s3(143)、記憶部品s4(144)には記憶部特定部311はない。
さらに各処理部品の記憶部特定部(412、422、432、442)からobjAを保持しているクラスA記憶部111への接続がある。
また記憶部品in1(141)、記憶部品in2(142)、記憶部品s3(143)、記憶部品s4(144)には記憶部特定部311はない。
さらに各処理部品の記憶部特定部(412、422、432、442)からobjAを保持しているクラスA記憶部111への接続がある。
<プログラム作成装置の構成例>
図6に本実施例のプログラム作成装置の構成例を示す。
プログラム作成装置6は、UI部61を備える。UI部61は、入力・指示部(指定手段)611と表示部612を備える。入力・指示部611は、ユーザーからキーボードやマウス、タッチパネル等の入力装置を通して入力・指示を受け付ける。また表示部612は、ユーザーに対して作成・編集中のデータフロープログラム(DFDやテキスト形式)やプログラム作成装置6の状態を液晶ディスプレイ等の表示装置に表示する。
図6に本実施例のプログラム作成装置の構成例を示す。
プログラム作成装置6は、UI部61を備える。UI部61は、入力・指示部(指定手段)611と表示部612を備える。入力・指示部611は、ユーザーからキーボードやマウス、タッチパネル等の入力装置を通して入力・指示を受け付ける。また表示部612は、ユーザーに対して作成・編集中のデータフロープログラム(DFDやテキスト形式)やプログラム作成装置6の状態を液晶ディスプレイ等の表示装置に表示する。
ユーザーがデータフロープログラムを作成・編集する際には、適時UI部61を通してユーザーと対話をしつつ、プログラム作成・編集部62がプログラム管理部64によって管理されるプログラムの作成・編集を行う。
作成したデータフロープログラムを実行する際は、UI部61から処理制御部63にプログラムの実行を指示し、処理制御部63はプログラム管理部64からプログラムの情報を得てプログラムの実行制御を行う。
作成したデータフロープログラムを実行する際は、UI部61から処理制御部63にプログラムの実行を指示し、処理制御部63はプログラム管理部64からプログラムの情報を得てプログラムの実行制御を行う。
プログラム管理部64はプログラムを構成する処理部品を、処理部品共通部31として扱い、これらの集合としてプログラムを管理する。
なお、プログラム管理部64の集約元の多重度が0..1となっている。これはプログラム管理部64をプログラムの一部を管理する部として、処理制御部63およびプログラム作成・編集部62とは切り離した形でも用いるためである。本実施例では多重度1である。多重度0の場合については、他の実施例として後に述べる。
プログラムは、図5で示したような接続関係を持つインスタンス仕様の集合で表され、処理部品共通部31のインスタンス仕様の集合として管理している。
なお、プログラム管理部64の集約元の多重度が0..1となっている。これはプログラム管理部64をプログラムの一部を管理する部として、処理制御部63およびプログラム作成・編集部62とは切り離した形でも用いるためである。本実施例では多重度1である。多重度0の場合については、他の実施例として後に述べる。
プログラムは、図5で示したような接続関係を持つインスタンス仕様の集合で表され、処理部品共通部31のインスタンス仕様の集合として管理している。
図14に実施例1のプログラム管理部がプログラムを管理している様子を示す。
プログラム作成装置201内のプログラム管理部2011は、記憶部品objA(11)、記憶部品in1(141)、記憶部品in2(142)、記憶部品s3(143)、記憶部品s4(144)を管理している。
プログラム作成装置201内のプログラム管理部2011は、さらに処理部品A1(121)、処理部品A2(122)、処理部品A3(123)、処理部品A4(124)を管理している。
なお、図14ではプログラム管理部2011が管理する処理部品共通部31のインスタンス仕様として表している。具体的には、処理部312を継承したクラス(クラスA記憶部321、int記憶部322、処理部A1〜処理部A4(331〜334))のインスタンス仕様として表している。
プログラム作成装置201内のプログラム管理部2011は、記憶部品objA(11)、記憶部品in1(141)、記憶部品in2(142)、記憶部品s3(143)、記憶部品s4(144)を管理している。
プログラム作成装置201内のプログラム管理部2011は、さらに処理部品A1(121)、処理部品A2(122)、処理部品A3(123)、処理部品A4(124)を管理している。
なお、図14ではプログラム管理部2011が管理する処理部品共通部31のインスタンス仕様として表している。具体的には、処理部312を継承したクラス(クラスA記憶部321、int記憶部322、処理部A1〜処理部A4(331〜334))のインスタンス仕様として表している。
<プログラム作成・編集の流れ>
以上のように構成されるプログラム作成装置201による、図1(c)のプログラム作成・編集の流れについて説明する。
プログラムを新規に作成する際は、処理部品がひとつもないため、プログラム管理部2011が管理する処理部品共通部31はひとつもない。
ここで入力・指示部611により、処理部品A1(121)を表示部612上に配置する指示を行う。
以上のように構成されるプログラム作成装置201による、図1(c)のプログラム作成・編集の流れについて説明する。
プログラムを新規に作成する際は、処理部品がひとつもないため、プログラム管理部2011が管理する処理部品共通部31はひとつもない。
ここで入力・指示部611により、処理部品A1(121)を表示部612上に配置する指示を行う。
プログラム作成・編集部62はこの指示を受けて、処理部品A1(121)を生成し、配置情報を付与してプログラム管理部2011に管理を依頼する。
そして表示部612に処理部品A1(121)を配置・表示する。
同様に処理部品A2(122)、処理部品A3(123)、処理部品A4(124)、記憶部品objA(11)、記憶部品in1(141)、記憶部品in2(142)、記憶部品s3(143)、記憶部品s4(144)を表示部612に配置・表示する。
そして表示部612に処理部品A1(121)を配置・表示する。
同様に処理部品A2(122)、処理部品A3(123)、処理部品A4(124)、記憶部品objA(11)、記憶部品in1(141)、記憶部品in2(142)、記憶部品s3(143)、記憶部品s4(144)を表示部612に配置・表示する。
<処理部品間の接続>
処理部品間のデータフローによる接続関係の確立も同様である。入力・指示部611により、処理部品A1(121)から処理部品A3(123)へのデータフローの生成を、プログラム作成・編集部62に依頼する。するとプログラム作成・編集部62はプログラム管理部2011を通して処理部品A1(121)および処理部品A3(123)のインスタンス仕様を得る。そして処理部品A1(121)の出力ポートを表す出力ポートint部4132と、処理部品A3(123)の入力ポートである入力ポートint部4331をリンク133で接続する。
処理部品間のデータフローによる接続関係の確立も同様である。入力・指示部611により、処理部品A1(121)から処理部品A3(123)へのデータフローの生成を、プログラム作成・編集部62に依頼する。するとプログラム作成・編集部62はプログラム管理部2011を通して処理部品A1(121)および処理部品A3(123)のインスタンス仕様を得る。そして処理部品A1(121)の出力ポートを表す出力ポートint部4132と、処理部品A3(123)の入力ポートである入力ポートint部4331をリンク133で接続する。
具体的には出力ポートint部4132の入力ポートIF341への要求インターフェースと、入力ポートint部4331の提供インターフェースである入力ポートIF341とを結びつける。
そして表示部612にデータフロー133を表示する。この際、データフローは、一般に矢印のようなデータの流れを想起させる図形要素によって表示する。
以上のようにして処理部品間のデータフローの作成・編集が可能となる。
なお、記憶部品と処理部品間のデータフローの作成・編集も同様である。
そして表示部612にデータフロー133を表示する。この際、データフローは、一般に矢印のようなデータの流れを想起させる図形要素によって表示する。
以上のようにして処理部品間のデータフローの作成・編集が可能となる。
なお、記憶部品と処理部品間のデータフローの作成・編集も同様である。
<処理部品と記憶部品との接続>
次に処理部品と記憶部品との“特定”の関係を作成する。
入力・指示部611により、処理部品A1(121)から記憶部品objA(11)を特定する関係の生成をプログラム作成・編集部62に依頼する。するとプログラム作成・編集部62はプログラム管理部2011を通して処理部品A1(121)および記憶部品objA(11)のインスタンス仕様を得る。そして処理部品A1(121)の記憶部特定部311が記憶部品objA(11)を指定するよう、関連付ける。
次に処理部品と記憶部品との“特定”の関係を作成する。
入力・指示部611により、処理部品A1(121)から記憶部品objA(11)を特定する関係の生成をプログラム作成・編集部62に依頼する。するとプログラム作成・編集部62はプログラム管理部2011を通して処理部品A1(121)および記憶部品objA(11)のインスタンス仕様を得る。そして処理部品A1(121)の記憶部特定部311が記憶部品objA(11)を指定するよう、関連付ける。
そして表示部612に“特定”関係を表示する。この“特定”関係は、データフローで用いた図形要素とは異なり、なおかつデータの流れを想起させない図形要素によって表示する。このような図形要素の例としては、図1(c)で用いているような点線があるが、本発明は点線に限定するものではない。
以上の手順を繰り返すことにより、プログラムを表示し、作成・編集することができる。
なお、処理部品や記憶部品の生成、データフローの生成、“特定”関係の生成の順序は問わない。
なお、以上はプログラム作成方法の一例であり、他の方法を用いても構わない。また、より具体的な作成方法は本発明の範囲外であるため、詳細は省略する。
以上の手順を繰り返すことにより、プログラムを表示し、作成・編集することができる。
なお、処理部品や記憶部品の生成、データフローの生成、“特定”関係の生成の順序は問わない。
なお、以上はプログラム作成方法の一例であり、他の方法を用いても構わない。また、より具体的な作成方法は本発明の範囲外であるため、詳細は省略する。
<プログラムの実行>
次にプログラムの実行について説明する。
データフロープログラムの実行は入力・指示部611から処理制御部63に伝えられる。
図7に処理制御部63がデータフロープログラムを実行する処理の流れを示す。
まずステップS71で、全処理部品および全記憶部品の取得を行う。これはプログラム管理部64が管理している処理部品共通部31を全て取得することによって行う。
次にステップS72で、取得した各々の処理部品共通部31の処理部312に対して同時に実行を指示する。この時点で、指示を受けた処理部は各々が独立して実行を始める。
次にプログラムの実行について説明する。
データフロープログラムの実行は入力・指示部611から処理制御部63に伝えられる。
図7に処理制御部63がデータフロープログラムを実行する処理の流れを示す。
まずステップS71で、全処理部品および全記憶部品の取得を行う。これはプログラム管理部64が管理している処理部品共通部31を全て取得することによって行う。
次にステップS72で、取得した各々の処理部品共通部31の処理部312に対して同時に実行を指示する。この時点で、指示を受けた処理部は各々が独立して実行を始める。
<処理部312での処理の流れ>
図8に処理部312での処理の流れを示す。
なお、前述のとおり本実施例では記憶部品も処理部品の一形態であるため、以下では特に断りのない限り、“処理部品”と言った場合には“記憶部品”も含むものとする。
各処理部品の処理は、全ての処理部品に共通な、処理の実行を制御する処理部312と、各処理部品に特有な処理を行う処理部(331〜334)および記憶部(32)で行う。
たとえば、処理部品A1(121)の処理は処理部312および処理部A1(331)で行い、処理部品A2(122)の処理は処理部312および処理部A2(332)で行う。処理部品A3(123)の処理は処理部312および処理部A3(333)で行い、処理部品A4(124)の処理は処理部312および処理部A4(334)で行う。
図8に処理部312での処理の流れを示す。
なお、前述のとおり本実施例では記憶部品も処理部品の一形態であるため、以下では特に断りのない限り、“処理部品”と言った場合には“記憶部品”も含むものとする。
各処理部品の処理は、全ての処理部品に共通な、処理の実行を制御する処理部312と、各処理部品に特有な処理を行う処理部(331〜334)および記憶部(32)で行う。
たとえば、処理部品A1(121)の処理は処理部312および処理部A1(331)で行い、処理部品A2(122)の処理は処理部312および処理部A2(332)で行う。処理部品A3(123)の処理は処理部312および処理部A3(333)で行い、処理部品A4(124)の処理は処理部312および処理部A4(334)で行う。
また、記憶部品objA(11)の処理は処理部312および記憶部32で行う。
各処理部品に特有の処理は、処理部312の実行制御によって呼び出される。
処理部312では、まず、ステップS81で入力ポートのデータチェックを行う。
データフローの考え方に則り、処理部品に特有の処理は、該処理部品の全ての入力ポートに入力データフローからデータが到着してから行われる。そこで処理部312は、全ての入力ポートに対応する入力ポートIF341にデータが到着するまで待つ。
各処理部品に特有の処理は、処理部312の実行制御によって呼び出される。
処理部312では、まず、ステップS81で入力ポートのデータチェックを行う。
データフローの考え方に則り、処理部品に特有の処理は、該処理部品の全ての入力ポートに入力データフローからデータが到着してから行われる。そこで処理部312は、全ての入力ポートに対応する入力ポートIF341にデータが到着するまで待つ。
入力ポートは、入力されるデータの種類(型)に応じて、その実装が定められている。処理部品A1(121)の場合、int型データがひとつ入力されるので、入力ポートint部351がひとつ(4131)、処理部A1(411)に接続される。
なお、int型以外の入力ポートであれば、対応する不図示の入力ポート部を用いる。
また入力ポートが複数ある場合は該個数の入力ポート部が、処理部品に特有の処理を行う処理部に接続される。たとえば処理部品A4(124)はint型データの入力ポートがふたつあるため、処理部A4(441)には入力ポートint部がふたつ(4431、4433)接続される。
なお、int型以外の入力ポートであれば、対応する不図示の入力ポート部を用いる。
また入力ポートが複数ある場合は該個数の入力ポート部が、処理部品に特有の処理を行う処理部に接続される。たとえば処理部品A4(124)はint型データの入力ポートがふたつあるため、処理部A4(441)には入力ポートint部がふたつ(4431、4433)接続される。
記憶部品に関しても同様で、たとえば記憶部品s3(143)は、int型データをひとつ入力可能であるので、int記憶部531には、入力ポートint部351がひとつ(5331)接続される。なお記憶部品in1(141)および記憶部品in2(142)は入力ポートにデータフローは接続されていないが、入力ポートint部351は備える(5131、5231)。また記憶部品objA(11)はobjA型のデータを入力できる不図示の入力ポートがひとつ、クラスA記憶部111に接続される。
これらの入力ポートの実装では、次に述べるように処理部312で入力ポートを管理するため、あらゆる型の入力ポートに共通するインターフェースである入力ポートIF341を実現している。
処理部312は、処理部品の全ての入力ポートに対応する入力ポートIF341を管理しており、ステップS81ではこれら全ての入力ポートIF341に対して、データが到着しているか否かのチェックを行う。
処理部312は、処理部品の全ての入力ポートに対応する入力ポートIF341を管理しており、ステップS81ではこれら全ての入力ポートIF341に対して、データが到着しているか否かのチェックを行う。
もし、データが到着していない入力ポートがあった場合、ステップS811でいずれかの入力ポートにデータが到着するまで待つ。いずれかの入力ポートにデータが到着すると、再度ステップS81にて、全入力ポートのデータが到着しているか否かをチェックする。
全入力ポートにデータが到着している場合、ステップS82で全ての出力ポートに空きがあるか否かをチェックする。
処理部品は処理結果を、出力ポートを通じて出力する。もし出力ポートに後続する処理部品が接続されており、後続処理部品がまだ古いデータを読み出していない場合、処理部品はその結果を出力ポートに対して出力することができない。そこで全ての出力ポートに空きができるまで、処理の継続実行を抑制する。
全入力ポートにデータが到着している場合、ステップS82で全ての出力ポートに空きがあるか否かをチェックする。
処理部品は処理結果を、出力ポートを通じて出力する。もし出力ポートに後続する処理部品が接続されており、後続処理部品がまだ古いデータを読み出していない場合、処理部品はその結果を出力ポートに対して出力することができない。そこで全ての出力ポートに空きができるまで、処理の継続実行を抑制する。
出力ポートは、出力されるデータの種類(型)に応じて、その実装が定められている。処理部品A1(121)の場合、int型データがひとつ出力されるので、出力ポートint部352がひとつ(4132)、処理部A1(411)に接続される。
なお、int型以外の出力ポートであれば対応する不図示の出力ポート部を用いることや、出力ポートが複数ある場合は該個数の出力ポート部が処理部品に特有の処理を行う処理部に接続されることは、入力ポートの場合と同様である。
これらの出力ポートの実装では、入力ポートのときと同様に処理部312で出力ポートを管理するため、あらゆる型の出力ポートに共通するインターフェースである出力ポートIF342を実現している。
なお、int型以外の出力ポートであれば対応する不図示の出力ポート部を用いることや、出力ポートが複数ある場合は該個数の出力ポート部が処理部品に特有の処理を行う処理部に接続されることは、入力ポートの場合と同様である。
これらの出力ポートの実装では、入力ポートのときと同様に処理部312で出力ポートを管理するため、あらゆる型の出力ポートに共通するインターフェースである出力ポートIF342を実現している。
処理部312は、処理部品の全ての出力ポートに対応する出力ポートIF342を管理しており、ステップS82ではこれら全ての出力ポートIF342に対して、出力済みの古いデータが残っていないかどうかのチェックを行う。
もし、古いデータが残っている出力ポートがあった場合、ステップS821でいずれかの出力ポートに空きができるまで待つ。いずれかの出力ポートに空きができると、再度ステップS82にて、全出力ポートに古いデータが残っていないかどうかをチェックする。
もし、古いデータが残っている出力ポートがあった場合、ステップS821でいずれかの出力ポートに空きができるまで待つ。いずれかの出力ポートに空きができると、再度ステップS82にて、全出力ポートに古いデータが残っていないかどうかをチェックする。
全出力ポートに古いデータが残っていなかった場合、ステップS83で記憶部の特定を行う。
なお、処理部品A1(121)のように、出力ポートに他の処理部品の複数の入力ポートが接続されている場合、それらの入力ポートの全てがデータを読み込んだ時点で出力ポートが空いている、と判断する。
処理部312には記憶部特定部311がひとつ関連しており、さらに記憶部特定部311は高々ひとつの記憶部32と関連付けられている。
なお、処理部品A1(121)のように、出力ポートに他の処理部品の複数の入力ポートが接続されている場合、それらの入力ポートの全てがデータを読み込んだ時点で出力ポートが空いている、と判断する。
処理部312には記憶部特定部311がひとつ関連しており、さらに記憶部特定部311は高々ひとつの記憶部32と関連付けられている。
図4(a)の例では、処理部A1(411)に記憶部特定部412が接続されており、さらに記憶部特定部412とobjAのデータを保持している記憶部品objA(11)が接続されている。
処理部312は記憶部特定部311に対して、特定している記憶部の取得を依頼する。図4(a)の場合、クラスA記憶部111(記憶部品objA(11))が返されることになる。
処理部312は記憶部特定部311に対して、特定している記憶部の取得を依頼する。図4(a)の場合、クラスA記憶部111(記憶部品objA(11))が返されることになる。
なお特定している記憶部がない場合はその旨が返される。また、処理部品が記憶部品である場合は、記憶部特定部311そのものが存在しないが、この際にも特定している記憶部がないものとして扱う。
ここまでで、処理部品に特有の処理を実行する条件が整ったので、ステップS84で全ての入力ポートから入力データを読み込み、ステップS85で処理部品に特有の処理を行い、ステップS86で処理結果を出力データとして全ての出力ポートに書き出す。
ここまでで、処理部品に特有の処理を実行する条件が整ったので、ステップS84で全ての入力ポートから入力データを読み込み、ステップS85で処理部品に特有の処理を行い、ステップS86で処理結果を出力データとして全ての出力ポートに書き出す。
処理部品A1(121)の場合、ステップS84で入力ポートint部4131から入力データを読み込み、ステップS85で処理部A1(411)の処理を行い、ステップS86で処理結果を出力データとして出力ポートint部4132に出力する。
なお、処理S85内では入力データの他に、必要に応じて、記憶部品objA(11)に保持されているobjAのデータの一部または全部を参照する(S851)ことができる。またobjAのデータを更新する(S852)こともできる。
なお、処理S85内では入力データの他に、必要に応じて、記憶部品objA(11)に保持されているobjAのデータの一部または全部を参照する(S851)ことができる。またobjAのデータを更新する(S852)こともできる。
なお、記憶部品in1(141)や記憶部品in2(142)のように入力ポートに繋がるデータフローがない場合には、その入力ポートは存在しないものとして扱う。入力ポートがひとつもない場合には、ステップS84での入力データ読込は行わない。
また、記憶部品s3(143)や記憶部品s4(144)のように出力ポートに繋がるデータフローがない場合には、その出力ポートは存在しないものとして扱う。出力ポートがひとつもない場合には、ステップS86での出力データ書出は行わない。
また、記憶部品s3(143)や記憶部品s4(144)のように出力ポートに繋がるデータフローがない場合には、その出力ポートは存在しないものとして扱う。出力ポートがひとつもない場合には、ステップS86での出力データ書出は行わない。
次にステップS87で入出力ポート数のチェックを行う。入力ポート、出力ポートのどちらも1つもない処理部品の場合、処理を継続する状況にはならないため、ここで処理を終了する。
入力ポートまたは出力ポートのいずれかがある場合には、再度ステップS81に戻る。
なお、本実施例では記憶部32も処理部312を継承しているが、記憶部品objA(11)は他の処理部品と接続していないため、入力ポートや出力ポートはない。
入力ポートまたは出力ポートのいずれかがある場合には、再度ステップS81に戻る。
なお、本実施例では記憶部32も処理部312を継承しているが、記憶部品objA(11)は他の処理部品と接続していないため、入力ポートや出力ポートはない。
それゆえ、ステップS81、ステップS82のチェックによってステップS811やステップS821に移行することはなく、ステップS83に移行する。またステップS84やステップS86は何もすることがない。
さらにステップS83では特定する記憶部がなく、ステップS85においては記憶部品objA(11)に特有の処理はないため、何もしない。すなわち、記憶部品objA(11)における処理部312の処理は、実質何もしない。さらにステップS87で入出力ポートが1つもないため、ここで処理を終了する。
さらにステップS83では特定する記憶部がなく、ステップS85においては記憶部品objA(11)に特有の処理はないため、何もしない。すなわち、記憶部品objA(11)における処理部312の処理は、実質何もしない。さらにステップS87で入出力ポートが1つもないため、ここで処理を終了する。
記憶部品in1(141)や記憶部品in2(142)の場合は、入力ポートがないため、ステップS81のチェックにより即座にステップS82に移行する。また、ステップS83では特定する記憶部はないものとし、ステップS84では何もしない。さらにステップS85では入力がないため、何も行わない。ステップS86では、int記憶部322内の不図示のint型データ記憶域にあるデータを出力ポートに書き出す。
同様に記憶部品s3(143)や記憶部品s4(144)の場合は、出力ポートがないため、ステップS82のチェックにより即座にステップS83に移行する。また、ステップS83では特定する記憶部はないものとする。ステップS84で入力ポートからデータを読み込んだ後、ステップS85では、int記憶部322内の不図示のint型データ記憶域にデータを保管する。この際、特定する記憶部がないため、ステップS851、ステップS852には移行しない。ステップS86では出力ポートがないため、何もしない。
以上が各処理部品における処理部312の処理の流れである。
以上が各処理部品における処理部312の処理の流れである。
さて、処理制御部63は、ステップS72で全処理部を実行する。各処理部品は独立して動作するため、全ての処理部品の処理動作が終了するまでプログラムの動作は継続する。
ステップS73で、プログラムの終了検知を行う。これには、全処理部品が処理動作を行っていない状態を確認すればよい。
ステップS73で、プログラムの終了検知を行う。これには、全処理部品が処理動作を行っていない状態を確認すればよい。
まず、各々の処理部312に対して、現在の状態を問い合わせる。
問い合わせ結果は各処理部312がステップS811またはステップS821において、ポート待ち状態(入力ポートにデータが来るのを待っているか、あるいは出力ポートに空きができるのを待っている状態)であるか否かである。
全ての処理部312がポート待ち状態である場合、ステップS74にて、全処理部に対して終了指示を出す。
問い合わせ結果は各処理部312がステップS811またはステップS821において、ポート待ち状態(入力ポートにデータが来るのを待っているか、あるいは出力ポートに空きができるのを待っている状態)であるか否かである。
全ての処理部312がポート待ち状態である場合、ステップS74にて、全処理部に対して終了指示を出す。
終了指示が出されると、各処理部312はステップS811またはステップS821の状態から抜け、終了する。また処理制御部63もデータフロープログラムの実行を終了する。いずれかの処理部312がポート待ち状態ではない場合、再度ポート待ち状態をチェックし、全ての処理部312がポート待ち状態になるまで待つ。
なお、前述の記憶部品objA(11)のように、既に処理を終了している処理部品の場合、問い合わせを受けた処理部品は「ポート待ち状態」であると返答する。
以上で、データフロープログラムの実行を説明した。
なお、前述の記憶部品objA(11)のように、既に処理を終了している処理部品の場合、問い合わせを受けた処理部品は「ポート待ち状態」であると返答する。
以上で、データフロープログラムの実行を説明した。
なお、ここで示したデータフロープログラムの実行制御方法は、全処理部が独立して同時に実行を開始しているが、これはひとつの例であり、他の制御手法を用いても構わない。
たとえば一時期には高々ひとつの処理部しか実行しないようなシリアル実行制御手法を用いてもよい。この場合、入力ポートからデータが入ってくることを契機に処理を実行してもよいし、プログラム全体の最終出力ポートから処理を逆順に追っていって、必要な処理を実行させるようにしてもよい。これらはPush型、Pull型と呼ばれるデータフロープログラムの実行制御手法であり、一般に知られたものであるため、詳細は省略する。
たとえば一時期には高々ひとつの処理部しか実行しないようなシリアル実行制御手法を用いてもよい。この場合、入力ポートからデータが入ってくることを契機に処理を実行してもよいし、プログラム全体の最終出力ポートから処理を逆順に追っていって、必要な処理を実行させるようにしてもよい。これらはPush型、Pull型と呼ばれるデータフロープログラムの実行制御手法であり、一般に知られたものであるため、詳細は省略する。
また、本実施例では、記憶部32は処理部312を継承しているが、継承しない実装も可能である。その場合、プログラム管理部64は、データフロープログラム全体を管理するために、処理部品共通部31に加えて記憶部32も管理するようにすればよい。
さらに、本実施例で示した構成は本発明を実施する際の例であり、他の構成でも構わない。本実施例は、ステップS83、ならびにステップS85から呼び出されるステップS851およびステップS852に特徴があり、他のステップに関しては他の制御手法を用いても構わない。
また、本実施例では図1(c)で示すように図形要素を用いてDFDでプログラムを記述することを念頭に置いて説明を行ったが、図2(a)のようなコードでのプログラム記述を行うプログラム作成装置においても、処理の流れは同様である。
さらに、本実施例で示した構成は本発明を実施する際の例であり、他の構成でも構わない。本実施例は、ステップS83、ならびにステップS85から呼び出されるステップS851およびステップS852に特徴があり、他のステップに関しては他の制御手法を用いても構わない。
また、本実施例では図1(c)で示すように図形要素を用いてDFDでプログラムを記述することを念頭に置いて説明を行ったが、図2(a)のようなコードでのプログラム記述を行うプログラム作成装置においても、処理の流れは同様である。
以上により、オブジェクトと入出力データを容易に区別することが可能になるため、プログラムの可読性が向上する、という効果がある。
さらに、同様の理由により、データフローの経験が乏しいオブジェクト指向経験者にとって、プログラム開発効率の低下を低減させる、という効果がある。
さらに、オブジェクト指向で開発した処理アルゴリズムやプログラムを、データフロープログラムの部品として使うことが容易になり、プログラムの再利用性を向上させる、という効果がある。
さらに、同様の理由により、データフローの経験が乏しいオブジェクト指向経験者にとって、プログラム開発効率の低下を低減させる、という効果がある。
さらに、オブジェクト指向で開発した処理アルゴリズムやプログラムを、データフロープログラムの部品として使うことが容易になり、プログラムの再利用性を向上させる、という効果がある。
[実施例2]
図9は本実施例のプログラム作成装置で扱うプログラムの別の例である。
図9(a)は図1(b)に相当する図であり、コンパイラに特定の情報を渡すために使用するプラグマを用いた例である。本実施例のプログラム作成装置を用いて、図9(a)のプログラムをDFDで記述したものが図9(b)である。基本的には図1(c)のプログラムを生成する場合と同様の手順で、図9(b)のプログラムが生成される。
図9は本実施例のプログラム作成装置で扱うプログラムの別の例である。
図9(a)は図1(b)に相当する図であり、コンパイラに特定の情報を渡すために使用するプラグマを用いた例である。本実施例のプログラム作成装置を用いて、図9(a)のプログラムをDFDで記述したものが図9(b)である。基本的には図1(c)のプログラムを生成する場合と同様の手順で、図9(b)のプログラムが生成される。
<プログラムを生成する処理の手順>
1)まず、メイン部分に着目する。
2)オブジェクト変数objAと、入力変数in1,in2とを記憶部品として配置・表示する。
3)関数funcに注目する。関数funcに相当する複合処理部品91を配置・表示する。
4)objAはオブジェクトであるから、複合処理部品91とobjAに対応する記憶部品との間を点線で結ぶ。
5)関数funcの中身に対する処理は、図1(c)を生成する処理と同様である。
1)まず、メイン部分に着目する。
2)オブジェクト変数objAと、入力変数in1,in2とを記憶部品として配置・表示する。
3)関数funcに注目する。関数funcに相当する複合処理部品91を配置・表示する。
4)objAはオブジェクトであるから、複合処理部品91とobjAに対応する記憶部品との間を点線で結ぶ。
5)関数funcの中身に対する処理は、図1(c)を生成する処理と同様である。
図9(a)において、関数funcの第一引数がオブジェクトであることは、funcの定義の上の行の#pragma dataflow()ディレクティブでobjectと宣言されていることからわかる。ここでは、引数が1なので、1番目の引数がオブジェクトである、ということを示す。
なお、pragmaディレクティブは、本変換(図9(a)から図9(b)の生成)を実施する実体(コンパイラ)が理解するものである。一般のC++コンパイラは理解できないため、無視する。
なお、pragmaディレクティブは、本変換(図9(a)から図9(b)の生成)を実施する実体(コンパイラ)が理解するものである。一般のC++コンパイラは理解できないため、無視する。
図1とほぼ同様であるが、処理部品(121〜124)、記憶部品(143、144)およびそれらの間を結ぶデータフローが、データフロープログラムとして複合部品91に内包されている。さらにこれらの処理部品(121〜124)は、記憶部品objA(11)を“特定”せずに、複合部品91が記憶部品objA(11)を“特定”している。
複合部品とはデータフロープログラムを内包することができる処理部品であり、複合部品の“処理”とは内包するデータフロープログラムの実行を指す。
複合部品とはデータフロープログラムを内包することができる処理部品であり、複合部品の“処理”とは内包するデータフロープログラムの実行を指す。
なお図9に示す例では複合部品91の外部からの入力データフロー(131、132)が、内包するデータフロープログラムを構成する処理部品A1(121)、処理部品A2(122)に直接入力されている。複合部品を用いたデータフロー記述では、このように記述する場合と、複合部品の内外の界面に位置するポートを用いる場合がある。このポートは複合部品外部から見ると入力ポートとして、内部から見ると出力ポートとして見えるものである。
また、複合部品内部の処理部品から外部の処理部品へのデータフローがある場合にも同様のポートを用いることができる。この場合、内部から見ると入力ポートとして、外部から見ると出力ポートとして見える。
本発明はいずれかの場合に限定するものではないが、本実施例では図9に示すように前者の場合(複合部品の内外の界面に位置するポートを用いない場合)について説明する。
本発明はいずれかの場合に限定するものではないが、本実施例では図9に示すように前者の場合(複合部品の内外の界面に位置するポートを用いない場合)について説明する。
図1では処理部品A1(121)〜処理部品A4(124)は、記憶部品objA(11)をオブジェクトobjAそのものとして“特定”していた。しかし図9では処理部品A1(121)〜処理部品A4(124)を含む複合部品91が記憶部品objA(11)を“特定”している。
このように、個々の処理部品が記憶部を特定せず、その処理部品を含む複合部品が記憶部を特定する場合には、処理部品は所定の処理を実行する際に、前記記憶部に対して、記憶部が保持する一部または全部のデータを任意のタイミングで読み書きできる。
このように、個々の処理部品が記憶部を特定せず、その処理部品を含む複合部品が記憶部を特定する場合には、処理部品は所定の処理を実行する際に、前記記憶部に対して、記憶部が保持する一部または全部のデータを任意のタイミングで読み書きできる。
このような記述方法を用いることにより、プログラム開発者はメソッド(メンバ関数)を表す処理部品の各々が、対応するオブジェクトである記憶部を特定する記述を行わなくて済む。
以下では、これまで説明してきた仕組みを実現する、具体的な構成および動作に関して説明する。
以下では、これまで説明してきた仕組みを実現する、具体的な構成および動作に関して説明する。
図10は複合部品に関するクラス図である。
複合部品は既に説明を行った、複合部品ではない処理部品と同様に、処理部312を継承した部品複合部101を持ち、記憶部特定部311により記憶部32を特定する。
また部品複合部101は、内包するデータフロープログラムを、処理部品共通部31の集合として、プログラム管理部64が保持する。
複合部品はデータフロープログラムの階層化を支援する。すなわち、各処理部品は直接的に内包される複合部品のプログラム管理部64によって保持され、最上位の処理部品のみが図6で示したプログラム作成装置6のプログラム管理部64によって保持される。
複合部品は既に説明を行った、複合部品ではない処理部品と同様に、処理部312を継承した部品複合部101を持ち、記憶部特定部311により記憶部32を特定する。
また部品複合部101は、内包するデータフロープログラムを、処理部品共通部31の集合として、プログラム管理部64が保持する。
複合部品はデータフロープログラムの階層化を支援する。すなわち、各処理部品は直接的に内包される複合部品のプログラム管理部64によって保持され、最上位の処理部品のみが図6で示したプログラム作成装置6のプログラム管理部64によって保持される。
図11に図9のDFDに対応するインスタンス仕様の構造を示す。図11Aは処理部品間の関係を表したもので図5に対応する。図11Bはプログラムを管理している様子を表したもので図14に対応する。
図5と図11Aを比較すると、新たに加わった処理部品として、複合部品91が増えている。また各処理部品内の記憶部特定部(412、422、432、442)からobjAを保持しているクラスA記憶部111への接続がなくなっている。その代わりに複合部品91内の記憶部特定部913からクラスA記憶部(111)への接続がある。
複合部品91と処理部品A1(121)〜処理部品A4(124)、記憶部品s3(143)、記憶部品s4(144)との内包関係は、図11Bに表されている。
図5と図11Aを比較すると、新たに加わった処理部品として、複合部品91が増えている。また各処理部品内の記憶部特定部(412、422、432、442)からobjAを保持しているクラスA記憶部111への接続がなくなっている。その代わりに複合部品91内の記憶部特定部913からクラスA記憶部(111)への接続がある。
複合部品91と処理部品A1(121)〜処理部品A4(124)、記憶部品s3(143)、記憶部品s4(144)との内包関係は、図11Bに表されている。
実施例1では図14に示すように、記憶部品を含むすべての処理部品がプログラム管理部2011によって直接管理されていた。しかし、実施例2では図11Bに示すように複合部品91に内包される処理部品は、複合部品91内のプログラム管理部912によって管理される。
プログラム作成装置201のプログラム管理部2011が最上位の処理部品として、以下の4つの部品を管理する。
・複合部品91(部品複合部911)
・記憶部品objA(11)(クラスA記憶部111)
・記憶部品in1(141)(int記憶部511)
・記憶部品in2(142)(int記憶部521)
そして複合部品91内のプログラム管理部912が、内包する以下の6つの部品を管理する。
・処理部品A1(121)〜処理部品A4(124)内の処理部A1、A2、A3、A4(411、421、431、441)
・記憶部品s3(143)のint記憶部(531)
・記憶部品s4(144)のint記憶部(541)
プログラム作成装置201のプログラム管理部2011が最上位の処理部品として、以下の4つの部品を管理する。
・複合部品91(部品複合部911)
・記憶部品objA(11)(クラスA記憶部111)
・記憶部品in1(141)(int記憶部511)
・記憶部品in2(142)(int記憶部521)
そして複合部品91内のプログラム管理部912が、内包する以下の6つの部品を管理する。
・処理部品A1(121)〜処理部品A4(124)内の処理部A1、A2、A3、A4(411、421、431、441)
・記憶部品s3(143)のint記憶部(531)
・記憶部品s4(144)のint記憶部(541)
次にこの構成において、プログラムの実行について説明する。
実施例1と同様に、プログラム作成装置201(プログラム作成装置6のインスタンス仕様)内の処理制御部63は、図7の通りに処理を行う。
ステップS71で、プログラム管理部2011が管理している以下の処理部品を得る。複合部品91、objAを保持している記憶部品objA(11)、記憶部品in1(141)および記憶部品in2(142)
実施例1と同様に、プログラム作成装置201(プログラム作成装置6のインスタンス仕様)内の処理制御部63は、図7の通りに処理を行う。
ステップS71で、プログラム管理部2011が管理している以下の処理部品を得る。複合部品91、objAを保持している記憶部品objA(11)、記憶部品in1(141)および記憶部品in2(142)
ステップS72ではこれら全ての処理部品の処理部312に対して実行を指示する。
各々の処理部312の処理は図8に従って、既に説明したように実行される。
記憶部品objA(11)においては、実施例1と同様、結果的に何も処理を行わない。
記憶部品in1(141)においては、実施例1と同様、int記憶部511内の不図示のint型データ記憶域にあるデータを、出力ポートint部5132を通して出力ポートに書き出す。
各々の処理部312の処理は図8に従って、既に説明したように実行される。
記憶部品objA(11)においては、実施例1と同様、結果的に何も処理を行わない。
記憶部品in1(141)においては、実施例1と同様、int記憶部511内の不図示のint型データ記憶域にあるデータを、出力ポートint部5132を通して出力ポートに書き出す。
記憶部品in2(142)においても、実施例1と同様である。
複合部品91においては、入力ポート、出力ポートともに存在しないので、ステップS81、ステップS82を素通りし、ステップS83にて記憶部の特定を行う。記憶部特定部913に問い合わせ、記憶部品objA(11)を特定する。
ステップS84は、入力ポートが存在しないために何もしない。
ステップS85では、部品複合部911に対して、複合部品特有の処理の実行を指示する。
複合部品91においては、入力ポート、出力ポートともに存在しないので、ステップS81、ステップS82を素通りし、ステップS83にて記憶部の特定を行う。記憶部特定部913に問い合わせ、記憶部品objA(11)を特定する。
ステップS84は、入力ポートが存在しないために何もしない。
ステップS85では、部品複合部911に対して、複合部品特有の処理の実行を指示する。
図12に部品複合部911の、複合部品特有の処理(部品複合部101特有の処理)の流れを示す。“複合部品特有の処理”とは、複合部品が内包するデータフロープログラムの実行制御処理である。
なお以下の説明では、複合部品から見た場合、該複合部品に内包される処理部品を“子処理部品”と呼び、子処理部品から見た前記複合部品を“親複合部品”と呼ぶ。また複合部品から見た該複合部品自身を“自複合部品”と呼ぶ。
さらに子処理部品の処理部を“子処理部”と呼び、子処理部品の記憶部特定部を“子記憶部特定部”と呼び、親複合部品の処理部を“親処理部”と呼ぶ。また、自複合部品の処理部を“自処理部”と呼び、自複合部品の記憶部特定部を“自記憶部特定部”と呼ぶ。
なお以下の説明では、複合部品から見た場合、該複合部品に内包される処理部品を“子処理部品”と呼び、子処理部品から見た前記複合部品を“親複合部品”と呼ぶ。また複合部品から見た該複合部品自身を“自複合部品”と呼ぶ。
さらに子処理部品の処理部を“子処理部”と呼び、子処理部品の記憶部特定部を“子記憶部特定部”と呼び、親複合部品の処理部を“親処理部”と呼ぶ。また、自複合部品の処理部を“自処理部”と呼び、自複合部品の記憶部特定部を“自記憶部特定部”と呼ぶ。
まずステップS121で、複合部品の全ての子処理部品を取得する。これは該複合部品のプログラム管理部912が管理している処理部品共通部31を全て取得することによって行う。
次にステップS122で、取得した各々の子処理部品(処理部品共通部31)の子処理部312を通して、子記憶部特定部311が特定する記憶部32を更新する。
この際、自複合部品の自処理部は子処理部に対して、自記憶部特定部が特定する記憶部を既定の記憶部として、更新処理を指示する。
次にステップS122で、取得した各々の子処理部品(処理部品共通部31)の子処理部312を通して、子記憶部特定部311が特定する記憶部32を更新する。
この際、自複合部品の自処理部は子処理部に対して、自記憶部特定部が特定する記憶部を既定の記憶部として、更新処理を指示する。
図13に更新処理の指示を受けた子処理部の処理の流れを示す。なお、“子”処理部は、図13の説明においては“自”処理部となる。
まず、ステップS131で自記憶部特定部311が特定する記憶部32があるかどうかを調べる。もし記憶部32が特定されている場合、何もせずに更新処理を終了する。
まず、ステップS131で自記憶部特定部311が特定する記憶部32があるかどうかを調べる。もし記憶部32が特定されている場合、何もせずに更新処理を終了する。
記憶部32が特定されなかった場合は、ステップS132に移る。そしてステップS132では、親記憶部特定部311が特定する記憶部32(親処理部から更新処理を指示された際に、既定の記憶部として提示された記憶部)が自処理部品に対応する型か否かをチェックする。
自処理部品に対応する型とは、自処理部品の処理を実行する際に必要となる記憶部の型である。たとえば、処理部品A1(121)は、クラスAのオブジェクトのメソッド(メンバ関数)として実装されている。この場合、「記憶部32が対応する型である」とは、提示された記憶部32がクラスAを保持するための記憶部であるクラスA記憶部321である、ということである。
自処理部品に対応する型とは、自処理部品の処理を実行する際に必要となる記憶部の型である。たとえば、処理部品A1(121)は、クラスAのオブジェクトのメソッド(メンバ関数)として実装されている。この場合、「記憶部32が対応する型である」とは、提示された記憶部32がクラスAを保持するための記憶部であるクラスA記憶部321である、ということである。
型が一致しない場合、そもそも自処理部品の処理を実行できないため、チェックが必要となる。そこで、もし、型が異なれば何もせずに更新処理を終了する。
型が一致する場合は、ステップS133で、親記憶部特定部311が特定する記憶部32を、自記憶部特定部311が特定するよう更新する。
なお、ステップS133で更新した記憶部32と、自処理部品との間の特定関係は、表示部612によって表示されることはない。
型が一致する場合は、ステップS133で、親記憶部特定部311が特定する記憶部32を、自記憶部特定部311が特定するよう更新する。
なお、ステップS133で更新した記憶部32と、自処理部品との間の特定関係は、表示部612によって表示されることはない。
図9(または図11B)の場合、処理部品A1〜処理部品A4(121〜124)のいずれの記憶部特定部(412、422、432、442)も、記憶部32を特定していない。このため、親記憶部特定部913が特定する記憶部品objA(11)を、特定するように更新する。
以上でステップS122は終了である。
以上でステップS122は終了である。
次にステップS123で、取得した全子処理部品の子処理部312に対して実行を指示する。実行を指示された子処理部はそれぞれ独立して処理を実行する。これについては、実施例1で述べたので省略する。
さて、部品複合部911は、ステップS123で全子処理部312へ実行指示を行った後、ステップS124で終了指示を待つ。
実施例1と同様に、プログラム作成装置201の処理制御部63は、ステップS73でポート待ち状態チェックを行い、全処理部312がポート待ち状態である場合、ステップS74にて、全処理部に対して終了指示を出す。
さて、部品複合部911は、ステップS123で全子処理部312へ実行指示を行った後、ステップS124で終了指示を待つ。
実施例1と同様に、プログラム作成装置201の処理制御部63は、ステップS73でポート待ち状態チェックを行い、全処理部312がポート待ち状態である場合、ステップS74にて、全処理部に対して終了指示を出す。
部品複合部911はこの終了指示を受けると、ステップS125で全子処理部に対して終了指示を出す。これで複合部品特有の処理S85(部品複合部101特有の処理)は終了である。
次いで、ステップS86では出力データを書き出すが、複合部品91には出力ポートがないため、何もしない。
そしてステップS87において、入出力ポートをチェックし、入出力ポートが1つもないため、処理を終了する。
次いで、ステップS86では出力データを書き出すが、複合部品91には出力ポートがないため、何もしない。
そしてステップS87において、入出力ポートをチェックし、入出力ポートが1つもないため、処理を終了する。
なおステップS73における全処理部とは、プログラム作成装置201のプログラム管理部2011が管理する全処理部品共通部31の処理部のことである。そのため、図9または図11における処理部品A1(121)〜処理部品A4(124)や記憶部品s3(143)、記憶部品s4(144)のような、複合部品の子処理部品は含まない。
また、複合部品に対するポート待ち状態の問い合わせに対して、その複合部品は、子処理部品のポート待ち状態により返答を行う。
図15にこの処理の流れを示す。
まず、ステップS151で全子処理部品のポート待ち状態を問い合わせる。
次に、ステップS152で、得られたポート待ち状態が全て“ポート待ち状態”であるか否かをチェックする。
図15にこの処理の流れを示す。
まず、ステップS151で全子処理部品のポート待ち状態を問い合わせる。
次に、ステップS152で、得られたポート待ち状態が全て“ポート待ち状態”であるか否かをチェックする。
全て“ポート待ち状態”であった場合は、ステップS153で、自複合部品のポート待ち状態として“ポート待ち状態”を返す。そうでなかった場合はステップS154で“非ポート待ち状態”を返す。
以上で、最上位の処理部品(親処理部品)から子処理部品へと順に、実行指示と終了指示が出され、データフロープログラムが実行される様子を説明した。
以上で、最上位の処理部品(親処理部品)から子処理部品へと順に、実行指示と終了指示が出され、データフロープログラムが実行される様子を説明した。
以上により、オブジェクトを表す記憶部32と、メソッド(メンバ関数)を表す処理部品の間の特定関係が、表記上現れないため、プログラムの可読性が上がるという効果がある。
また開発者は“特定”するオブジェクトではなく、“処理”に注力することができるため、プログラム開発効率の低下を低減させる、という効果がある。
また開発者は“特定”するオブジェクトではなく、“処理”に注力することができるため、プログラム開発効率の低下を低減させる、という効果がある。
[実施例3]
次に子処理部品が複合部品であって、さらに子処理部品を持つ場合について説明する。
図16は本実施例のプログラム作成装置で扱うプログラムの例である。
基本的には図9(a)のプログラムから図9(b)のプログラムを生成する場合と同様の手順で、図16(a)のプログラムから図16(b)のプログラムが生成される。
図16(b)に示すように、”親複合部品”に内包される”親複合部品”が存在する場合、「子処理部品から見た親複合部品」および「その親複合部品から見た親複合部品」のいずれも、子処理部品から見た”先祖複合部品”とも呼ぶ。つまり、複合部品163は、処理部品B1(1631)から見た”先祖複合部品”と呼び、また複合部品161も、処理部品B1(1631)から見た”先祖複合部品”と呼ぶ。
次に子処理部品が複合部品であって、さらに子処理部品を持つ場合について説明する。
図16は本実施例のプログラム作成装置で扱うプログラムの例である。
基本的には図9(a)のプログラムから図9(b)のプログラムを生成する場合と同様の手順で、図16(a)のプログラムから図16(b)のプログラムが生成される。
図16(b)に示すように、”親複合部品”に内包される”親複合部品”が存在する場合、「子処理部品から見た親複合部品」および「その親複合部品から見た親複合部品」のいずれも、子処理部品から見た”先祖複合部品”とも呼ぶ。つまり、複合部品163は、処理部品B1(1631)から見た”先祖複合部品”と呼び、また複合部品161も、処理部品B1(1631)から見た”先祖複合部品”と呼ぶ。
<プログラムを生成する処理の手順>
1)まず、メイン部分に着目する。
2)オブジェクト変数objB,objC1,objC2と、入力変数inBと、出力変数outCとを記憶部品として配置・表示する。
3)関数outerに注目する。関数outerに相当する複合部品161を配置・表示する。
4)#pragma dataflowディレクティブから、objBはオブジェクトであることがわかるため、複合部品161とobjBに対応する記憶部品との間を点線で結ぶ。objC1,objC2は”pass”となっているので、点線で結ばない。
5)関数outerの処理に注目する。
6)最初のinner()呼び出しに相当する複合処理部品163を配置・表示する。
7)Innerの#pragma dataflowディレクティブで最初の2つの引数はオブジェクトであるとわかる。しかし、outerの#pragma dataflowディレクティブで第一引数bがobjectとなっており、既にobjBで点線が書かれているので、複合処理部品163との間には線を引かない。一方、innerの第二引数であるcはouterの#pragma dataflowディレクティブで”pass”となっているため、bに相当するオブジェクトobjC1(1602)の記憶部品との間に点線を引く。
8)同様に複合処理部品164関連の処理も行う。
9)その他は図9を生成する場合と同様である。
なお、メイン部分の入力変数inBは記憶部品162として生成し、出力変数outCは記憶部品165として生成し、outer内部のso1とso2、inner内部のsi1とsi2は記憶部品として生成していないが、これはコンパイラが判断できる。この技術は一般的であるため、詳細は割愛する。
1)まず、メイン部分に着目する。
2)オブジェクト変数objB,objC1,objC2と、入力変数inBと、出力変数outCとを記憶部品として配置・表示する。
3)関数outerに注目する。関数outerに相当する複合部品161を配置・表示する。
4)#pragma dataflowディレクティブから、objBはオブジェクトであることがわかるため、複合部品161とobjBに対応する記憶部品との間を点線で結ぶ。objC1,objC2は”pass”となっているので、点線で結ばない。
5)関数outerの処理に注目する。
6)最初のinner()呼び出しに相当する複合処理部品163を配置・表示する。
7)Innerの#pragma dataflowディレクティブで最初の2つの引数はオブジェクトであるとわかる。しかし、outerの#pragma dataflowディレクティブで第一引数bがobjectとなっており、既にobjBで点線が書かれているので、複合処理部品163との間には線を引かない。一方、innerの第二引数であるcはouterの#pragma dataflowディレクティブで”pass”となっているため、bに相当するオブジェクトobjC1(1602)の記憶部品との間に点線を引く。
8)同様に複合処理部品164関連の処理も行う。
9)その他は図9を生成する場合と同様である。
なお、メイン部分の入力変数inBは記憶部品162として生成し、出力変数outCは記憶部品165として生成し、outer内部のso1とso2、inner内部のsi1とsi2は記憶部品として生成していないが、これはコンパイラが判断できる。この技術は一般的であるため、詳細は割愛する。
記憶部品inB(162)から処理163、処理164と処理され、記憶部品outC(165)に結果が出力される。
処理163と処理164は、両者ともクラスBのメソッドである処理B1とクラスCのメソッドである処理C1を、順に適用する。
処理163内の処理B1も、処理164内の処理B1も、同一の記憶部品objB(1601)を特定している。
一方、処理163内の処理C1(1632)は記憶部品objC1(1602)を特定し、処理164内の処理C1(1642)は記憶部品objC2(1603)を特定している。
処理163と処理164は、両者ともクラスBのメソッドである処理B1とクラスCのメソッドである処理C1を、順に適用する。
処理163内の処理B1も、処理164内の処理B1も、同一の記憶部品objB(1601)を特定している。
一方、処理163内の処理C1(1632)は記憶部品objC1(1602)を特定し、処理164内の処理C1(1642)は記憶部品objC2(1603)を特定している。
図17に図16のプログラムが管理されている様子を示す。これは図11Bに対応するものである。図11Bと同様に処理部品が階層的に管理されている。
処理の流れは、実施例2で説明したものとほぼ同じであるため、異なる部分のみを説明する。
実施例2と異なる部分は、複合部品の部品複合部101の処理の全子記憶部特定部の更新(ステップS122)である。
処理の流れは、実施例2で説明したものとほぼ同じであるため、異なる部分のみを説明する。
実施例2と異なる部分は、複合部品の部品複合部101の処理の全子記憶部特定部の更新(ステップS122)である。
記憶部特定部は、複合部品がいずれの記憶部に対してデータの読み書きをするかを定める。
複合部品は、データフロープログラムを内包し、内包したデータフロープログラムを処理内容として処理を行う部品であって、
処理部品が複合部品に直接的に内包されており、記憶部特定部により複合部品が記憶部を特定している場合に、
複合部品に直接的に内包されている処理部品は、複合部品が特定する記憶部に対してデータの読み書きをする。
複合部品は、データフロープログラムを内包し、内包したデータフロープログラムを処理内容として処理を行う部品であって、
処理部品が複合部品に直接的に内包されており、記憶部特定部により複合部品が記憶部を特定している場合に、
複合部品に直接的に内包されている処理部品は、複合部品が特定する記憶部に対してデータの読み書きをする。
図16(b)を用いて説明する。
複合部品163は、データフロープログラムを内包し、内包したデータフロープログラムを処理内容として処理を行う部品である。
処理部品B1(1631)は複合部品163に直接的に内包されている。記憶部特定部により複合部品163が記憶部品objC1(1602)を特定している。
このような場合に、複合部品163に直接的に内包されている処理部品B1(1631)は、複合部品163が特定する記憶部品objC1(1602)に対してデータの読み書きをする。
複合部品163は、データフロープログラムを内包し、内包したデータフロープログラムを処理内容として処理を行う部品である。
処理部品B1(1631)は複合部品163に直接的に内包されている。記憶部特定部により複合部品163が記憶部品objC1(1602)を特定している。
このような場合に、複合部品163に直接的に内包されている処理部品B1(1631)は、複合部品163が特定する記憶部品objC1(1602)に対してデータの読み書きをする。
一方、処理部品B1(1631)は、複合部品163に直接的に内包されているが、複合部品161に直接的に内包されてはいない。記憶部特定部により複合部品161は記憶部品objB(1601)を特定している。
このような場合、複合部品161に、間接的には内包されているが、直接的に内包されていない処理部品B1(1631)は、複合部品161が特定する記憶部品objB(1601)に対してデータの読み書きはしない。
このような場合、複合部品161に、間接的には内包されているが、直接的に内包されていない処理部品B1(1631)は、複合部品161が特定する記憶部品objB(1601)に対してデータの読み書きはしない。
図18に全子記憶部特定部の更新(ステップS122)の詳細を示す。
まずステップS181で自記憶部特定部311によって記憶部32が特定されているかをチェックする。
もし記憶部32が特定されていた場合、ステップS182で全子処理部312に対して、前記特定された記憶部32を既定の記憶部として、子記憶部特定部311の更新を指示する。
指示を受けた子処理部312では、既に説明した通り、図13の処理の流れによって更新処理を行う。
最後にステップS183で、全子処理部312に対して、親処理部312から既定の記憶部として提示された記憶部32を既定の記憶部として、子記憶部特定部311の更新を指示する。
こうすることで、親処理部312からの自記憶部特定部311の更新指示一回につき、各々の子記憶部特定部311に対して一回または二回の更新指示を行うことになる。
まずステップS181で自記憶部特定部311によって記憶部32が特定されているかをチェックする。
もし記憶部32が特定されていた場合、ステップS182で全子処理部312に対して、前記特定された記憶部32を既定の記憶部として、子記憶部特定部311の更新を指示する。
指示を受けた子処理部312では、既に説明した通り、図13の処理の流れによって更新処理を行う。
最後にステップS183で、全子処理部312に対して、親処理部312から既定の記憶部として提示された記憶部32を既定の記憶部として、子記憶部特定部311の更新を指示する。
こうすることで、親処理部312からの自記憶部特定部311の更新指示一回につき、各々の子記憶部特定部311に対して一回または二回の更新指示を行うことになる。
図19は、以上の処理を図16(図17)のプログラムに対して実行した場合の、記憶部特定部311の更新指示および処理部品が特定する記憶部32の状態遷移を示す。
まずステップS1901の初期状態では、処理部品B1(1631)、処理部品C1(1632)、処理部品B1(1641)、処理部品C1(1642)のいずれも記憶部を特定していない。
次にステップS1902で複合部品161が複合部品163に対し、記憶部品objB(1601)を既定の記憶部として、記憶部特定部311を更新するよう指示する。複合部品163の部品複合部16301はステップS181、ステップS182と処理を進める。そして、まず自記憶部特定部16302が特定している記憶部品objC1(1602)を既定の記憶部として、処理部品B1(1631)の記憶部特定部を更新するように指示する。
しかし、処理部品B1(1631)はクラスBのオブジェクトを要求しているのに対し、クラスCのオブジェクトが提示されたため(ステップS132)、何もしない(ステップ1903)。
まずステップS1901の初期状態では、処理部品B1(1631)、処理部品C1(1632)、処理部品B1(1641)、処理部品C1(1642)のいずれも記憶部を特定していない。
次にステップS1902で複合部品161が複合部品163に対し、記憶部品objB(1601)を既定の記憶部として、記憶部特定部311を更新するよう指示する。複合部品163の部品複合部16301はステップS181、ステップS182と処理を進める。そして、まず自記憶部特定部16302が特定している記憶部品objC1(1602)を既定の記憶部として、処理部品B1(1631)の記憶部特定部を更新するように指示する。
しかし、処理部品B1(1631)はクラスBのオブジェクトを要求しているのに対し、クラスCのオブジェクトが提示されたため(ステップS132)、何もしない(ステップ1903)。
次に複合部品163の部品複合部16301は処理部品C1(1632)に対しても同様に指示を与える。その結果処理部品C1(1632)は、記憶部品objC1(1602)を特定する(ステップS1904)。
次に複合部品163の部品複合部16301はステップS183で、複合部品161から既定の記憶部として提示された記憶部品objB(1601)を既定の記憶部として、処理部品B1(1631)に更新指示を出す。その結果処理部品B1(1631)は記憶部品objB(1601)を特定する(ステップS1905)。
次に複合部品163の部品複合部16301はステップS183で、複合部品161から既定の記憶部として提示された記憶部品objB(1601)を既定の記憶部として、処理部品B1(1631)に更新指示を出す。その結果処理部品B1(1631)は記憶部品objB(1601)を特定する(ステップS1905)。
さらに複合部品163の部品複合部16301は、記憶部品objB(1601)を既定の記憶部として処理部品C1(1632)に更新指示を出すが、既に記憶部は特定されているため何もしない(ステップS131、ステップ1906)。
これで複合部品163の更新処理は終了し、複合部品161は複合部品164に対し、記憶部品objB(1601)を既定の記憶部として、更新を指示する(ステップS1907)。
これで複合部品163の更新処理は終了し、複合部品161は複合部品164に対し、記憶部品objB(1601)を既定の記憶部として、更新を指示する(ステップS1907)。
以下、同様の処理を行い、ステップS1908〜ステップS1911まで処理を進めると、処理部品B1(1631)、処理部品C1(1632)、処理部品B1(1641)、処理部品C1(1642)がそれぞれ記憶部32を特定する。
以上で、複合部品が複合部品を内包する場合の、処理部品の記憶部の特定方法を説明した。
なお、以上の説明では、複合部品から、それが内包する処理部品へと記憶部の特定を伝播させていった。しかし本発明はこのような実施方法に限定するものではない。最下層の処理部品から、親複合部品、さらにその親複合部品と、祖先複合部品を順に辿っていき、要求する型に合った記憶部で更新してもよい。
以上で、複合部品が複合部品を内包する場合の、処理部品の記憶部の特定方法を説明した。
なお、以上の説明では、複合部品から、それが内包する処理部品へと記憶部の特定を伝播させていった。しかし本発明はこのような実施方法に限定するものではない。最下層の処理部品から、親複合部品、さらにその親複合部品と、祖先複合部品を順に辿っていき、要求する型に合った記憶部で更新してもよい。
また本実施例では記憶部の更新指示を伝播させていったが、本発明における記憶部の更新指示方法はこれに限るものではない。たとえば各処理部品ごとに特定する可能性のある記憶部を順に並べて、チェックしていってもよい。
以上のように“特定”するオブジェクトを階層化することにより、開発者はさらに“処理”に注力することができるため、プログラム開発効率の低下を低減させる、という効果がある。
以上のように“特定”するオブジェクトを階層化することにより、開発者はさらに“処理”に注力することができるため、プログラム開発効率の低下を低減させる、という効果がある。
(その他の実施形態)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
本発明はプログラム作成装置に関し、特にプログラム開発手法としてデータフローを基本とした上で、オブジェクト指向で設計された既存資産や最新アルゴリズムの流用、オブジェクト指向での設計経験・スキルの活用を促進する場合に用いて好適なものである。
11…オブジェクトobjAを表す記憶部品
121〜124…処理部品
131〜137…データフロー
141〜144…プログラムの入出力となるint型のデータを保持する記憶部品
31…処理部品共通部のサブシステム
32…記憶部のクラス。記憶部特有の処理部も含む。
321…クラスA型のデータを保持する記憶部のクラス
322…int型のデータを保持する記憶部のクラス
331〜334…処理部品特有の処理を行う処理部のクラス
341…入力ポートのインターフェース
342…出力ポートのインターフェース
351…int型の入力ポートを表すクラス
352…int型の出力ポートを表すクラス
6…プログラム作成装置(クラスで表したパッケージ)
64…プログラムを処理部品共通部の集合として管理するプログラム管理部のクラス
201…プログラム作成装置
91…複合部品
101…複合部品特有の処理を行う部品複合部のクラス
161,163,164…複合部品
162、165…プログラムの入出力となるint型のデータを保持する記憶部品
1601〜1603…オブジェクトを表す記憶部品
121〜124…処理部品
131〜137…データフロー
141〜144…プログラムの入出力となるint型のデータを保持する記憶部品
31…処理部品共通部のサブシステム
32…記憶部のクラス。記憶部特有の処理部も含む。
321…クラスA型のデータを保持する記憶部のクラス
322…int型のデータを保持する記憶部のクラス
331〜334…処理部品特有の処理を行う処理部のクラス
341…入力ポートのインターフェース
342…出力ポートのインターフェース
351…int型の入力ポートを表すクラス
352…int型の出力ポートを表すクラス
6…プログラム作成装置(クラスで表したパッケージ)
64…プログラムを処理部品共通部の集合として管理するプログラム管理部のクラス
201…プログラム作成装置
91…複合部品
101…複合部品特有の処理を行う部品複合部のクラス
161,163,164…複合部品
162、165…プログラムの入出力となるint型のデータを保持する記憶部品
1601〜1603…オブジェクトを表す記憶部品
Claims (8)
- データフロープログラムを作成するプログラム作成装置であって、
前記データフロープログラムを構成する処理部品がいずれの記憶手段に対してデータの読み書きをするかを定める特定手段を備える
ことを特徴とするプログラム作成装置。 - 前記特定手段は、複数の前記処理部品の各々が備え、各々の前記処理部品が特定する記憶手段を定める
ことを特徴とする請求項1記載のプログラム作成装置。 - 処理部品と、複合部品と、前記複合部品がデータの読み書きをする記憶手段とを含むデータフロープログラムを作成し、表示手段に表示するプログラム作成装置であって、
前記複合部品がいずれの記憶手段に対してデータの読み書きをするかを定める特定手段を備え、
前記複合部品は、データフロープログラムを内包し、内包したデータフロープログラムを処理内容として処理を行う部品であって、
前記処理部品が前記複合部品に直接的に内包されており、前記特定手段により該複合部品が記憶手段を特定している場合に、
前記複合部品に直接的に内包されている前記処理部品は、前記複合部品が特定する記憶手段に対してデータの読み書きをする
ことを特徴とするプログラム作成装置。 - 前記処理部品がデータの読み書きをする記憶手段を定める第1の特定手段と、
前記複合部品がデータの読み書きをする記憶手段を定める第2の特定手段と
を備えることを特徴とする請求項3記載のプログラム作成装置。 - 前記特定手段は、
前記処理部品がいずれの記憶手段も特定しなかった場合に、
前記処理部品を含む親複合部品によって特定される記憶手段、前記親複合部品の親複合部品によって特定される記憶手段、さらにその親複合部品によって特定される記憶手段というように先祖複合部品によって特定される記憶手段を順に辿っていき、
最初に特定される記憶手段を、前記処理部品がデータの読み書きをする記憶手段と定めることを特徴とする請求項3または請求項4に記載のプログラム作成装置。 - 前記記憶手段と前記処理部品または前記複合部品とを表示する表示手段と、
前記処理部品と、前記処理部品または前記複合部品が特定する前記記憶手段とを指定する指定手段と
をさらに備えることを特徴とする請求項1乃至5のいずれか1項に記載のプログラム作成装置。 - 前記表示手段は、
前記指定手段によって指定された前記処理部品または複合部品と、前記処理部品または前記複合部品が特定する記憶手段との特定関係を表す視覚形態を表示し、
前記視覚形態は、
データフロープログラムによって表される、処理部品または複合部品の処理に対する、入力データフローまたは出力データフローを表す視覚形態と異なり、さらにデータの流れを表す視覚形態とも異なる
ことを特徴とする請求項6に記載のプログラム作成装置。 - コンピュータを、請求項1乃至7の何れか1項に記載のプログラム作成装置が有する各手段として機能させるためのコンピュータプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2014151235A JP2016024794A (ja) | 2014-07-24 | 2014-07-24 | プログラム作成装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2014151235A JP2016024794A (ja) | 2014-07-24 | 2014-07-24 | プログラム作成装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2016024794A true JP2016024794A (ja) | 2016-02-08 |
Family
ID=55271455
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2014151235A Pending JP2016024794A (ja) | 2014-07-24 | 2014-07-24 | プログラム作成装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2016024794A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11461118B2 (en) | 2017-06-21 | 2022-10-04 | Kabushiki Kaisha Toshiba | Flow-based programming environment for persistent execution and recovery |
-
2014
- 2014-07-24 JP JP2014151235A patent/JP2016024794A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11461118B2 (en) | 2017-06-21 | 2022-10-04 | Kabushiki Kaisha Toshiba | Flow-based programming environment for persistent execution and recovery |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20030200533A1 (en) | Method and apparatus for creating software objects | |
JP5021193B2 (ja) | 拡張可能ワークフローモデルの宣言的表現 | |
Li et al. | A pattern-based approach to protocol mediation for web services composition | |
US20120227028A1 (en) | Graphical programming object population user interface autogeneration | |
US12099818B2 (en) | Plugin-oriented functional programming system configured with software components | |
Eichelberger et al. | Experiences with the model-based generation of big data pipelines | |
Srinivasan et al. | CODE: a development environment for OWL-S Web services | |
US11256486B2 (en) | Method and computer program product for an UI software application | |
Jena et al. | Model based test case generation from UML sequence and interaction overview diagrams | |
Nguyen et al. | WorkWays: Interactive workflow-based science gateways | |
Annighoefer et al. | Open source domain-specific model interface and tool frameworks for a digital avionics systems development process | |
JP2016024794A (ja) | プログラム作成装置 | |
Chan et al. | High-level abstractions for message-passing parallel programming | |
Lehmann et al. | Development of context-adaptive applications on the basis of runtime user interface models | |
Schleipen et al. | Semantic integration by means of a graphical OPC Unified Architecture (OPC-UA) information model designer for Manufacturing Execution Systems | |
Hossain et al. | Extensibility challenges of scientific workflow management systems | |
KR20100137364A (ko) | 패턴을 그래픽적으로 구성 및 가시화하기 위한 툴 | |
Sugrue | Getting Started with UML | |
Almeida et al. | A component-based adaptation approach for multi-cloud applications | |
Salem et al. | A comparison of model transformation tools: Application for Transforming GRAI Extended Actigrams into UML Activity Diagrams | |
Kelly | Applying functional programming theory to the design of workflow engines. | |
Chin Jr et al. | Scientist-centered workflow abstractions via generic actors, workflow templates, and context-awareness for groundwater modeling and analysis | |
Singh et al. | Design Patterns and Best Practices in Java: A comprehensive guide to building smart and reusable code in Java | |
Sydow et al. | A safe and user-friendly graphical programming model for parallel stream processing | |
Rieger | Interoperability of bpmn and maml for model-driven development of business apps |