クラス定義の作成
スタジオでは、クラス定義を作成して、編集できます。クラス定義では、特定のクラスのメンバ (メソッド、プロパティ) や特性 (スーパークラス) などのコンテンツを指定できます。
スタジオでは、以下のツールを使用して、クラス定義を作成できます。
-
ウィザードを使用して、クラスやクラス・メンバをすばやく生成
-
クラス・インスペクタを使用して、表形式でクラスの特性を表示および編集
-
クラス・エディタを使用して、クラス定義を直接編集。クラス・エディタは、構文のカラー表示や構文のチェックなどを行える、フル機能のテキスト・エディタです。複数のオプションを選択できるコード補完ドロップダウン・メニューも備えています。
これらのツールはすべて切り替えて使用できます。スタジオでは、これらのツールは自動的に同期化されて表示されます。
この章では、クラス定義を作成する概要について説明します。これ以降の章のほとんどでは、プロパティ、メソッド、パラメータなどのクラス・メンバの作成方法について説明します。
新規のクラス定義の作成
スタジオでは、新規クラス・ウィザードを使用して、新規のクラス定義を作成できます。
Note:
スタジオでクラス定義を作成する前に、プロジェクトを開いている必要があります。クラス定義を作成するとき、スタジオと InterSystems IRIS® サーバ間では、さまざまなやり取り (クラスのリストの参照やクラスのコンパイル要求など) が行われます。スタジオでは、これらのサーバとのやり取りの詳細を管理するために、プロジェクトが必要になります。
新規クラス・ウィザード
新規クラス・ウィザードを開くには、[ファイル]→[新規作成]→[一般] を選択して [クラス定義] を選択します。
新規クラス・ウィザードでは、情報の入力が促されます。[完了] ボタンはいつでも選択できます (この場合、指定していない情報には既定値が設定されます)。
名前および説明ページ
新規クラス・ウィザードでは、以下の情報の入力を求められます (クラス名やパッケージ名以外は、後で値を変更できます)。
パッケージ名
新規のクラスが属すパッケージ。既存のパッケージ名を選択するか、新規の名前を入力します。新規の名前を入力した場合、クラス定義を保存するときに新規のパッケージが自動的に作成されます。プロパティ名に使用できる句読点は、ドット (.) と先頭のパーセント記号 (%) だけです。
パッケージについての詳細は、"クラスの定義と使用" の “パッケージのオプション” の章を、参照してください。
クラス名
新規のクラス名。これは、有効なクラス名である必要があります。また、定義済みの既存のクラスと同じ名前を付けることはできません。クラス名は、後に変更できないことに注意してください。
"サーバ側プログラミングの入門ガイド" の付録 “識別子のルールとガイドライン” にあるセクション “クラス” を参照してください。
説明
(オプション) 新規クラスに関する説明。この説明は、クラス・ドキュメントがオンライン・クラス・ライブラリ・ドキュメントに表示されるときに使用されます。
説明には、HTML フォーマット・タグを記述することもできます。"クラスの定義と使用" の “クラス・ドキュメントの作成” を参照してください。
クラス・タイプ・ページ
新規クラス・ウィザードでは、生成するクラスのタイプが尋ねられます。定義済みの既存のクラスを拡張 (継承) するか、以下のオプションの 1 つを選択することで、新規のクラスを生成します。
Persistent
永続クラスの定義を生成します。永続オブジェクトはデータベースに保存できます。
Serial
シリアル・クラスの定義を生成します。シリアル・オブジェクトは、アドレスなどの複雑なデータ型を生成するために、永続オブジェクト内に組み込まれます。
Registered
登録クラスの定義を生成します。登録オブジェクトは、データベースに保存されません。
抽象
スーパークラスを持たない抽象クラスの定義を生成します。
データ型
データ型クラスの定義を生成します。データ型クラスは、ユーザ定義のデータ型を生成するのに使用されます。
CSP (HTTP イベントの処理に使用)
%CSP.PageOpens in a new tab クラスの定義を生成します。CSP クラスは、CSP イベント処理クラスを生成するために使用します。これは、CSP ページを生成するため、または HTTP イベントに応答する (例えば、XML サーバを作成する) ためのプログラム的な方法です。InterSystems IRIS での CSP ファイルの使用はお勧めしません。
Extends
既存のクラスを拡張します。[Extends] にチェックを付けて、既存のスーパークラスの名前を入力 (またはリストから選択) します。
データ型クラスの特性ページ
新規のデータ型クラスを生成する場合、新規クラス・ウィザードでは、データ型クラス特有の項目の入力が促されます。これには、以下のものがあります。
クライアント・データ型
クライアント・アプリケーション内でこのデータ型を表すために、クライアントで使用されるデータ型。
ODBC データ型
このデータ型を表すために、ODBC または JDBC で使用されるデータ型。このデータ型を ODBC/JDBC ベースのアプリケーションに表示する型を選択します。
SQL カテゴリ
SQL カテゴリは、このデータ型で論理演算を実行するときに、InterSystems SQL エンジンによって使用されます。
永続クラス、シリアル・クラス、登録クラスの特性ページ
新規の永続クラス、シリアル・クラス、または登録クラスを生成する場合、新規クラス・ウィザードでは、永続クラスまたはシリアル・クラス特有の項目の入力が促されます。これには、以下のものがあります。
所有者
(オプション) 永続クラスの場合、新規クラスの所有者となる SQL ユーザ名を入力します。このユーザ名は、このクラスが SQL 経由で使用されるときの権限を制御します。このフィールドが空欄の場合、所有者は既定の _system が使用されます。
SQL テーブル名
(オプション) 永続クラスの場合、このクラスに対応する SQL テーブルに使用する名前を入力します。このフィールドを空白にした場合、SQL テーブル名はクラス名と同じ名前になります。クラス名が有効な SQL 識別子でない場合、ここに SQL テーブル名を入力する必要があります。
Zen DataModel
InterSystems IRIS では、この機能はサポートされていません。
CSP クラスの特性ページ
新規の CSP クラスを生成している場合、新規クラス・ウィザードでは、以下の値の入力を求められます。
コンテンツ・タイプ
CSP クラスで使用されるコンテンツ・タイプを指定します。利用できるオプションは、HTML または XML です。このオプションを使用して、新規クラスの CONTENTTYPE パラメータ値を、text/html、もしくは text/xml に設定します。このオプションは、後で変更できます。
InterSystems IRIS での CSP ファイルの使用はお勧めしません。
新規クラス・ウィザード実行の結果
新規クラス・ウィザードを実行した後、スタジオには新しいクラス・エディタ・ウィンドウが表示されます。クラス・エディタ・ウィンドウには、新規のクラス定義が追加されています。以下に例を示します。
/// This is a Person class
class MyApp.Person extends %Persistent
{
}
このクラス定義を InterSystems IRIS データベース内に保存したり、プロパティやメソッドなどのクラス・メンバを追加したり、クラス・インスペクタを使用してクラス定義を編集したりできます。
クラス定義をオープンする
ワークスペース・ウィンドウの [プロジェクト] タブでクラスを選択し、そのクラスをダブルクリックすると、以前保存したクラス定義をオープンし、クラス・エディタ・ウィンドウで表示できます。
オープンするクラス定義が現在のプロジェクトのものではない場合は、最初に、[プロジェクト]→[クラス追加] を選択して、現在のプロジェクトに追加しておきます。
オープンするクラス定義が、他のユーザによって編集されている場合、そのクラス定義を読み取り専用でオープンするかどうかが確認されます。
クラス定義の編集
新規に生成したクラス定義、または既存のクラス定義の特性は変更できます (クラス名とパッケージ名は除く)。これは、以下の 2 つの方法で行うことができます。
クラス・キーワードとそれぞれの意味のリストは、"クラスの定義と使用" を参照してください。クラス定義の詳細は、"クラス定義言語" リファレンスを参照してください。
クラス定義の保存および削除
クラス定義を変更した場合、以下のいずれかの方法で InterSystems IRIS データベースに保存します。
クラス定義を削除するには、ワークスペース・ウィンドウで、クラスを選択して、[編集]→[クラス削除] classname を選択します。クラスと生成されたすべてのファイルが削除されます。
クラス定義のコンパイル
スタジオでは、以下の方法でクラス定義をコンパイルできます。
-
[ビルド]→[コンパイル] または [コンパイル] アイコン を使用する方法。これは、変更されたすべてのクラス定義を保存し、実行中のエディタ・ウィンドウに表示されている現在のクラス定義をコンパイルします。
-
[ビルド]→[すべて再ビルド] または [すべて再ビルド] アイコン を使用する方法。これにより、変更済みのオープン・クラス定義がすべて保存され、現在のプロジェクトのクラスがすべてコンパイルされます。
Note:
[ツール]→[オプション] ダイアログの [コンパイル] タブを使用して、クラスをコンパイルする方法を指定できます。
増分コンパイル
スタジオでは、クラスの増分コンパイルを実行できます。この機能は、[関連最新アイテムをスキップ] オプションにチェックを付けると有効になります。このオプションを探すには、[ツール]→[オプション] ダイアログの [コンパイラ]→[フラグおよび最適化] タブを開きます。
このオプションを有効にし、1 つ以上のメソッドのソース・コードに変更を加えた場合、[ビルド]→[コンパイル] を選択すると、変更されたメソッドのみをコンパイルできます(オーバーライドするには [ビルド]→[すべて再ビルド] を使用します)。クラス・インタフェース (プロパティやメソッド・シグニチャなど) やストレージ定義を変更した場合はすべて、完全コンパイルが必要です。
増分コンパイルは通常、完全コンパイルよりも処理が高速であるため、開発中のメソッド (アプリケーション・ロジック) に部分的変更を行う場合の処理をスピードアップできます。
増分コンパイルは、以下のように動作します。
-
クラス・コンパイラは、実装が変更されたすべてのメソッドを検索し、その実行時コードを MyApp.MyClass.5.INT などの新規のルーチンに配置し、このルーチンをコンパイルします。
-
次に、クラス・コンパイラは、コンパイルされたメソッドの新規の実装を使用できるように、クラスの実行時のクラス記述子を変更します。アプリケーションがこのメソッドのうちの 1 つを呼び出すとき、新規のコードは送信され、実行されます。
-
残りのクラス定義 (コンパイルされたメタ情報、永続クラスのストレージ情報、実行時 SQL 情報) は、変更されません。変更されたメソッドの以前の実装は、実行時コードに残されますが、実行はされないことに注意してください。
完全な (増分でない) コンパイルが実行されるとき、増分コンパイルされたメソッドを含むすべての余分なルーチンが削除されます。アプリケーションを配置するときは、事前にすべてのクラスで完全コンパイルを実行し、余分なルーチンを削除しておきます。
クラス定義の名前を変更する
クラス定義を一度生成すると、その名前を変更することはできません。しかし、クラスのコピーを作成し、それに新しい名前を付けることはできます。手順は以下のとおりです。
-
[ツール]→[クラスをコピー] を選択します。
-
[クラス定義のコピー元] フィールドで、新しい名前を付けるクラスを選択します。
-
[コピー先] フィールドに新しいクラス名を入力します。
-
[プロジェクトに新規クラスを追加]、[クラス名のインスタンスを置換]、[ストレージ定義のコピー] の 3 つのオプションのいずれかを選択します。
-
[OK] をクリックします。
-
元のクラス定義のコピーが含まれた、新しいクラス・エディタ・ウィンドウが表示されます。クラス・エディタを使用して、希望の変更を行うことができます。この新規のクラス定義は、いつでも保存できます。
-
必要な場合は、従来のクラス定義を削除することもできます。
クラス・インスペクタ
クラス・インスペクタには、現在のクラス定義が編集可能な表形式で表示されます。クラス・インスペクタの主なコンポーネントは以下のとおりです。
クラス・インスペクタ
-
メンバ・セレクタ : 表示するキーワードのグループを制御します。クラス全体のキーワード、または特定のクラス・メンバ (プロパティやメソッド) のキーワードのいずれかを選択して表示できます。
-
項目セレクタ : どのクラス・メンバ (特定のプロパティなど) を表示するのかを制御します。リストのコンテンツは、メンバ・セレクタの値によって異なります。(Summary) を選択すると、メンバ・セレクタで指定されたタイプの、すべてのメンバのリストが表示されます。
-
キーワード : 現在のクラスのキーワードのリスト、またはメンバ・セレクタと項目セレクタによって選択されたクラス・メンバのキーワードのリストが表示されます。キーワードをハイライト表示すると説明が表示され、その値を編集できます (値の右の [編集] を選択するか、値を直接編集します)。値が明示的に設定された (継承されていない、または既定で設定されていない) キーワードは、bold で表示されます。
-
値 : キーワード・リストに表示されているキーワードの値が表示されます。クラス定義が最後に保存された以後に変更された値は、青で表示されます。
クラス・インスペクタの開始
クラス・インスペクタを開始するには、[参照]→[インスペクタ] を選択します。クラス・インスペクタでは、ワークスペースとペインを共有します。[インスペクタ] タブをクリックして、クラス・インスペクタにアクセスします。
クラス・インスペクタの起動
クラス・インスペクタを起動したときには、現在の情報が表示されます (起動していないときは、グレー表示されます)。クラス・インスペクタを起動する手順は以下のとおりです。
-
現在のエディタ・ウィンドウには、クラス定義が表示されていることを確認してください (ルーチンの場合、クラス・インスペクタは機能しません)。
-
クラス・インスペクタを選択します。
クラス・インスペクタが起動すると、その背景は白色に変わり、コンテンツは更新されて現在のクラス定義が反映されます。インスペクタを使用してキーワード値を変更すると、対応するクラス・エディタ・ウィンドウが休止します (グレー表示されます)。インスペクタでの作業が終了したら、元のクラス・エディタ・ウィンドウを選択します。これで、クラス・エディタ・ウィンドウがアクティブになり、クラス・インスペクタで行った変更の結果が表示されます。
クラス・インスペクタで右クリックすると、ポップアップ・メニューが表示され、新規のクラス・メンバの追加などの操作を行えます。
クラス・ブラウザ
スタジオのクラス・ブラウザ・ユーティリティを使用すると、クラス階層に配置された利用可能なすべてのクラスを表示できます。これらのクラスごとに、スーパークラスから継承されたものも含めたプロパティやメソッドなどのクラス・メンバを表示することができます。クラス・ブラウザには、クラス・メンバが表形式で表示されます。列のタイトルを選択すると、その列でクラス・メンバを並べ替えることができます。
-
[ツール]→[クラス・ブラウザ] を使用してクラス・ブラウザを開きます。
-
クラス・ブラウザの項目を右クリックすると、その項目をプロジェクトに追加するか、クラス・エディタに表示するか、あるいはドキュメントを表示するかを選択できます。
スーパークラス・ブラウザと派生クラス・ブラウザ
スタジオには、すべてのスーパークラスを表示するブラウザと、現在のクラス定義の派生クラスを表示するブラウザがあります。
スーパークラス・ブラウザ
[クラス]→[スーパークラス] を選択してスーパークラス・ブラウザを開くと、現在のクラスのすべてのスーパークラスがアルファベット順に表示されます。
クラスを選択してからボタンを選択すると、そのクラスを現在のプロジェクトに追加したり、クラス・エディタに表示したり、あるいはドキュメントを表示できます。
派生クラス・ブラウザ
[クラス]→[派生クラス] を選択して派生クラス・ブラウザを表示すると、現在のクラス定義から派生したすべてのクラスがアルファベット順に表示されます。
クラスを選択してからボタンを選択すると、そのクラスを現在のプロジェクトに追加したり、クラス・エディタに表示したり、あるいはドキュメントを表示できます。
パッケージ情報
スタジオでは、[パッケージ情報] ダイアログを使用して、特定のクラス・パッケージに関する情報を表示したり、編集したりできます。
パッケージ情報を表示するには、[ワークスペース] ウィンドウの [プロジェクト] タブで、パッケージ名を右クリックして [パッケージ情報] を選択します。
[パッケージ情報] ダイアログ
[パッケージ情報] ウィンドウには、以下の情報が表示されます。
パラメータ |
説明 |
パッケージ名 |
パッケージの名前。 |
説明 |
パッケージの説明。 |
所有者 |
このパッケージの SQL の所有者名。これは、パッケージの SQL 表示に対するスキーマ・ワイドの権限を提供するために使用されます。 |
SQL 名 |
パッケージの関係を示すために使用される SQL スキーマの名前。 |
クライアント名 |
このパッケージのクラスに生成されたプロジェクションに使用されたパッケージ名。例えば、このパッケージに bank.account というクラスが含まれており、このパッケージに com.mycompany.bank というクライアント・パッケージ名を付けた場合、クラスがコンパイルされると、このクラスの Java プロジェクションは com.mycompany.bank.account になります。 |
ルーチン接頭語 |
このパッケージ内のクラスから生成されたルーチンの接頭辞として使用される文字列 |
グローバル接頭語 |
このパッケージ内の永続クラスによって使用される、既定のグローバル名の接頭辞として使用される文字列 |
クラス・パッケージについての詳細は、"クラスの定義と使用" の “パッケージ” の章を参照してください。