Q15:p11 接続元コンポーネントと接続先コンポーネントの関係がいまいち、良くわかりません。
Q15-1:
実践編p11でガントチャートコンポーネントの接続元がアプリケーションコンポーネントになっています。接続元は、テーブルコンポーネントでも良いと思いますが、何故、アプリケーションコンポーネントを接続元としているのでしょうか?接続先はテーブルのデータを設定することになっています。すなわち、ガントチャートとテーブルはデータの受け渡しの関係にあります。これらを直接つながなくても良いのでしょうか?やはり、接続元コンポーネントと接続先コンポーネントの関係がいまいち、良くわかりません。これの関係をお教え下さいますようお願い申し上げます。
A15-1:
イベントが処理実行のためのきっかけであり、接続元コンポーネントの役割が、処理実行のきっかけであるイベントを発生することであることは、すでにご理解いただいていることと存じます。そして、2009/9/4のご質問とそれに対する2009/9/7の回答、
>> 「きっかけ」というのは、「きっかけ」のそれ以上でもそれ以下でもないという意味でしょうか?すなわち、接続元のコンポーネントが出力したデータや
イベントなどの情報を接続先は全く引用しないと考えても宜しいのでしょうか?すなわち、接続元から接続先へとデータの伝達はなく、両者の関係は、単に実行のタイミングのみによって決まる。
> 基本的には、イベントは「きっかけ」以上でも以下でもありません。ただし、イベント自体は内部にデータを持っており、接続先コンポーネントは、処理の実行
に際してそれらを利用することもできます。しかしながら、これは、イベントが持つデータの利用や受け渡しを強制するものではありません。
にありますように、接続元コンポーネントから接続先コンポーネントへのデータの伝達と、イベントによる接続とは、原則として別のものです。すなわち、イベントで接続されているからといって、接続元コンポーネントから接続先コンポーネントへデータを渡さなければならないということではありません。
一方、接続先コンポーネントに対して、接続元コンポーネント以外からはデータを渡せないのかというと、そのようなことはなく、任意のコンポーネントからデータを渡すことが可能です。このことは、2009/9/8のご質問とそれに対する2009/9/9の回答、
>> 「取得する」は、そのメッソドを設定しようとしているコンポーネントにおいて、そのコンポーネント自身から取得すると教わりました。
>> しかし、そもそもそのコンポーネントが保持しているものをあえてそのコンポーネントが取得する必要があるのでしょうか?
> 「取得する」とは、「設定する」メソッドを実行するコンポーネントが、自分自身が保持しているデータを手に入れるために実行する、というものではありません。
> 例えば、イメージビューワーの「イメージデータを取得する」メソッドは、「イメージビューワーからイメージデータを取得する」ということだけを行うもの
で、「イメージビューワーが自分自身からイメージデータを取得して自分自身に取り入れる」という類のものではありません。
> 一般に、「取得する」メソッドを実行しただけの段階では、取得したデータをどのコンポーネントが利用するのかは決まっていません。言い換えると、取得した
データをどのコンポーネントがどのように利用するのかは、別途、指定する必要があるということです。
> 通常、あるコンポーネントから取得したデータは、他のコンポーネントが利用することになります(自分自身で利用することもありますが、今はそれには触れま
せん)。「設定する」メソッドは、その利用の仕方の1つです。処理の実行は接続先コンポーネントが行います。処理の実行に他のコンポーネントから取得した
データが必要となる場合には、そのデータは接続先コンポーネントが実行するメソッドの引数として渡されます。
に記されている通りです。
実践編p.11のイベント接続につきましても、「データの伝達」ではなく「処理実行のきっかけ」という観点でご覧頂きますと、理解が容易かと存じます。
[アプリケーションコン]ポーネントからは、アプリケーションが起動したとき、すなわち、[実行]あるいは[実行(設定可)]ボタンをクリックしたときに「アプリケーション開始イベント」が発生します。そして、その発生イベントを受け取ったときに[ガントチャート]コンポーネントが「ガントチャートのデータを設定する(PFObjectTable)」メソッドを実行することになります。
p.13の図に記述されている動作([ガントチャート]コンポーネントをドラッグする前の状態)を1つ1つたどると以下のようになります。
(1) [実行]あるいは[実行(設定可)]ボタンのクリックにより、[アプリケーション]コンポーネントから「アプリケーション開始イベント」が発生する。
(2) [フレーム]コンポーネントが「アプリケーション開始イベント」を受け取り、「フレームを表示する()」メソッドを実行する。
(3) [ガントチャート]コンポーネントが「アプリケーション開始イベント」を受け取り、「ガントチャートのデータを設定する(PFObjectTable)」メソッドを 実行する。
仮に、[ガントチャート]コンポーネントを「アプリケーション開始イベント」に接続していなかったとした場合には、上述の(3)の処理が行われないことになります。すなわち、[ガントチャート]コンポーネントにガントチャートのデータ(テーブルデータ)が設定されないため、フレームは表示されるものの、ガントチャートは空のままとなります。
アプリケーション実行時にガントチャートのグラフを表示するようにする、それが「アプリケーション開始イベント」にガントチャートを接続する理由です。
このあと、実践編p.16以降では、[テーブル]コンポーネントと[ガントチャート]コンポーネントを接続する作業を行います。この接続は、テーブルのデータをガントチャートへ渡すために必要だから行われるというわけではありません。[ガントチャート]コンポーネントの「ガントチャートのデータを設定する
(PFObjectTable)」メソッド実行のタイミングを指定するために行われます。この場合、そのタイミング、すなわち処理実行のきっかけは、「テーブルのデータが更新されたとき」になります。
言い換えると、実践編Lesson.11のアプリケーションは以下の仕様であるということです。
「[ガントチャート]コンポーネントの『ガントチャートのデータを設定する(PFObjectTable)』メソッドを実行するきっかけ(タイミング)は2つある。1つはアプリケーションが実行された時で、もう1つはテーブルのデータが更新されたときである。」
繰り返しとなりますが、イベント接続はデータを渡す経路を示したものではなく、処理実行のきっかけおよび処理実行の順序を示したものです。「データの受け渡し」ではなく、「処理実行のきっかけ」という観点からイベント接続の図をご覧になると、ご理解しやすいのではないかと存じます。