Javaにおける可変長引数とオブジェクト指向プログラミングの基礎概念

可変長引数による不定数パラメータの処理

メソッドに渡される引数の数が事前に不明な場合、Javaでは可変長引数(Varargs)を利用します。可変長引数は内部で配列として扱われ、メソッドの仮引数リストの最後に配置する必要があります。

public class MathUtil {
    // 可変長引数を使用した平均値の計算
    public static double calculateAverage(double... numbers) {
        if (numbers.length == 0) {
            return 0.0;
        }
        double total = 0.0;
        for (double num : numbers) {
            total += num;
        }
        return total / numbers.length;
    }

    public static void main(String[] args) {
        System.out.println(calculateAverage(10.5, 20.0, 30.5));
        System.out.println(calculateAverage(5.0, 15.0));
    }
}

オブジェクト指向のアプローチと設計プロセス

オブジェクト指向プログラミング(OOP)は、システムの保守性と拡張性を向上させるためのパラダイムです。開発プロセスは一般的に以下のフェーズに分けられます。

  • OOA(オブジェクト指向分析): 要件を定義し、システム内のエンティティとそれらの関係を特定します。
  • OOD(オブジェクト指向設計): 分析結果に基づき、クラス構造やインターフェースを設計します。
  • OOP(オブジェクト指向プログラミング): 設計に従って実際のコードを記述します。

設計の際は、要件から機能ポイントを抽出し、関与するエンティティ(人、物、概念)を特定し、それぞれの属性(状態)と振る舞い(動作)を定義し、エンティティ間の関連性をマッピングします。

クラスとオブジェクトの概念

クラスはオブジェクトの設計図(テンプレート)であり、抽象的な概念を定義します。一方、オブジェクトはクラスに基づいて生成された具体的なインスタンスです。

クラスは主に以下の要素で構成されます。

  • フィールド(属性): オブジェクトの状態や特徴を表す変数。
  • メソッド(振る舞い): オブジェクトが実行できるアクションや機能。

オブジェクトは new キーワードを使用してインスタンス化されます。参照変数に代入せずに直接 new だけで生成したオブジェクトは匿名オブジェクトと呼ばれ、生成直後の一度しか参照できません。

コンストラクタと初期化

コンストラクタは、オブジェクトの生成時に呼び出され、初期状態を設定するための特別なメソッドです。

  • クラス名と同一の名前を持つ。
  • 戻り値の型を宣言しない。
  • オーバーロードにより複数のコンストラクタを定義可能。
  • 引数なしのコンストラクタを明示的に定義しない場合、コンパイラがデフォルトコンストラクタを自動生成する。ただし、引数付きコンストラクタを一つでも定義すると、デフォルトコンストラクタは自動生成されなくなる。

thisキーワードによるスコープの明確化

this キーワードは、現在のオブジェクト自身の参照を表します。コンストラクタやメソッド内で、パラメータ(ローカル変数)とクラスのフィールド(インスタンス変数)が同じ名前を持つ場合、this を使用してフィールドを明示的に指定します。

public class Employee {
    private String employeeName;
    private int employeeAge;

    // 引数付きコンストラクタ
    public Employee(String employeeName, int employeeAge) {
        // thisを使用してインスタンス変数とローカル変数を区別する
        this.employeeName = employeeName;
        this.employeeAge = employeeAge;
    }
}

public class Application {
    public static void main(String[] args) {
        // 通常のオブジェクト生成
        Employee staff1 = new Employee("Alice", 28);
        
        // 匿名オブジェクトの生成(参照変数に代入しない)
        new Employee("Bob", 35);
    }
}

タグ: Java 可変長引数 オブジェクト指向 クラス設計 コンストラクタ

9月27日 16:28 投稿