2.2.3 コンポーネントとインスタンス

Visual LANSAのオブジェクト指向モデルでは、コンポーネントとコンポーネントのインスタンスとの間に重要な区別があります。

フォームにコンポーネントを置く場合は、実際にはコンポーネントではなく、コンポーネントのインスタンスが置かれます。コンポーネントは、インスタンスのモデルとして機能します。コンポーネントのすべてのインスタンスは、コンポーネントと同じプロパティ、イベント、およびメソッドを持ちます。ただし、プロパティの値を変更したり、特定のインスタンスのイベント・ルーチンを作成することができます。そのようにした場合、コンポーネントそのものは変更されません。

例としてプッシュ・ボタン・コンポーネントを取り上げます。フォームのボタンをドラッグするたびに、以下が同じになります。

プロパティの一部を変更します。通常は、最低でもキャプション (Okなど) が変更されます。そしてボタンの Click イベントのロジックを記述します。

そのため、アプリケーションのボタンのすべてのインスタンスは、ボタン・コンポーネントの特性を共有しますが、独自の特性も持ちます。

フィールドをフォームにドラッグしても同じことが起こります。ただし、ほとんどの場合は、フィールドのインスタンスをそのまま使用し、何らかの方法で変更することはありません。

同様に、フォームのインスタンスを他のフォームに含めることもできます。例えば、多くのアプリケーションで使用される標準フォームを作成する場合があります。このフォームをアプリケーションで使用するには、アプリケーションのメイン・フォーム(オーナー・フォーム)にこのフォームを置きます。置かれるフォームは、標準フォームのインスタンスです。高さ、幅、キャプションなどのインスタンスのプロパティを変更できます。しかし標準フォームは変更されません。

同じフォームにコンポーネントの複数のインスタンスを置くことができる

コントロールの場合は、プッシュ・ボタン、チェック・ボックス、タブ・シートなど、1つのコンポーネントの複数のインスタンスを同じフォームに置くことがよくあります。インスタンスは別の名前をもちます。例えば、同じフォームに置かれる2つのプッシュ・ボタンの名前は、デフォルトでは#PHBN_1と#PHBN_2です。

同じフォームに1つのフィールドの複数のインスタンスを置くこともできますが、そのようにする理由はほとんどありません。

複数の同じウィンドウを同時に表示する場合は、オーナー・フォームにフォームの複数のインスタンスを置きます。例えば、アプリケーションで従業員の詳細を表示する複数のウィンドウを同時に開く場合があります。この場合、フォームの複数のインスタンスをオーナー・フォームに配置します。

コンポーネントの変更

フィールドまたはフォームのコンポーネント定義を変更できます。コントロール(ボタン、リスト、タブ・シートなど)の定義は変更できません。こちらは定義済みです。

フィールドまたはフォームの定義を変更する場合、インスタンスで特別に変更をオーバーライドするケース以外は、インスタンスも変更されます。

例えば、フィールド定義のフィールドの記述を変更すると、すべてのフォームにあるフィールドのすべてのインスタンスの記述が変更されます。このように、インスタンスは単なるコピーではなく、実際にコンポーネントにリンクしています。

アプリケーションでインスタンス独自のキャプションを使用することを指定した場合のみ、記述は変更されません。

同様に、キャプションなどのフォームの定義を変更すると、すべてのインスタンスのキャプションが変更されます。この場合もインスタンスでキャプションをオーバーライドする場合は、このようにはなりません。