概要
Cava では、クラスを定義し、オブジェクトを作成できます。このプログラミング言語は、オブジェクト指向プログラミングで使用される以下の概念をサポートしています。
カプセル化
抽象化
クラス
オブジェクト
インスタンス
メソッド
オブジェクト指向プログラミングに関しては、Cava の構文は Java や C# の構文に似ています。
例
次のサンプルコードでは、Example
という名前のクラスが定義され、ハンドラー関数を使用して example
という名前のオブジェクトが作成され、オブジェクトの PI
という名前のメンバー変数にアクセスします。
class Example { // <== クラス
double PI;
Example() {
PI = 3.1415926;
}
static int main() {
Example example = new Example();
double a = example.PI; // a の値は 3.1415926 です。
return 0;
}
}
機能
クラスの定義
クラスを定義するには、class
キーワードを使用する必要があります。クラスの定義には、以下の操作が含まれます。
メンバー変数の定義: メンバー変数は、関連オブジェクトのデータを保持します。
コンストラクターの定義: コンストラクターは、作成されたオブジェクトを初期化するために使用されます。
メンバー関数の定義: メンバー関数は、関連オブジェクトにアクセスするためのメソッドです。
クラス関数の定義: クラス関数はすべてのオブジェクトで共有され、クラス名を使用してアクセスできます。
class Example { // Example という名前のクラスを定義します。
public double PI; // メンバー変数を定義します。
Example() { // コンストラクターを定義します。
PI = 3.1415926;
}
double getPI() { // メンバー関数を定義します。
return PI;
}
static int main() {
Example example = new Example();
double a = example.getPI(); // a の値は 3.1415926 です。
return 0;
}
}
オブジェクトの作成
クラスを定義した後、そのクラスを使用してオブジェクトを作成できます。オブジェクトの作成には、以下の操作が含まれます。
宣言: 変数を宣言し、変数のクラスを指定します。
インスタンス化:
new
キーワードを使用して、オブジェクトのインスタンスを作成します。初期化:
new
キーワードの横にコンストラクターを指定します。コンストラクターは、オブジェクトを初期化するために使用されます。
次のサンプルコードは、オブジェクトを作成する方法の例を示しています。main
関数の最初の行は、Example
クラスのオブジェクトを作成し、そのオブジェクトを example
変数に格納するために使用されます。オブジェクトが作成された後、example
変数を使用して、オブジェクトのデータメンバーにアクセスできます。
class Example {
double PI;
Example() {
PI = 3.1415926;
}
static int main() {
Example example = new Example();
return 0;
}
}
メンバー変数の定義
次のサンプルコードは、DOUBLE
型の PI
という名前のメンバー変数を定義する方法の例を示しています。
class Example {
double PI; // <==
Example() {
PI = 3.1415926;
}
}
注: メンバー変数を定義するときに、変数の初期値を指定することはできません。コンストラクターを使用してメンバー変数を初期化する必要があります。
class Example {
double PI = 3.1415926; // メンバー変数を定義するときに、変数を初期化することはできません。
}
コンストラクターの定義
コンストラクターは、Cava の特別なメンバー関数です。コンストラクターには、以下の制限があります。
コンストラクターの名前とクラス名は同じである必要があります。
コンストラクターには戻り値がありません。出力パラメーターを指定することはできません。
コンストラクターは、関連オブジェクトが作成された後に自動的に呼び出されます。コンストラクターのコマンドは、オブジェクトを初期化するために実行されます。Cava では、複数のコンストラクターを定義できます。new
コマンドの指定された構文によって、オブジェクトの作成と初期化に使用されるコンストラクターが決まります。次のサンプルコードは、main
ハンドラー関数を使用して 2 つのオブジェクトを作成する方法の例を示しています。最初のオブジェクトは、コンストラクター A を使用して初期化されます。初期化後、PI
メンバー変数の値は 3.1415926
になります。2 番目のオブジェクトは、コンストラクター B を使用して初期化されます。初期化後、PI
メンバー変数の値は 3.14
になります。
class Example {
public double PI;
Example() { // <== A
this.PI = 3.1415926;
}
Example(double customPI) { // <== B
this.PI = customPI;
}
double getPI() {
return PI;
}
static int main() {
Example example1 = new Example(); // コンストラクター A を使用して作成されたオブジェクトを初期化します。
double a = example1.getPI();
Example example2 = new Example(3.14); // コンストラクター B を使用して作成されたオブジェクトを初期化します。
double b = example2.getPI();
return 0;
}
}
注: コンストラクターは関数のオーバーロードをサポートしています。
メンバー関数の定義
メンバー関数は、メンバー変数に関連する操作をカプセル化します。オブジェクトのコンシューマーは、メンバー関数を呼び出して、関連するメンバー変数を読み取りおよび変更できます。メンバー関数で定義されたメンバー変数は、メンバー関数を使用してアクセスできます。メンバー関数のスコープ内の変数がメンバー変数と同じ名前を共有している場合、変数名で変数にアクセスするときに、スコープ内の変数が優先されます。この場合、変数名に this
プレフィックスを追加して、メンバー変数にアクセスできます。
class Example {
public double PI;
Example() {
this.PI = 3.1415926;
}
void getPI() {
return PI;
}
static int main() {
Example example = new Example();
double a = example.getPI();
return 0;
}
}
注: メンバー関数は関数のオーバーロードをサポートしています。クラス内で同じ名前のメンバー関数を複数定義できます。コンパイラーは、コードで指定された入力パラメーターの型と数に基づいて最適な関数を選択します。
クラス関数の定義
クラス関数は、関連クラスに属し、クラスのすべてのデータメンバーで共有されます。static
キーワードを使用して、クラスのクラス関数を定義できます。その後、オブジェクトを作成せずに、クラスを使用してクラス関数にアクセスできます。ただし、メンバー関数にアクセスするには、オブジェクトを使用する必要があります。
class Example {
static double getPI() { // <==
return 3.1415926;
};
static int main() {
double a = Example.getPI();
return 0;
}
}
継承とポリモーフィズム
Cava はクラス継承をサポートしていません。