以下では次のトピックについて説明します。
クラスビルダは、Natural クラスを階層構造で表示し、クラスおよびそのコンポーネントを効率的に管理するために使用できるツールです。
Natural クラスは、"実際の" Natural オブジェクト(オブジェクトデータエリアなど)やクラスソースにのみ存在するオブジェクト(インターフェイスコンポーネントなざ)などのさまざまなコンポーネントで構成できます。
クラスビルダは、クラスの各コンポーネントをノードの形で表します。 これらのノードを選択することにより、クラスおよびそのコンポーネントをコンテキストに対応した方法で管理できます。
このセクションでは、クラスビルダを使用して Natural クラスを作成および変更する方法について説明します。 Natural クラスの一般的な使用法については、「NaturalX について」(『プログラミングガイド』)の「クラスの定義」を参照してください。
クラスビルダには、次の機能が備えられています。
一般的な Natural ユーザーインターフェイスと完全に統合されています。
クラスのコンポーネントは、Natural モジュールと同じようにノードとして表示されます。 各タイプのノードには特殊なアイコンが割り当てられており、そのコンポーネントの詳細情報が表示されます。
クラスで使用される Natural オブジェクト(ODA など)は、クラスビルダで管理できます(編集、STOW など)。
クラスおよびインターフェイス GUID(グローバルユニーク ID)は、生成され、非表示になります。
クラスコメント(クラスコンポーネントごとに 1 つのコメント)は、クラスビルダで作成および変更できます。
クラスソースは自動的に生成されます。
クラスビルダでは、構文的に正しければあらゆるクラスを管理できます。 クラスソースの変更にはプログラムエディタも使用できますが、クラスビルダを使用することをお勧めします。 プログラムエディタで変更し、構文エラーが含まれた状態で保存されたクラスは、クラスビルダで開けなくなることに注意してください。
クラス構文は非常に "柔軟" です。つまり、構文構造が異なっていても、ランタイム時に同じ処理を行うことができます。 以前の Natural バージョンではユーザーがクラスコードをすべて自分で入力する必要があったため、これは非常に重要です。 クラスビルダではこの必要がなくなり、クラスビルダでクラスコードが生成され、クラスで使用される Natural オブジェクトが作成されます。 クラスビルダでは、最も妥当なコードのみが生成されます。
この理由により、次の機能はクラスビルダでサポートされていません。
新しい GUID LDA の作成:
クラスビルダでは、クラスの GUID およびインターフェイスが生成されます。 GUID を自分で定義する場合、クラスビルダ外で LDA を作成してから、それをクラスにリンクする必要があります。
新しいインラインデータ定義の作成:
クラスビルダには、新しいデータエリアの作成機能のみが用意されています。 これは、データ定義は複数の場所(クラス内のメソッドパラメータおよびメソッドサブプログラムなど)で使用されるのが一般的であり、同じインラインデータ定義が複数回使用されると障害が発生しやすくなるためです。
クラスビルダで割り当てを行うためのインラインデータ定義のデータの使用:
一意の ID およびプロパティ実装のためにデータ定義をクラスコンポーネントに割り当てる必要がある場合、クラスビルダでは、対応するデータエリアからすべてのデータ定義のリストが提供されます。 インラインデータ定義のデータは、このリストには含まれません。
これは、例えば、インラインで定義されるオブジェクトデータ変数を、プロパティ実装として使用できないことを意味します。
クラスビルダでは、すべてのクラス構文構造を作成することはできませんが、これらの構造を持つ既存のクラスを読み込み、それらのクラスを使用して構造を変更することはできます。
構文に誤りがあるために、クラスビルダでクラスを読み込むことができない場合は、エラーメッセージが表示され、プログラムエディタが起動されます。 構文エラーは、プログラムエディタで修正する必要があります。 保存済みのクラスは、クラスビルダで開くことができます。
注意:
クラスビルダでクラスを保存すると、クラスソースが生成されます。 これは、段落付けなどの特殊なソース形式がすべて失われることを意味します。
クラスビルダでクラスを開くと、クラスソースからコンテンツが読み込まれ、内部構造で保存されます。 クラスを変更すると、変更は内部構造でのみ実行されます。 変更内容は Natural のすべてのビューに表示されます。 したがって、例えば、新しいインターフェイスをライブラリワークスペースに追加すると、このインターフェイスのノードもクラスの "インターフェイス" リストビューに作成されます。 変更を保存するには、クラスに対して
、 、または を実行する必要があります。新しいクラスを作成しても、新しいクラスモジュールは自動的に作成されません。 この作成は、クラスに対して
、 、または を実行した場合にのみ行われます。 このため、"新しい" クラスは、初めて保存されるまで、ライブラリワークスペースのファイルビューには表示されません。コマンドを使用すると、クラスに適用した変更を削除できます。 このコマンドは、クラスモジュールに含まれていた状態(最後に保存した状態など)にクラスを復元します。
Natural の終了時に未保存のクラスが存在すると、クラスを保存するかどうかがユーザーに尋ねられます。
クラスビルダは、クラスソースで検出されたすべてのコメントをクラスの 1 つのコンポーネントに割り当てようとします。 コメントは通常、次のクラスコンポーネントに割り当てられます。 例えば、インターフェイスの定義の前に検出されたコメントは、このインターフェイスのコメントとみなされます。
すべてのクラスコンポーネントノードで使用できるノードのプロパティ」を参照してください。
メニュー項目を使用すると、コメントを作成および変更できます。 詳細については、「注意:
クラスビルダでクラスを初めて読み込むとき、ユーザーが予期しないコンポーネントにコメントが割り当てられる可能性があります。 クラスの保存時にコメントが失われることはありませんが、ユーザーは、コメントが正しいコンポーネントに割り当てられているかどうかを確認する必要があります。
クラスビルダでクラスを初めて保存するとき、すべてのコメントは特殊なタグでマークされます。 これにより、クラスビルダで後からこのクラスを読み込むときに、コメントの割り当てが正しいことを確認することができます。
クラスビルダは、Natural の論理ビューとフラットビューで使用できます。 Natural オブジェクトをツリービューまたはリストビューのノードとして表示する、一般的な Natural ユーザーインターフェイスと完全に統合されています。
ライブラリワークスペースまたはアプリケーションワークスペースのツリービューでは、クラスノードを展開してクラスを "開く" ことができます。 クラスノードは階層的にグループ化されています。 例えば、インターフェイスはクラスノードの子であり、メソッドはインターフェイスノードの子になります。 すべてのクラスノードには、他のすべてのノードと同じ機能(ノード固有の操作が可能なコンテキストメニューなど)が用意されています。 子ノードが存在するほとんどのクラスノードは、このノードのすべての子が表示されるリストビューとして開くことができます。 リストビューには、ノードに関する詳しい情報(オブジェクトデータエリアが存在するライブラリなど)が表示されます。 リストビューのノードには、対応するツリービューのノードと同じコンテキストメニューがあります。
以下では次のトピックについて説明します。
論理ビューのクラスノードは、クラス名(つまリ、このクラスのオブジェクトを CREATE OBJECT
ステートメントで作成するときに使用される名前)で示されます。
論理ビューでは、ノードがそのタイプによって基本的にグループ化されます。 これは、クラスノードについても同じです。 同じタイプのクラスノードは、その内容によってタイプを示すグループノードの下に集められます。 したがって、すべてのオブジェクトデータノードは、"Object Data" という名前のオブジェクトデータグループノードの子になります。
以下では次のトピックについて説明します。
クラスのノードを展開および圧縮できます。 展開するとすべての子ノードが表示され、圧縮すると選択されたクラスノードのすべての子ノードが非表示になります。
論理ビューでは、クラスの構造化ビューが表示されます。 操作するクラスノードを展開できます。 詳細については、「ライブラリワークスペース」セクションを参照してください。
クラスのほとんどの親ノードには、コンテキストメニューのリストビュー」を参照してください。
コマンドで開くことができるリストビューが割り当てられています。 このセクションでは、論理ビューのリストビューに表示される情報について説明します。 詳細については、「クラスリストビューは、グループノードで構成されます。 グループノードのリストビューは、
コマンドで開くことができます。次のグループノードが存在します。
"Object Data" グループ:
ODA をクラスで使用している場合に表示されます。
"Local Data" グループ:
クラスの LDA またはインターフェイス GUID をクラスで使用している場合に表示されます。
"Interface Modules" グループ:
インターフェイスモジュール(「複数クラスのインターフェイスの使用」を参照)をクラスで使用している場合に表示されます。
"Interfaces" グループ:
クラスにインターフェイス(内部または外部)が定義されている場合に表示されます。
クラスリストビューには次の列が含まれます。
タイプ:
ノードのタイプ(オブジェクトデータなど)。
カウント:
指定されたタイプのコンポーネント数。
"オブジェクトデータ" グループリストビューは、オブジェクトデータノードで構成されています。 ノードの
コマンドを選択すると、データエリアの場合はデータエリアエディタが表示され、インライン定義の場合は特殊なクラスビルダダイアログが表示されます。"オブジェクトデータ" グループリストビューには次の列が含まれます。
名前:
オブジェクトデータモジュールの名前、インラインデータ定義の場合は "インライン"。
ライブラリ:
オブジェクトデータモジュールが存在するライブラリ(インラインデータ定義の場合、またはデータエリアが未作成の場合は空)。
タイプ:
オブジェクトデータモジュールの Natural タイプ("ローカルデータエリア"、"パラメータデータエリア"、または "インライン定義")。
"ローカルデータ" グループリストビューは、ローカルデータノードで構成されています。 ノードの
コマンドを選択すると、データエリアの場合はデータエリアエディタが表示され、インライン定義の場合は特殊なクラスビルダダイアログが表示されます。"ローカルデータ" グループリストビューには次の列が含まれます。
名前:
ローカルデータモジュールの名前、またはインラインデータ定義の場合は "インライン"。
ライブラリ:
ローカルデータモジュールが存在するライブラリ(インラインデータ定義の場合、またはデータエリアが未作成の場合は空)。
タイプ:
ローカルデータモジュールの Natural タイプ("ローカルデータエリア"、"パラメータデータエリア"、または "インライン定義")。
"インターフェイスモジュール" グループリストビューは、インターフェイスモジュールノードで構成されています(「インターフェイスモジュールのリストビュー」を参照)。 ノードの コマンドを選択すると、このインターフェイスモジュールのリストビュー(「複数クラスのインターフェイスの使用」を参照)が表示されます。
"インターフェイスモジュール" グループリストビューには次の列が含まれます。
名前:
インターフェイスモジュールの名前(コピーコード名)。
ライブラリ:
インターフェイスモジュールが存在するライブラリ。
インターフェイスモジュールリストビューは、インターフェイスノードで構成されています。 ノードのインターフェイスリストビュー」を参照)が表示されます。
コマンドを選択すると、このインターフェイスのリストビュー(「インターフェイスモジュールリストビューには次の列が含まれます。
名前:
インターフェイスの名前。
"インターフェイス" グループリストビューは、インターフェイスノードで構成されています。 ノードのインターフェイスリストビュー」を参照)が表示されます。
コマンドを選択すると、このインターフェイスのリストビュー(「"インターフェイス" グループリストビューには次の列が含まれます。
名前:
インターフェイスの名前。
コンポーネントタイプ:
クラスで定義されるインターフェイスの場合は "内部インターフェイス"、このクラスに含まれているインターフェイスモジュールで定義されるインターフェイスの場合は "外部インターフェイス"。
定義されている場所:
外部で定義されたインターフェイスのインターフェイスモジュール名(内部インターフェイスの場合は空)。
インターフェイスリストビューは、グループノードで構成されています。 ノードの
コマンドを選択すると、このグループのリストビューが表示されます。次のグループノードが存在します。
"Properties" グループ:
インターフェイスにプロパティ定義が含まれている場合に表示されます。
"Methods" グループ:
インターフェイスにメソッド定義が含まれている場合に表示されます。
インターフェイスリストビューには次の列が含まれます。
タイプ:
ノードのタイプ(プロパティなど)。
カウント:
指定されたタイプのコンポーネント数。
"プロパティ" グループリストビューは、プロパティノードで構成されています。 "プロパティ" グループリストビューには次の列が含まれます。
名前:
プロパティの名前。
フォーマット:
プロパティのフォーマット。
長さ:
プロパティの長さ。
次元:
プロパティの次元。
読み取り専用:
プロパティが読み取り専用かどうかを示します。
ODA 変数:
ODA 変数に割り当てられている名前。
"メソッド" グループリストビューは、メソッド実装およびパラメータデータノードで構成されています。 インターフェイスのすべてのメソッドについて、1 つのメソッド実装(サブプログラム)ノード、およびメソッドのパラメータデータ定義ごとに 1 つのノードが含まれています。
このリストビューのノードの
コマンドを選択すると、特定のノードタイプのエディタ(メソッド実装ノードの場合はプログラムエディタなど)が表示されます。"メソッド" グループリストビューには次の列が含まれます。
名前:
メソッドの名前。 パラメータデータノードには、1~n の番号が付けられます(メソッド INIT の 2 番目のパラメータデータノードには INIT (2) など)。
実装:
メソッド実装ノード専用:メソッドを実装するサブプログラムの名前。
パラメータデータ:
メソッドパラメータデータノード専用:パラメータデータモジュールの名前、インラインデータ定義の場合は "インライン"。
ライブラリ:
ノードタイプに応じて、実装またはパラメータデータモジュールが存在するライブラリ(インラインデータ定義の場合、または Natural モジュールが未作成の場合は空)。
"パラメータデータ" グループリストビューは、パラメータデータノードで構成されています。 ノードの
コマンドを選択すると、データエリアの場合はデータエリアエディタが表示され、インライン定義の場合は特殊なクラスビルダダイアログが表示されます。"パラメータデータ" グループリストビューには次の列が含まれます。
名前:
パラメータデータモジュールの名前、インラインデータ定義の場合は "インライン"。
ライブラリ:
パラメータデータモジュールが存在するライブラリ(インラインデータ定義の場合、またはデータエリアが未作成の場合は空)。
タイプ:
パラメータデータモジュールの Natural タイプ("パラメータデータエリア" または "インライン定義")。
フラットビューのクラスのノードには、クラスモジュール名が表示されます。
論理ビューと異なり、フラットビューにはグループノードは含まれません。 フラットビューには、特定のクラスコンポーネントが表示されるレベルが、論理ビューに比べて低いため、クラス概要が見やすいという利点があります。
以下では次のトピックについて説明します。
クラスのノードを展開および圧縮できます。 展開するとすべての子ノードが表示され、圧縮すると選択されたクラスノードのすべての子ノードが非表示になります。 フラットビューには、クラスの一般的な概要が表示されます。 同じレベルにあるクラスコンポーネントのすべてのサブコンポーネントがリスト表示されます。 例えば、インターフェイスノードを展開すると、インターフェイスのすべてのプロパティおよびメソッドが、インターフェイスノードの子ノードとして表示されます。 詳細については、「ライブラリワークスペース」を参照してください。
フラットビューでは、ノードのネストレベルが低いため少数のリストビューしかサポートされていません。 コンテキストメニューのリストビュー」を参照してください。
コマンドを使用すると、リストビューを開くことができます。 このセクションでは、フラットビューのリストビューに表示される情報について説明します。 詳細については、「クラスリストビューには、子コンポーネントごとに 1 つのノードが含まれています。
次のノードが存在します。
Object Data ノード
クラスの ODA ごとに表示されます。 ノードの コマンドを選択すると、データエリアの場合はデータエリアエディタが表示され、インライン定義の場合は特殊なクラスビルダダイアログが表示されます。
Local Data ノード
クラスの GUID LDA ごとに表示されます。 ノードの コマンドを選択すると、データエリアの場合はデータエリアエディタが表示され、インライン定義の場合は特殊なクラスビルダダイアログが表示されます。
Interface Module ノード
クラスで使用されるインターフェイスモジュールごとに表示されます。ノードの コマンドを選択すると、インターフェイスモジュールリストビューが表示されます。
Interface ノード
クラスのインターフェイスごとに表示されます(外部および内部)。 ノードの コマンドを選択すると、インターフェイスリストビューが表示されます。
クラスリストビューには次の列が含まれます。
名前:
コンポーネントの名前。
コンポーネントタイプ:
コンポーネントのタイプ("オブジェクトデータ"、"ローカルデータ"、"インターフェイスモジュール"、"外部インターフェイス"、または "内部インターフェイス")を示します。
タイプ:
コンポーネントタイプ "オブジェクトデータ" および "ローカルデータ" 専用:データモジュールの Natural タイプ("ローカルデータエリア"、"パラメータデータエリア"、または "インライン定義")。
インターフェイスモジュールリストビューは、インターフェイスノードで構成されています。 ノードのリストビュー」を参照)が表示されます。
コマンドを選択すると、このインターフェイスのリストビュー(「インターフェイスモジュールリストビューには次の列が含まれます。
名前:
インターフェイスの名前。
インターフェイスリストビューには、インターフェイスのプロパティおよびメソッドのすべてのノードが含まれます。
次のノードが存在します。
Property ノード
インターフェイスのプロパティごとに表示されます。
Method implementation ノード
インターフェイスのメソッドごとに表示されます。 ノードの コマンドを選択すると、指定された実装(サブプログラム)でプログラムエディタが表示されます。
Method parameter data ノード
インターフェイスの各メソッドのパラメータデータコンポーネントごとに表示されます。 ノードの コマンドを選択すると、データエリアの場合はデータエリアエディタが表示され、インライン定義の場合は特殊なクラスビルダダイアログが表示されます。
インターフェイスリストビューには次の列が含まれます。
名前:
プロパティまたはメソッドの名前。メソッドのパラメータデータノードには、1~n の番号が付けられます(メソッド INIT の 2 番目のパラメータデータノードには INIT (2) など)。
実装:
プロパティおよびメソッド実装ノード専用:プロパティに割り当てられた ODA 変数の名前またはメソッドに対してメソッドを実装するサブプログラムの名前。
パラメータデータ:
メソッドパラメータデータノード専用:パラメータデータモジュールの名前、またはインラインデータ定義の場合は "インライン"。
ライブラリ:
メソッド専用:ノードタイプに応じて、実装またはパラメータデータモジュールが存在するライブラリ(インラインデータ定義の場合、または Natural モジュールが未作成の場合は空)。
フォーマット:
プロパティ専用:プロパティのフォーマット。
長さ:
プロパティ専用:プロパティの長さ。
次元:
プロパティ専用:プロパティの次元。
読み取り専用:
プロパティ専用:プロパティが読み取り専用かどうかを示します。
ユーザーインターフェイスに関連して、クラスのすべてのコンポーネントはノードによって表されます。 ノードは、ツリービューとリストビューの両方に表示されます。
各ノードには、アイコンおよびコンポーネントに関するテキスト情報が表示されます。この情報は、(ライブラリワークスペース内の)コンポーネント名であったり、(リストビュー内の)コンポーネント名と追加情報であったりします。
次の表に、使用可能なクラスビルダのノードを、アイコンおよび簡単な説明とともに示します。
タイプ | アイコン | 説明 |
---|---|---|
新しいクラス | まだ保存されていない新しいクラス | |
クラス(src) | ソースとしてのみ使用可能なクラス | |
クラス(gp) | 生成プログラムとしてのみ使用可能なクラス | |
クラス(src と gp) | ソースおよび生成プログラムとして使用可能なクラス | |
ODA | データエリアモジュールで定義されるオブジェクトデータ | |
インライン ODA | インラインデータ定義を使用して定義されるオブジェクトデータ | |
LDA | データエリアモジュールで定義されるローカルデータ(GUID 用) | |
インライン LDA | インラインデータ定義を使用して定義されるローカルデータ(GUID 用) | |
インターフェイスモジュール | インターフェイスモジュール、つまりインターフェイスを定義するコピーコード | |
内部インターフェイス | クラスで定義されるインターフェイス | |
外部インターフェイス | クラスで使用されるインターフェイスモジュールで定義されるインターフェイス | |
内部プロパティ | 内部インターフェイスで定義されるプロパティ | |
外部プロパティ | 外部インターフェイスで定義されるプロパティ | |
内部メソッド | 内部インターフェイスで定義されるメソッド | |
外部メソッド | 外部インターフェイスで定義されるメソッド | |
メソッド実装 | メソッドを実装するサブプログラム | |
メソッド PDA | データエリアモジュールで定義されるメソッドパラメータデータ | |
インラインメソッド PDA | インラインデータ定義を使用して定義されるメソッドパラメータデータ |
次のセクションでは、クラスビルダのノードについて詳しく説明します。 特定ノードのコマンドは、ノードのコンテキストメニューまたは[クラス]ツールバーから呼び出すことができます。
以下では次のトピックについて説明します。
クラスノードはクラス自体を表します。 クラスノードに表示される名前は、クラス名(論理ビュー)またはクラスモジュール名(フラットビュー)のどちらかです。
新しいクラスを作成すると、初めて保存するまでは、新しいクラスのアイコンで表示されます。 したがって、新しいクラスは、クラスが現在の Natural セッションで "一時的" なものであり、ソース形式では使用できないことを表します。 このため、新しいクラスは、Natural オブジェクトのソースファイルと生成プログラムファイルを示すファイルビューには表示されません。 また、新しいクラスではクラスノードコマンドも一切実行できません。
クラスがソース形式でのみ使用でき、まだカタログされていない場合、ソースのみのクラスアイコンが表示されます。
クラスが GP フォーマットでのみ使用できる場合、GP のみのクラスアイコンが表示されます。 このタイプのクラスは、クラスビルダで処理できず、このようなクラスのコンテキストメニューは、GP フォーマット専用の他のすべての Natural オブジェクトのものと同じです。
クラスがソース形式と GP フォーマットで使用できる場合、ソースと GP のクラスアイコンが表示されます。
コマンド | 使用可能なクラス | 説明 |
---|---|---|
開く |
新規 |
クラスリストビューを開きます。 詳細については、「リストビュー」を参照してください。 |
リスト |
新規 |
現在のクラス構造の内部ソース形式で、読み取り専用のプログラムエディタを開きます。 |
Cat |
ソースのみ |
現在のクラスをカタログします。 |
保存 |
新規 |
現在のクラス構造を、特定のクラスモジュールに保存します。 |
名前をつけて保存 |
新規 |
現在のクラス構造を新しい Natural モジュールに保存するか、または別のエンコードで保存します。 |
Stow |
新規 |
現在のクラス構造を、特定のクラスモジュールに Stow します。 |
新規 ODA |
新規 |
クラスに新しいオブジェクトデータエリアを作成します。 |
新しいインターフェイス |
新規 |
クラスに新しいインターフェイスを作成します。 |
新しいインターフェイスモジュール |
新規 |
新しいインターフェイスモジュールを作成します。 このインターフェイスモジュールはクラスにリンクされます。 |
リンク LDA |
新規 |
既存のデータエリアをクラスの GUID LDA として使用します。 「リンク」を参照してください。 |
リンク ODA |
新規 |
既存のデータエリアをクラスの ODA として使用します。 「リンク」を参照してください。 |
リンクインターフェイスモジュール |
新規 |
既存のコピーコードをクラスのインターフェイスモジュールとして使用します。 インターフェイスモジュールで定義されたすべてのインターフェイスは、クラスに含まれます。 「リンク」を参照してください。 |
登録 | ソースと GP | クラスをシステムレジストリに登録します。 詳細については、『プログラミングガイド』の「NaturalX」を参照してください。 |
登録解除 | ソースと GP | クラスをシステムレジストリから登録解除します。 詳細については、『プログラミングガイド』の「NaturalX」を参照してください。 |
名前の変更 |
新規 |
ライブラリワークスペースの現在のビューに応じて、クラス名またはクラスモジュール名のどちらかを変更します。 詳細については、「クラスメンバの名前の変更」を参照してください。 |
削除 |
新規 |
クラスの Natural モジュール(ソースのみおよびソースと GP)を削除するか、またはクラスの内部構造のみ(新規)を削除します。 |
復元 |
ソースのみ |
未保存のクラスの変更をすべて削除します。 このコマンドは、クラスのリストビューすべてを閉じ、ライブラリワークスペースでクラスのノードを圧縮します。 |
切り取り |
ソースのみ |
クラスモジュールを切り取ります。 |
コピー |
ソースのみ |
クラスモジュールをコピーします。 |
貼り付け |
ソースのみ |
クラスモジュールを貼り付けます。 |
印刷 |
新規 |
現在のクラス構造のソース形式を印刷します。 |
プロパティ |
新規 |
クラス固有の情報を示す[プロパティ]ダイアログを表示します。 詳細については、「ノードのプロパティ」を参照してください。 |
オブジェクトデータノードは、オブジェクトデータエリアモジュールまたはインラインオブジェクトデータ定義を表します。 1 つのクラスに、複数のオブジェクトデータノードが存在できます。 複数のオブジェクトデータノードが存在する場合、メソッド実装でこれらのノードを使用するときには、正しいオブジェクトデータシーケンスに従うよう注意する必要があります。
このタイプは、オブジェクトデータがローカルデータエリアまたはパラメータデータエリアタイプの別の Natural モジュールで定義されることを示します。 ノードに表示される名前が、Natural データエリアモジュールの名前です。
このタイプは、DEFINE DATA OBJECT
ステートメントを使用して、オブジェクトデータがクラスソースで直接定義されることを示します。 この場合、オブジェクトデータを使用するすべてのメソッド実装で、オブジェクトデータをもう一度定義する必要があります。 このタイプのノードの名前は常に「インライン」でになります。
コマンド | 使用可能なクラス | 説明 |
---|---|---|
開く | データエリア | データエリアエディタでデータエリアモジュールを開きます。 |
編集 | インラインデータ定義 | 編集用のインラインデータ定義の内容を表示するダイアログが開きます。 |
リスト | データエリア | データエリアモジュールのリストを表示します。 |
Cat | データエリア | データエリアモジュールのカタログを表示します。 |
Stow | データエリア | データエリアモジュールを Stow します。 |
リンク解除 | データエリア | データエリアモジュールをクラスからリンク解除します。つまり、クラスのオブジェクトデータエリアとして使用されなくなります。 |
名前の変更 | データエリア | オブジェクトデータエリアリンクの名前を変更します。つまり、クラスのオブジェクトデータエリアとして別のデータエリアモジュールを使用します。 詳細については、「クラスメンバの名前の変更」を参照してください。 |
削除 | インラインデータ定義 | インラインデータ定義をクラスから削除します。 |
印刷 | データエリア | データエリアモジュールを印刷します。 |
プロパティ |
データエリア |
オブジェクトデータ固有の情報を示す[プロパティ]ダイアログを表示します。 詳細については、「ノードのプロパティ」を参照してください。 |
GUID ローカルデータノードは、GUID 定義を含むローカルデータエリアモジュールまたはインラインローカルデータ定義を表します。 1 つのクラスに、複数のローカルデータノードが存在できます。
このタイプは、GUID ローカルデータがローカルデータエリアまたはパラメータデータエリアタイプの別の Natural モジュールで定義されることを示します。 ノードに表示される名前が、Natural データエリアモジュールの名前です。
このタイプは、DEFINE DATA LOCAL
ステートメントを使用して、GUID ローカルデータがクラスソースで直接定義されることを示します。 このタイプのノードの名前は常に「インライン」でになります。
コマンド | 使用可能なクラス | 説明 |
---|---|---|
開く | データエリア | データエリアエディタでデータエリアモジュールを開きます。 |
編集 | インラインデータ定義 | 編集用のインラインデータ定義の内容を表示するダイアログが開きます。 |
リスト | データエリア | データエリアモジュールのリストを表示します。 |
Cat | データエリア | データエリアモジュールのカタログを表示します。 |
Stow | データエリア | データエリアモジュールを Stow します。 |
リンク解除 | データエリア | データエリアモジュールをクラスからリンク解除します。つまり、データエリアモジュールはクラスの GUID ローカルデータエリアとして使用されなくなります。 |
名前の変更 | データエリア | GUID ローカルデータエリアリンクの名前を変更します。つまり、クラスの GUID ローカルデータエリアとして別のデータエリアモジュールを使用します。 詳細については、「クラスメンバの名前の変更」を参照してください。 |
削除 | インラインデータ定義 | インラインデータ定義をクラスから削除します。 |
印刷 | データエリア | データエリアモジュールを印刷します。 |
プロパティ |
データエリア |
ローカルデータ固有の情報を示す[プロパティ]ダイアログを表示します。 詳細については、「ノードのプロパティ」を参照してください。 |
インターフェイスモジュールノードは、インターフェイスモジュールを表します。 インターフェイスモジュールは、複数のクラスに含めることができるインターフェイスを定義するコピーコードタイプの Natural モジュールです。 インターフェイスモジュールおよびその使用法の詳細については、「複数クラスのインターフェイス使用」を参照してください。
コマンド | 説明 |
---|---|
開く | インターフェイスモジュールリストビューを開きます。 詳細については、「リストビュー」を参照してください。 |
リスト | 現在のインターフェイスモジュール構造のソース形式で、読み取り専用のプログラムエディタを開きます。 |
保存 | 現在のインターフェイスモジュール構造を、特定の Natural コピーコードモジュールに保存します。 |
新しいインターフェイス | インターフェイスモジュールで新しいインターフェイスを作成します。 |
リンク解除 | インターフェイスモジュールをクラスからリンク解除します。つまり、インターフェイスモジュールで定義されたインターフェイスは、クラスで使用できなくなります。 |
印刷 | 現在のインターフェイスモジュール構造のソース形式を印刷します。 |
プロパティ | インターフェイスモジュール固有の情報を示す[プロパティ]ダイアログを表示します。 詳細については、「ノードのプロパティ」を参照してください。 |
インターフェイスノードは、インターフェイスモジュールまたはクラスのインターフェイスを表します。 内部および外部インターフェイスの詳細については、「複数クラスのインターフェイス使用」を参照してください。
内部インターフェイスの親は、インターフェイスモジュールまたはクラスです。 親がインターフェイスモジュールの場合、インターフェイスは、クラスで使用されるインターフェイスモジュールで定義されます。 この場合、インターフェイスは、クラスの外部インターフェイスとして 2 回目に表示されます(詳細については、「複数クラスのインターフェイス使用」を参照)。 内部インターフェイスがクラス自体の子である場合、インターフェイスはクラスで直接定義されます。
外部インターフェイスは、このインターフェイスを定義するインターフェイスモジュールを使用するクラスのサブノードとしてのみ表示できます。 外部インターフェイスノードで実行できるコマンドは、内部インターフェイスに使用可能なコマンドのサブセットにすぎません。 基本的には、そのようなインターフェイスの実装変更することしかできません。 詳細については、「複数クラスのインターフェイス使用」を参照してください。
コマンド | 使用可能なクラス | 説明 |
---|---|---|
開く |
内部 |
インターフェイスリストビューを開きます。 詳細については、「リストビュー」を参照してください。 |
新規メソッド | 内部 | インターフェイスに新しいメソッドを作成します。 |
新規プロパティ | 内部 | インターフェイスに新しいプロパティを作成します。 |
名前の変更 | 内部 | インターフェイスの名前を変更します。 詳細については、「クラスメンバの名前の変更」を参照してください。 |
削除 | 内部 | インターフェイスおよびその従属コンポーネントをすべて削除します。 |
プロパティ |
内部 |
インターフェイス固有の情報を示す[プロパティ]ダイアログを表示します。 詳細については、「ノードのプロパティ」を参照してください。 |
プロパティノードは、内部または外部インターフェイスのプロパティを表します。
プロパティが内部インターフェイスのサブノードとして表示される場合、内部プロパティとして表示されます。 内部プロパティノードには、常に、専用の外部プロパティノードが存在します。
プロパティが外部インターフェイスのサブノードとして表示される場合、外部プロパティとして表示されます。 外部プロパティで実行できるコマンドは、内部プロパティに使用可能なコマンドのサブセットにすぎません。
コマンド | 使用可能なクラス | 説明 |
---|---|---|
名前の変更 | 内部 | プロパティの名前の変更をします。 詳細については、「クラスメンバの名前の変更」を参照してください。 |
削除 | 内部 | プロパティを削除します。 |
プロパティ |
内部 |
プロパティ固有の情報を示す[プロパティ]ダイアログを表示します。 詳細については、「ノードのプロパティ」を参照してください。 |
メソッドノードは、内部または外部インターフェイスのメソッドを表します。
メソッドが内部インターフェイスのサブノードとして表示される場合、内部メソッドとして表示されます。 内部メソッドノードには、常に、専用の外部メソッドノードが存在します。
メソッドが外部インターフェイスのサブノードとして表示される場合、外部メソッドとして表示されます。 外部メソッドで実行できるコマンドは、内部メソッドに使用可能なコマンドのサブセットにすぎません。
コマンド | 使用可能なクラス | 説明 |
---|---|---|
新規 PDA | 内部 | メソッドに新しいメソッドパラメータデータエリアを作成します。 |
リンク PDA | 内部 | 既存のパラメータデータエリアをメソッド PDA として使用します。 「リンク」を参照してください。 |
リンクの実装 |
内部 |
既存のサブプログラムをメソッド実装として使用します。 「リンク」を参照してください。 |
名前の変更 | 内部 | メソッドの名前の変更します。 詳細については、「クラスメンバの名前の変更」を参照してください。 |
削除 | 内部 | メソッドおよびその従属コンポーネントをすべて削除します。 |
プロパティ |
内部 |
メソッド固有の情報を示す[プロパティ]ダイアログを表示します。 詳細については、「ノードのプロパティ」を参照してください。 |
メソッド実装ノードは、メソッドが呼び出されたときに実行される Natural サブプログラムを表します。
コマンド | 説明 |
---|---|
開く | プログラムエディタで、メソッド実装のサブプログラムを開きます。 |
リスト | メソッド実装のサブプログラムを、読み取り専用モードでプログラムエディタに表示します。 |
Cat | メソッド実装のサブプログラムをカタログします。 |
Stow | メソッド実装のサブプログラムを Stow します。 |
名前の変更 | メソッド実装のサブプログラム名を変更します。つまり、メソッド実装に別のサブプログラムを使用します。 詳細については、「クラスメンバの名前の変更」を参照してください。 |
印刷 | メソッド実装のサブプログラムを印刷します。 |
プロパティ | メソッド実装固有の情報を示す[プロパティ]ダイアログを表示します。 詳細については、「ノードのプロパティ」を参照してください。 |
メソッドパラメータデータノードは、パラメータデータエリアモジュールまたはインラインパラメータデータ定義を表します。 メソッドには、メソッド実装で使用されるパラメータを定義する複数のメソッドパラメータデータノードが存在できます。 複数のメソッドパラメータデータノードが存在する場合、メソッド実装で正しいパラメータデータシーケンスを確実に使用する必要があります。
このタイプは、パラメータデータエリアタイプの別の Natural モジュールでメソッドパラメータデータが定義されることを示します。 ノードに表示される名前が、Natural パラメータデータエリアモジュールの名前です。
このタイプは、DEFINE DATA PARAMETER
ステートメントを使用して、メソッドパラメータデータがクラスソース(または、インターフェイスモジュールソース)で直接定義されることを示します。 この場合、すべてのメソッドサブプログラムでパラメータデータをもう一度定義する必要があります。 このタイプのノードの名前は常に「インライン」でになります。
コマンド | 使用可能なクラス | 説明 |
---|---|---|
開く | データエリア | データエリアエディタでデータエリアモジュールを開きます。 |
編集 | インラインデータ定義 | 編集用のインラインデータ定義の内容を示すダイアログが表示されます。 |
リスト | データエリア | データエリアモジュールのリストを表示します。 |
Cat | データエリア | データエリアモジュールのカタログを表示します。 |
Stow | データエリア | データエリアモジュールを Stow します。 |
リンク解除 | データエリア | データエリアモジュールをメソッドからリンク解除します。つまり、データエリアモジュールはメソッドのパラメータデータエリアとして使用されなくなります。 |
名前の変更 | データエリア | メソッドパラメータデータエリアリンクの名前を変更します。つまり、メソッドのパラメータデータエリアとして別のデータエリアモジュールを使用します。 詳細については、「クラスメンバの名前の変更」を参照してください。 |
削除 | インラインデータ定義 | インラインデータ定義を削除します。 |
印刷 | データエリア | データエリアモジュールを印刷します。 |
プロパティ |
データエリア |
メソッドパラメータデータ固有の情報を示す[プロパティ]ダイアログを表示します。 詳細については、「ノードのプロパティ」を参照してください。 |
コンテキストメニューから
を選択すると、Natural クラスおよびその要素に関するノード固有の情報がクラスビルダによって表示されます。 このコンテキストメニューエントリは、ライブラリワークスペースまたはリストビューでオブジェクトを選択した場合に使用できます。 プロパティシートには、グループノードに関する情報は表示されません。情報そのものはプロパティシートに表示されます。 表示される実際のプロパティページ数は、選択したオブジェクトのタイプによって異なります。
:変更を受け入れます。
:変更をスキップします。
すべてのクラス要素には、プロパティページ[一般]と[コメント]が表示されます。 他のプロパティページは、選択したノードタイプによって異なります。
以下では次のトピックについて説明します。
このプロパティページには、選択したオブジェクトに関する一般情報が表示されます。 表示内容は、対応するノードタイプによって異なり、次のセクションで説明します。
名前 | クラス名 |
定義されている場所 | クラスモジュール |
ライブラリ | ライブラリ |
名前 | オブジェクトまたはローカルデータエリアの名前 |
使用されている場所 | クラス名 |
ライブラリ | ライブラリ |
名前 | "インライン定義" |
定義されている場所 | クラス名 |
名前 | インターフェイスモジュールの名前 |
使用されている場所 | クラス名 |
ライブラリ | ライブラリ |
名前 | インターフェイスの名前 |
定義されている場所 | クラス名 |
インターフェイスモジュール | インターフェイスがインターフェイスモジュールで定義されている場合、対応する名前がこのフィールドに表示されます。 |
名前 | メソッドの名前 |
定義されている場所 | このメソッドを提供するインターフェイスの名前。 |
インターフェイスモジュール | メソッドがインターフェイスモジュールで定義されている場合、対応する名前がこのフィールドに表示されます。 |
名前 | サブプログラムの名前 |
使用されている場所 | このサブプログラムによって実装されるメソッドの名前。 |
ライブラリ | ライブラリ |
名前 | パラメータエリアの名前 |
使用されている場所 | メソッドの名前 |
ライブラリ | ライブラリ |
名前 | プロパティの名前 |
定義されている場所 | このプロパティを提供するインターフェイスの名前。 |
インターフェイスモジュール | プロパティがインターフェイスモジュールで定義されている場合、対応する名前がこのフィールドに表示されます。 |
各コンポーネントには独自のコメントがあります。
このプロパティページにはコメントが表示され、新しいコメントの追加または既存のコメントの変更を行うことができます。 コメントは、特別な構文表記なしで入力および表示されます。
を押してプロパティシートを終了すると、コメントが変更されます。 を押すと、コメントが変更されないままになります。
このプロパティページは、クラスノードおよびインターフェイスノードに使用できます。 インターフェイスの場合、クラスの一部としてインターフェイスが直接定義されている場合にのみ、下のリストボックスが有効になります。 インターフェイスがインターフェイスモジュールで定義されている場合、リストボックスは表示されません。
上部のコントロール[ユニーク ID]には、クラスまたはインターフェイスの現在のグローバルユニーク ID(Global Unique ID)が読み取り専用情報として表示されます。
このリストボックスには、クラスにリンクされているローカルデータエリアに含まれるすべてのデータ変数が表示されます。 これらの変数は、一意の識別子として使用できます。 変数のインライン定義はサポートされていません。
上部のコントロールに表示される現在のグローバルユニーク ID(Global Unique ID)を別の値と置き換えるには、リストから変数を選択します。 新しく選択した変数名で、名前コントロールが更新されます。 変数を選択し、
を押してプロパティシートを終了すると、グローバルユニーク ID(Global Unique ID)が置き換えられます。 を押すと、ID が変更されないままになります。 選択した変数が有効なグローバルユニーク ID(Global Unique ID)であるかどうかはチェックされません。このプロパティページは、クラスノードにのみ使用できます。 クラスビルダでクラスのアクティベーションポリシーを設定できます。
クラスの有効なアクティベーションポリシーは、次のとおりです。
外部 - 単一
内部 - 複数
外部 - 複数
または、デフォルトに設定されます。
これらの値の意味については、『プログラミングガイド』の「Natural X」を参照してください。
現在のアクティベーションポリシーを変更するには、必要な値を選択します。
を押してプロパティシートを終了すると、値が変更されます。 を押すと、ID が変更されないままになります。
このプロパティページは、インターフェイスのプロパティにのみ使用できます。 既存のプロパティの定義を変更できます。
プロパティの名前は変更できません。 次の変更が可能です。
オブジェクトデータ変数をプロパティに割り当てることができます。
使用可能なオブジェクトデータ変数は、フォーマット定義および次元とともにページのリストボックスに表示されます。
この情報は、現在のクラスにリンクされているオブジェクトデータエリアから取得されます。 変数のインライン定義はサポートされていません。
プロパティへのオブジェクトデータ変数の既存の割り当てを変更できます。 新しく選択した変数名で、対応するコントロールが更新されます。
プロパティのフォーマット定義は、オブジェクトデータ変数の定義と異なる場合に、追加または変更できます。
そうでない場合、フォーマットおよび長さの定義は、割り当てられたオブジェクトデータ変数から取得されます。
このプロパティを読み取り専用として使用するかどうかを定義できます。
を押してプロパティシートを終了すると、プロパティの定義が変更されます。 を押すと、定義が変更されないままになります。
クラスの開発を容易にするため、クラスビルダでは、2 つの方法でコンポーネントをクラスに追加できます。
以下では次のトピックについて説明します。
既存の Natural オブジェクトは、クラスコンポーネントにリンクできます。
オブジェクトノードに対してコンテキストメニュー項目
がアクティブになっていると、ダイアログが表示されます。 現在のライブラリまたはその STEPLIB で検出できる必要なタイプのすべてのオブジェクトが、このダイアログに表示されます。オブジェクトを選択し、
を押してダイアログを終了すると、選択したオブジェクトへの参照がクラス構造に追加されます。 を押すと、クラス構造が変更されないままになります。GUID ローカルデータエリア、オブジェクトデータエリア、またはインターフェイスモジュールは、クラスにリンクできます。 ダイアログにオブジェクト名とライブラリが表示されます。
各メソッドにはメソッド実装が必要です。 既存の実装は、選択したメソッドに別のサブプログラムをリンクすることによって置き換えることができます。 また、1 つまたは複数のパラメータデータエリアをメソッドにリンクすることもできます。 ダイアログにオブジェクト名とライブラリが表示されます。
新しいクラスコンポーネントは、コンテキストメニュー項目
で作成されます。ライブラリワークスペースでは、インプレース編集を使用してクラスコンポーネントを作成します。 リストビューでは、ダイアログを使用して、必要なデータを照会し、新しいオブジェクトを作成します。 これは、クラスプロパティを除くすべてのノードに適用されます。プロパティの作成には、常に、ダイアログを使用します。
次のセクションでは、各種クラスコンポーネントの作成方法について説明します。
新しいクラスは、まず内部クラス構造として作成されます。 この時点で、クラス名が定義されます。 クラスを初めて保存すると、クラスモジュール名、つまり、実際の Natural オブジェクト名が割り当てられます。
新しいクラス名(NEWCLS など)が生成されます。 対応するツリーノードが選択され、インプレースで編集できるようになります。 名前を任意の有効なクラス名に変更できます。
新しいクラスの名前を尋ねるダイアログが表示されます。
新しいオブジェクトデータエリアを作成すると、新しいコンポーネントへの参照がクラス構造に追加されます。 対応する Natural オブジェクトがまだ作成されていません。 これは、Natural オブジェクトを開くときに作成の確認に行うと、作成されます。
新しいオブジェクトデータエリア(NEWODA など)が生成されます。 対応するノードが選択され、インプレースで編集できるようになります。 名前を任意の有効なデータエリア名に変更できます。
新しいオブジェクトデータエリアの名前を尋ねるダイアログが表示されます。
新しいインターフェイスモジュールを作成すると、新しいコンポーネントへの参照がクラス構造に追加されます。 対応する Natural オブジェクトがまだ作成されていません。 これは、クラスの保存時にインターフェイスが Natural オブジェクトに含まれていると、作成されます。
新しいインターフェイスモジュール(NEWEIF など)が生成されます。 対応するノードが選択され、インプレースで編集できるようになります。 名前を任意の有効なコピーコード名に変更できます。
インターフェイスモジュールの名前を尋ねるダイアログが表示されます。
新しいインターフェイス(NEWIIF など)が生成されます。 対応するノードが選択され、インプレースで編集できるようになります。 名前を任意の有効なインターフェイス名に変更できます。
インターフェイスの名前を尋ねるダイアログが表示されます。
新しいメソッド(NEWMET など)が生成されます。 対応するノードが選択され、インプレースで編集できるようになります。 名前を任意の有効なメソッド名に変更できます。 新規メソッドの名前はメソッド実装の名前としても使用されます。 両方がクラス構造に追加されます。 有効な Natural サブプログラム名よりメソッド名が長い場合、実装名を確実に有効にものにするため、最初の文字のみが使用されます。
メソッドの名前を尋ねるダイアログが表示されます。 新規メソッドの名前はメソッド実装の名前としても使用されます。 両方がクラス構造に追加されます。 有効な Natural サブプログラム名よりメソッド名が長い場合、実装名を確実に有効にものにするため、最初の文字のみが使用されます。
新しいプロパティは、常に、ダイアログを使用して作成されます。
このダイアログでは、次の情報が取得されます。
プロパティ名: | 有効なプロパティ名。 新しい名前または選択された ODA 変数の名前です。 完全修飾された ODA 変数名の場合、ドットが下線で置き換えられます。 |
ODA 変数: | リンクされた ODA で定義されているすべての変数が、リストボックスに表示されます。
プロパティ名、フォーマット、および長さに変更がない場合、選択された ODA 変数からこれらの値が取得されます。 |
フォーマット: | ODA 変数の定義と異なるフォーマットおよび長さを必要とする場合は、変更できます。 |
読み取り専用: | プロパティを読み込み専用としてマークできます。 |
Natural スタジオで修正できる他のすべての Natural オブジェクトと同様に、クラスコンポーネントの識別子をインプレースで編集することによって、名前が変更されます。 この操作には、マウスを使用するか、F2 キーを押すか、あるいはすべてのクラスコンポーネントに有効なコンテキストメニューエントリ を選択します。
新しい名前は、編集中に構文チェックされます。 有効な Natural 名でない場合、編集モードを終了できません。 Esc キーを押すと、編集モードがキャンセルされ、以前の識別子にリセットされます。
クラスコンポーネントが、オブジェクトデータエリア、パラメータデータエリア、インターフェイスモジュールなどの Natural オブジェクトを参照する場合、クラス内の参照のみが変更されます。 対応する Natural オブジェクトの名前は変更されません。 必要であれば、名前を明示的に変更する必要があります。
コンテキストメニューエントリ
は、データエリアやインターフェイスモジュールなどの Natural オブジェクトを参照するクラスコンポーネントに使用できます。 これらのモジュールがクラスにリンク済みの場合、 を使用して削除することができます。この操作は、選択したコンポーネントへのクラスからの参照を削除するのみです。 既存の Natural オブジェクトは削除しません。
コンテキストメニューエントリ
は、クラスおよび Natural オブジェクトを参照しないクラスのコンポーネントに使用できます。このコンテキストメニュー項目を選択すると、クラスビルダの[削除]ダイアログが表示されます。
選択したコンポーネント(複数可)を削除するかどうかが確認されます。 従属する Natural オブジェクトを示す参照リストが、コンポーネントごとに表示されます(
を選択しなかった場合)。 これらの Natural オブジェクトは、必要に応じて、名前、ライブラリ、および Natural オブジェクトタイプで識別されます。 リストは情報提供のためにのみ使用されます。 従属する Natural ソースは影響を受けません。選択したコンポーネントがクラスの場合、内部構造が削除され、対応する Natural ソースおよびカタログモジュールがライブラリから削除されます。
はい | 選択したコンポーネントを削除します。 複数のコンポーネントを選択した場合、次のコンポーネントの参照リストが表示されます。 |
すべてはい | ダイアログが閉じ、選択したすべてのコンポーネントを削除します。 |
いいえ | 選択したコンポーネントを削除しません。 他のコンポーネントを選択した場合、次のコンポーネントに対して削除ダイアログを表示し、削除手順が続行します。 |
キャンセル | 削除を行わずにダイアログが閉じます。 |
新しいクラスを作成した時点では、対応する新しいクラスモジュールはまだ作成されていません。 この作成は、クラスに対して
、 、または を実行したときにのみ行われます。既存のクラスに対して
を実行すると、クラスソースがクラスモジュールに書き込まれます。対応するクラスモジュールがまだ存在しない新しいクラスに対して
を実行すると、 が のように動作します。 現在使用しているデフォルトのコードページで、エンコードが初期化されます。 このようなクラスモジュールが現在のライブラリにまだ存在しない場合、クラスモジュールが作成され、このオブジェクトにソースが書き込まれます。を実行すると、クラスモジュールおよびクラスのエンコードの入力を求めるダイアログが表示されます。 Natural クラスモジュール名を確実に有効なものにするため、入力長が制限され、入力内容の妥当性がチェックされます。 このようなクラスモジュールがすでに存在するか、または名前が無効の場合、エラーメッセージが表示されます。
コマンドを実行すると、クラスソースがカタログされ、対応するクラス GP が生成されます。 これは新しいクラスには適用されません。
他の Natural オブジェクトの場合と同様に、
はクラスを内部的に保存し、カタログします。 新しいクラスを Stow すると、 で説明しているようにクラスモジュールの入力が求められます。クラスコンポーネントとして動作できる Natural オブジェクトは、クラス構造のコンテキストで変更することもできます。 オブジェクトデータエリア、パラメータデータエリアおよびインターフェイスモジュールへの参照は、
で作成できます。 既存のオブジェクトは、編集、保存および Stow が可能です。ローカルデータエリアおよびメソッド実装は、クラスのコンテキストでは作成できません。 ここでは、既存のオブジェクトのみがクラスにリンクできます。 ただし、編集、保存および Stow は可能です。
インターフェイス、メソッド、プロパティなどの他のクラスコンポーネントは、単独で保存、カタログ、または Stow することはできません。 クラスのコンテキストで変更のみが可能です。
一部のアプリケーションでは、同じインターフェイスを複数のクラスで実装すると効果的です。 この目的のため、Natural コピーコードモジュールでインターフェイスを定義し、インターフェイスを実装するクラスにこのコピーコードモジュールを含めることができます。 メソッド実装のような実装固有の設定を、デフォルト設定としてコピーコードで定義し、クラス固有の実装を使用するためにクラスで上書きすることができます。
インターフェイスを定義する Natural コピーコードモジュールは、クラスビルダ環境ではインターフェイスモジュールと呼ばれます。 インターフェイスモジュールはクラスビルダに完全に統合されており、インターフェイスモジュールで定義されたインターフェイスを、クラスのインターフェイスと同じように処理することができます。 ただし、インターフェイスモジュールは、クラスに含まれている場合にのみクラスビルダで変更できます。
インターフェイスモジュールで定義されるインターフェイスは、クラスの 2 箇所に常に表示されます。つまり、Interface Module ノードに内部インターフェイスとして表示され、クラスノードに外部インターフェイスとして表示されます。 外部インターフェイスに有効なコマンドを使用して、インターフェイスの実装を変更できます。
変更したインターフェイスモジュールは、クラス全体を保存せずに保存することができます。 インターフェイスモジュールを変更し、Interface Module ノードの親であるクラスを保存すると、インターフェイスモジュールも保存するかどうかがクラスビルダから尋ねられます。
インターフェイスモジュールのロックの原則については、「ロックの概念」を参照してください。
注意:
インターフェイスモジュールを変更する場合、このインターフェイスモジュールが他のクラスでも使用される可能性があることを常に認識している必要があります。 変更を保存した後、他のクラスを Stow する場合にエラーとなる可能性があります。 インターフェイスモジュールが他のクラスで使用されているかどうかは、クラスビルダでチェックできません。
クラスコマンドクラスビルダのノード」を参照)は、新しいインターフェイスモジュールを作成します。
(「Interface Module ノードがツリービューとリストビューに追加され、インターフェイスモジュールに新しいインターフェイスを作成したり、インターフェイスにメソッドやプロパティを作成したりできます。 インターフェイスモジュールに新しいコンポーネントを作成すると、対応する外部ノードがクラスに追加されます。 例えば、新しいインターフェイス INT1 をインターフェイスモジュールに追加すると、INT1 という名前の外部インターフェイスノードが、クラスのサブノードとして作成されます。 新しいインターフェイスモジュールは、単に既存のインターフェイスモジュールとして保存されます。 インターフェイスモジュールが Natural モジュールとして存在すると、他のクラスから直ちにリンクできます。
クラスコマンドクラスビルダのノード」を参照)では、クラスに対して既存のインターフェイスモジュールが使用されます。 現在のステップライブラリのすべての Natural コピーコードモジュールを示すダイアログが表示されます。
(「注意:
ダイアログには、インターフェイスモジュールだけでなく、コピーコードモジュールがすべて表示されます。
クラスインターフェイスを定義するコピーコードモジュールをこのリストから選択すると、これらのインターフェイスが現在のクラスインターフェイスに追加されます。 インターフェイスを定義しないコピーコードモジュールを選択したか、または選択したコピーコードモジュールに、クラスで定義済みのインターフェイスが含まれていると、エラーが発生します。 この場合、インターフェイスモジュールはクラスにリンクされません。
インターフェイスモジュールがクラスに正常にリンクされると、そのノードがクラスツリーに追加されます。 Interface Module ノードを開くと、インターフェイスモジュールのインターフェイスが表示されます。 また、インターフェイスモジュールのすべてのインターフェイスは、外部インターフェイスノードとしてクラスに追加されます。
インターフェイスモジュールに対してインターフェイスモジュールノード」を参照)を実行すると、このインターフェイスモジュールのインターフェイスはクラスで使用されなくなります。
コマンド(「これは、Interface Module ノードおよびこのインターフェイスモジュールのすべての外部インターフェイスノードが、クラスから削除される結果になります。
注意:
インターフェイスモジュールをクラスからリンク解除すると、クラスソースモジュールに含まれているクラス固有のすべての設定(このインターフェイスモジュールのインターフェイスに対するメソッド実装など)も削除されます。
インターフェイスモジュールをクラスで使用している場合、インターフェイスモジュールで定義されたすべてのインターフェイスは、2 つのノード(インターフェイスモジュールのサブノードである内部インターフェイスノードおよびクラスのサブノードである外部インターフェイスノード)に表示されます。 これらの 2 つのインターフェイスノードのタイプは、それぞれのアイコンで区別できます(「インターフェイスノード」を参照)。 同じことはプロパティノードとメソッドノードについても言えます。内部インターフェイスの子である場合は内部ノードに表示され、外部インターフェイスの子である場合は外部ノードに表示されます(「プロパティノード」および「メソッドノード」を参照)。
また、外部インターフェイスのプロパティおよびメソッドで実行できるコマンドは、内部インターフェイスのプロパティおよびメソッドで使用できるコマンドのサブセットにすぎません。 例えば、インターフェイスの名前は内部インターフェイスの場合にのみ変更できます。 外部インターフェイスでは、インターフェイスの実装の再定義(つまり、メソッド実装およびプロパティに割り当てられている ODA 変数の変更)のみが可能です。
Natural では、Natural モジュールを異なる場所から同時に変更できないことを保証する必要があります。 したがって、クラスビルダに関して言えば、クラスビルダで変更済みの Natural モジュールを Natural ユーザーがプログラムエディタで変更できないようにする(またはその逆)ことが必要です。
クラスビルダは、特殊なコピーコードモジュールである Natural クラスおよびインターフェイスモジュールを変更するために使用できます(「複数クラスのインターフェイス使用」を参照)。
異なる要件により、クラスのロック概念は、インターフェイスモジュールのロック概念と異なります。 次のセクションでは、両方の概念について説明します。
クラスのロックは非常に柔軟です。 クラスビルダでは、クラスが変更されるまで、クラスのロックは行われません。 これは、クラスビルダで開いたクラスが、プログラムエディタでも開けることを意味します。
プログラムエディタでクラスを開いた場合、クラスノードはクラスビルダで表示できますが、変更を加えることはできません。 クラスを変更する前に、プログラムエディタセッションを閉じる必要があります。
クラスビルダにクラスが表示され、ユーザーがプログラムエディタでクラスを変更する場合、クラスを保存すると、変更内容がクラスビルダにも表示されます。 クラスビルダでクラスを変更すると、このクラスをプログラムエディタで開くことができなくなります。
インターフェイスモジュールのロックは、クラスのロックに比べてやや制限的です。 インターフェイスモジュールでは、ロックが 2 段階で行われます。 まず、クラスビルダで、インターフェイスモジュールがクラスビルダとプログラムエディタの両方で同時に変更できないことを確認する必要があります。インターフェイスモジュールを使用するクラスをクラスビルダで開くと、インターフェイスモジュールがロックされます。 これは、インターフェイスモジュールを使用するクラスをクラスビルダで開くと、それをプログラムエディタで開けなくなることを意味します。 一方、プログラムエディタですでに開かれているインターフェイスモジュールをクラスで使用している場合、クラスビルダでクラスを開くことはできません。
さらに、インターフェイスモジュールが複数のクラスから含まれている場合は、インターフェイスモジュールをクラスビルダで複数回開くことができます。 クラスビルダでは、ユーザーがインターフェイスモジュールを変更する場合、インターフェイスモジュールが 1 回しか開かれないことを確認する必要があります。これは、他のインターフェイスモジュールインスタンスが最新でなくなるからです。インターフェイスモジュールの現在のインスタンスしか表示されないようにするため、クラスビルダは、他のすべてのインスタンスを閉じようとします。 クラスビルダでは、ユーザーが処理を停止できる確認ダイアログがこのために表示されます。
1 つのクラスがすでに変更されている場合、変更を保存するかどうかがユーザーに尋ねられます。 変更したインターフェイスモジュールを保存したら、インターフェイスモジュールを使用する他のクラスを再び開くことができます。
このセクションでは、クラスビルダの使用法について簡単に説明します。
例では、クラスビルダを使用して、ライブラリ SYSEXCOM にあるクラス EMPLOYEE を構築する方法を示しています。
次のトピックについて説明します。
ライブラリワークスペースの論理ビューを起動し、ローカルデータエリア EMPGUIDS と EMPLOY-O を含む新しいライブラリ MYEXCOM を作成します。 これらは、SYSEXCOM にあるオブジェクトのコピーです。
EMPGUIDS には GUID 定義が含まれ、EMPLOY-O にはオブジェクトデータ定義が含まれています。 新しいクラス MYEMPLOYEE を作成するため、ライブラリノードを選択してから、コンテキストメニュー項目
を選択します。 "NEWCLS" というラベルが付いた新しいツリーノードが表示され、インプレースで編集できます。 名前を "MYEMPLOYEE" に変更します。MYEMPLOYEE のオブジェクトデータは、オブジェクトデータエリアで定義する必要があります。 このオブジェクトデータエリアを作成するには、ノード "MYEMPLOYEE" のコンテキストメニュー項目
を選択するか、またはコンテキストメニュー項目 を選択して既存のオブジェクトデータエリアをリンクします。ダイアログが表示され、MYEXCOM およびその STEPLIB にあるローカルデータエリアとパラメータデータエリアのすべてのリストが表示されます。 これらのオブジェクトは、オブジェクトデータエリアとして使用できます。 EMPLOY-O を選択します。
最初のインターフェイスを作成するため、ノード "MYEMPLOYEE" のコンテキストメニュー項目
を選択します。 "NEWIIF" というラベルが付いた新しいツリーノードが表示され、インプレースで編集できます。 名前を "EMPLOY-I" に変更します。 他のインターフェイスは、適宜作成するか、または "Interfaces"(グループノード)のコンテキストメニューで を選択して作成できます。最初のメソッドを作成するため、インターフェイスノード "EMPLOY-I" のコンテキストメニュー項目
を選択します。 "NEWMET" というラベルが付いた新しいツリーノードが表示され、インプレースで編集できます。 このノードの名前を "INIT" に変更します。 同じ名前のメソッド実装ノードが自動的に作成されます。サブプログラム ELOAD-N(SYSEXCOM からコピーされる)を使用してこのメソッドを実装するため、メソッドのコンテキストメニュー項目
を選択し、メソッド実装を変更します。を使用し、適切なモジュールを選択して、パラメータデータエリア ELOAD-A(SYSEXCOM からコピーされる)をリンクできます。 他のメソッドは、適宜作成するか、または "Methods"(グループノード)のコンテキストメニューで を選択して作成できます。
最初のプロパティを作成するため、インターフェイスノード "EMPLOY-I" のコンテキストメニュー項目
を選択します。 リンク済みのオブジェクトデータエリアで定義されたすべてのオブジェクトデータ変数がダイアログに表示され、プロパティに割り当てることができます。 オブジェクトデータ変数は、フォーマットと長さの定義、および次元とともに表示されます。 他のコントロールに情報を入力せずにいずれかの変数を選択すると、この変数名がプロパティ名として取得され、フォーマットと長さの定義が適宜生成されます。ただし、クラスビルダでは、新しいフォーマットでデータ転送の互換性がある限り、別の名前をプロパティに割り当て、フォーマットと長さを適応させることができます(『プログラミングガイド』の「NaturalX」を参照)。 新しいプロパティを読み込み専用としてマークできます。
これまでは、クラス MYEMPLOYEE でインターフェイスを内部的に定義しただけでした。 しかし、組み込み可能なインターフェイスがモジュールで定義されている可能性もあります。
このため、クラスのコンテキストメニュー項目
を使用して、インターフェイスモジュールをリンクすることができます。 このモジュールで定義されているインターフェイスは、"Interface Modules" グループの対応するインターフェイスモジュールに挿入され、同時に "Interfaces" グループノードにも挿入されます。 それらのメソッドを実装するため、"Interfaces" で対応するノードを選択します。クラスビルダでは、クラスおよびインターフェイス用にグローバルユニーク ID が自動的に生成されます。 しかし、生成された識別子の代わりに変数を使用すると、対応する定義を持つローカルデータエリアを MYEMPLOYEE にリンクできます。
MYEMPLOYEE の既存のグローバルユニーク ID は、その後で変更できます。 コンテキストメニュー項目[識別]ページを開きます。 このページは、クラスおよびインターフェイスに使用できます。
を選択し、生成された GUID は、上部コントロールに表示されます。 EMPGUIDS で定義されているローカル変数は、下のボックスに表示されます。 EMPGUID を選択し、
を選択してプロパティシートを終了します。クラスビルダでは、クラスのアクティベーションポリシーを明示的に設定できます。 コンテキストメニュー項目[設定]ページに表示されます。 このオプションはクラスでのみ使用できます。 [外部 - 複数]を選択し、 を選択してプロパティシートを終了します。
を選択すると、MYEMPLOYEE の現在のアクティベーションポリシーがこれまでは、新しいクラス MYEMPLOYEE が内部クラス構造としてのみ存在しました。 すべての変更を保存するため、クラスをクラスモジュールに保存および Stow できます。 この状態の変更は、アイコンが変わることで示されます。
最後に、クラスノードでコンテキストメニュー項目
を選択して、MYEMPLOYEE を登録します。外部インターフェイスとは、インターフェイスモジュールで定義されるインターフェイスのことで、クラスによって取り込まれます。
インターフェイスモジュールとは、インターフェイスを定義する Natural コピーコードモジュールのことです。 インターフェイスモジュールは、含まれるインターフェイスを定義するために、クラスで使用できます。 クラスはメソッドとプロパティ実装を上書きできますが、インターフェイスの他のすべての設定はインターフェイスモジュールで定義されたとおりに使用されます。
内部インターフェイスとは、クラスで直接定義されるインターフェイス、またはインターフェイスモジュールで定義される、インターフェイスモジュールのインターフェイスのことです。
メソッド実装とは、メソッドに割り当てられ、クラスオブジェクトに対してこのメソッドが呼び出されるときに実行される Natural サブプログラムのことです。
プロパティ実装とは、プロパティに割り当てられるオブジェクトデータ変数のことです。