すべてのプロダクト
Search
ドキュメントセンター

OpenSearch:クラスとオブジェクト

最終更新日:Dec 28, 2024

概要

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 はクラス継承をサポートしていません。