Javaの基礎Java

Javaの基礎:オブジェクト指向の基本的な概念を解説

Javaオブジェクト指向解説ページのアイキャッチ画像 Javaの基礎

この記事では、Javaオブジェクト指向の基本的な概念を理解できます。オブジェクト指向の基本原則、実際のプログラム例、そしてJava 14以降に導入された機能について学ぶことができます。特に、クラスの設計と使用方法、そしてレコードという新しい言語機能に焦点を当てています。

はじめに

この記事のコードをコピペしてEclipseで出力結果を確認してみよう

オブジェクト指向の基本

オブジェクト指向プログラミングは、データとそれを操作するメソッドを一つの単位(オブジェクト)にまとめる考え方です。主要な概念は以下の通りです:

  1. クラスとオブジェクト: クラスはオブジェクトの設計図、オブジェクトはクラスの実体です。
  2. メソッド: オブジェクトの振る舞いを定義する関数です。
  3. フィールド: オブジェクトのデータを保持する変数です。

プログラム例(車クラス)

以下は、簡単な「車」クラスの例です:

Car.java

Java
// Carクラスの定義
public class Car {
    // フィールド(属性)
    String brand;  // 車のブランド
    String color;  // 車の色

    // startメソッド:車を始動させる
    public void start() {
        System.out.println(color + " " + brand + " が始動しました。");
    }

    // stopメソッド:車を停止させる
    public void stop() {
        System.out.println(color + " " + brand + " が停止しました。");
    }
}

Main.java

Java
// Mainクラス
public class Main {
    // mainメソッド:プログラムのエントリーポイント
    public static void main(String[] args) {
        // Carクラスのインスタンスを作成
        Car myCar = new Car();

        // フィールドに値を設定
        // ドット記法を使って、オブジェクトのフィールドに直接アクセスし値を設定します
        myCar.brand = "Toyota";
        myCar.color = "赤";

        // メソッドを呼び出す
        myCar.start();
        myCar.stop();
    }
}

出力結果:

赤 Toyota が始動しました。
赤 Toyota が停止しました。

Car.javaの解説

クラス定義:

Java
public class Car {
    // ...
}
  • public キーワードは、このクラスが他のクラスからアクセス可能であることを示します。
  • class Car は、Car という名前のクラスを定義しています。
  • このクラスは車の概念をモデル化しています。

フィールド(属性):

Java
String brand;  // 車のブランド
String color;  // 車の色
  • これらはクラスのフィールド(インスタンス変数)です。
  • brandcolorそれぞれ車のブランドと色を表す文字列(String)型の変数です。
  • これらのフィールドはCar オブジェクトの状態を保持します。

startメソッド:

Java
public void start() {
    System.out.println(color + " " + brand + " が始動しました。");
}
  • publicこのメソッドが他のクラスからアクセス可能であることを示します。
  • voidこのメソッドが値を返さないことを示します。
  • start() メソッドは車の始動を表現しています。
  • System.out.println() を使用して、車の色とブランド、そして始動したことをコンソールに出力します。

stopメソッド:

Java
public void stop() {
    System.out.println(color + " " + brand + " が停止しました。");
}
  • このメソッドも start() と同様の構造を持ちます。
  • stop() メソッドは車の停止を表現しています。
  • 車の色とブランド、そして停止したことをコンソールに出力します。

重要なポイント:

  • このクラスはカプセル化の原則を完全には守っていません。フィールドが public でないにもかかわらず、直接アクセス可能になっています。
  • メソッドは車の行動を表現しており、これはオブジェクト指向プログラミングの基本原則に従っています
  • このクラスは再利用可能で、複数の車オブジェクトを作成するのに使用できます。
  • フィールドとメソッドの組み合わせにより、データ(属性)と振る舞い(メソッド)が一つの単位にまとめられています。これはオブジェクト指向プログラミングの核心的な特徴です。

Main.javaの解説

クラス定義:

Java
public class Main {
    // ...
}
  • public class Main はメインクラスを定義しています。
  • このクラスにはプログラムのエントリーポイントとなる main メソッドが含まれています

mainメソッド:

Java
public static void main(String[] args) {
    // ...
}
  • public static void main(String[] args) はJavaプログラムの標準的なエントリーポイントです[1]。
  • public: このメソッドが他のクラスからアクセス可能であることを示します。
  • static: このメソッドがクラスに属し、インスタンス化なしで呼び出せることを示します[3]。
  • void: このメソッドが値を返さないことを示します。
  • String[] args: コマンドライン引数を受け取るための配列パラメータです。

Carオブジェクトの作成:

Java
Car myCar = new Car();
  • new Car()Car クラスの新しいインスタンス(オブジェクト)を作成しています。
  • myCar は作成されたオブジェクトを参照する変数です。

フィールドの設定:

Java
myCar.brand = "Toyota";
myCar.color = "赤";
  • 作成した Car オブジェクトのフィールドに直接値を設定しています。
  • これはカプセル化の原則に反するため、実際のプログラムではセッターメソッドを使用することが推奨されます。

メソッドの呼び出し:

Java
myCar.start();
myCar.stop();
  • 作成した Car オブジェクトのメソッドを呼び出しています。
  • これらのメソッド呼び出しにより、コンソールに車の状態が出力されます。

重要なポイント:

  • main メソッドはプログラムの実行開始点であり、JVMによって最初に呼び出されます。
  • このクラスはCar クラスのオブジェクトを作成し、操作するための制御クラスとして機能しています。
  • オブジェクト指向プログラミングの基本原則である、オブジェクトの作成、属性の設定、メソッドの呼び出しが実践されています。
  • このコードはCar クラスと Main クラスの相互作用を示しており、オブジェクト指向プログラミングの基本的な構造を表現しています。

プログラム例(本クラス)

以下は、簡単な「本」クラスの例です:

Book.java

Java
// Bookクラスの定義
public class Book {
    // フィールド(属性)
    // これらの変数は各Bookオブジェクトの特性を表します
    String title;  // 本のタイトル
    String author;  // 著者名
    int pages;  // ページ数
    
    // メソッド
    // このメソッドは本の情報を表示します
    public void displayInfo() {
        // System.out.printlnは、コンソールに文字列を出力するメソッドです
        System.out.println("タイトル: " + title);
        System.out.println("著者: " + author);
        System.out.println("ページ数: " + pages);
    }
}

Main.java

Java
// Mainクラス
public class Main {
    // mainメソッド:プログラムの実行開始点
    public static void main(String[] args) {
        // Bookクラスのインスタンス(オブジェクト)を作成
        // newキーワードを使って新しいBookオブジェクトを生成し、myBook変数に代入します
        Book myBook = new Book();
        
        // フィールドに値を設定
        // ドット記法を使って、オブジェクトのフィールドに直接アクセスし値を設定します
        myBook.title = "Java入門";
        myBook.author = "山田太郎";
        myBook.pages = 300;
        
        // メソッドを呼び出す
        // displayInfo()メソッドを呼び出して、本の情報を表示します
        myBook.displayInfo();
    }
}

出力結果:

タイトル: Java入門
著者: 山田太郎
ページ数: 300

Book.javaの解説

クラス定義:

Java
public class Book {
    // ...
}
  • public class BookBook という名前のクラスを定義しています。
  • public キーワードは、このクラスが他のクラスからアクセス可能であることを示します。
  • このクラスは本の概念をモデル化しています。

フィールド(属性):

Java
String title;  // 本のタイトル
String author;  // 著者名
int pages;  // ページ数
  • これらはクラスのフィールド(インスタンス変数)です。
  • titleauthor は文字列(String)型で、それぞれ本のタイトルと著者名を表します
  • pages は整数(int)型で、本のページ数を表します
  • これらのフィールドはBook オブジェクトの状態を保持します。

displayInfoメソッド:

Java
public void displayInfo() {
    System.out.println("タイトル: " + title);
    System.out.println("著者: " + author);
    System.out.println("ページ数: " + pages);
}
  • publicこのメソッドが他のクラスからアクセス可能であることを示します。
  • voidこのメソッドが値を返さないことを示します。
  • displayInfo() メソッドは本の情報を表示する機能を提供します。
  • System.out.println() を使用して、本のタイトル、著者、ページ数をコンソールに出力します。

重要なポイント:

  • このクラスはカプセル化の原則を完全には守っていません。フィールドが public でないにもかかわらず、直接アクセス可能になっています。
  • メソッドは本の情報を表示する行動を表現しており、これはオブジェクト指向プログラミングの基本原則に従っています
  • このクラスは再利用可能で、複数の本オブジェクトを作成するのに使用できます。
  • フィールドとメソッドの組み合わせにより、データ(属性)と振る舞い(メソッド)が一つの単位にまとめられています。これはオブジェクト指向プログラミングの核心的な特徴です。

このクラス設計により、本の情報を効率的に管理し、必要に応じて表示することができます。ただし、より堅牢なプログラムにするためには、フィールドをprivateにし、ゲッターとセッターメソッドを追加することが推奨されます。

Main.javaの解説

クラス定義:

Java
public class Main {
    // ...
}
  • public class Main はメインクラスを定義しています。
  • このクラスにはプログラムのエントリーポイントとなる main メソッドが含まれています

mainメソッド:

Java
public static void main(String[] args) {
    // ...
}
  • public static void main(String[] args) はJavaプログラムの標準的なエントリーポイントです。
  • public: このメソッドが他のクラスからアクセス可能であることを示します。
  • static: このメソッドがクラスに属し、インスタンス化なしで呼び出せることを示します。
  • void: このメソッドが値を返さないことを示します。
  • String[] args: コマンドライン引数を受け取るための配列パラメータです。

Bookオブジェクトの作成:

Java
Book myBook = new Book();
  • new Book()Book クラスの新しいインスタンス(オブジェクト)を作成しています。
  • myBook は作成されたオブジェクトを参照する変数です。

フィールドの設定:

Java
myBook.title = "Java入門";
myBook.author = "山田太郎";
myBook.pages = 300;
  • 作成した Book オブジェクトのフィールドに直接値を設定しています。
  • ドット記法を使用して、オブジェクトのフィールドにアクセスしています。
  • これはカプセル化の原則に反するため、実際のプログラムではセッターメソッドを使用することが推奨されます。

メソッドの呼び出し:

Java
myBook.displayInfo();
  • 作成した Book オブジェクトの displayInfo() メソッドを呼び出しています。
  • このメソッド呼び出しにより、コンソールに本の情報が出力されます。

重要なポイント:

  • main メソッドはプログラムの実行開始点であり、JVMによって最初に呼び出されます。
  • このクラスはBook クラスのオブジェクトを作成し、操作するための制御クラスとして機能しています。
  • オブジェクト指向プログラミングの基本原則である、オブジェクトの作成、属性の設定、メソッドの呼び出しが実践されています。
  • このコードはBook クラスと Main クラスの相互作用を示しており、オブジェクト指向プログラミングの基本的な構造を表現しています。

このMainクラスは、Bookクラスの使用方法を示す良い例となっています。ただし、より良いプログラム設計のためには、フィールドへの直接アクセスを避け、適切なメソッドを通じてオブジェクトを操作することが推奨されます。

Java 14以降の便利な機能

Java 14以降、複数クラスを用いた開発に役立つ新機能がいくつか導入されました。その中でも特に有用なのは以下の機能です:

レコード(Java 14から、Java 16で正式導入)

レコードは、データを保持するだけの簡潔なクラスを定義するための機能です。

  1. Person.java
Java
public record Person(String name, int age) {}
  1. Main.java
Java
public class Main {
	public static void main(String[] args) {
		Person person = new Person("Alice", 30);
		System.out.println(person.name()); // Alice
		System.out.println(person.age()); // 30
		System.out.println(person); // Person[name=Alice, age=30]
	}
}

出力結果:

Alice
30
Person[name=Alice, age=30]

解説:

  • レコードは自動的にequals(), hashCode(), toString()メソッドを生成します。
  • getterメソッドが自動的に生成されるため、ボイラープレートコードが大幅に削減されます。
  • 不変オブジェクトを簡単に作成できるため、複数クラスを用いた開発でデータ転送オブジェクト(DTO)として特に有用です。

この新機能により、複数クラスを用いた開発がより簡潔で効率的になります。

Person.java

Java
public record Person(String name, int age) {}
  • これは record という Java の新しい機能を使用しています。
  • record は、データを保持するためのシンプルなクラスを作成する簡潔な方法です。
  • この Person レコードは、name(文字列)と age(整数)という2つのフィールドを持ちます。
  • レコードは自動的にコンストラクタ、getter メソッド、equals(), hashCode(), toString() メソッドを生成します。

Main.java

Java
public class Main {
    public static void main(String[] args) {
        // メソッドの中身
    }
}
  • これは メインクラスmain メソッド を定義しています。
  • main メソッドは、プログラムの 実行開始点 です。

Person オブジェクトの作成

Java
Person person = new Person("Alice", 30);
  • この行は 新しい Person オブジェクトを作成 しています。
  • new キーワードを使用して、Person レコードのインスタンスを生成しています。
  • “Alice” という名前と 30 という年齢を指定しています。

フィールドへのアクセス

Java
System.out.println(person.name()); // Alice
System.out.println(person.age());  // 30
  • person.name() は、Person オブジェクトの name フィールドにアクセスしています。
  • person.age() は、Person オブジェクトの age フィールドにアクセスしています。
  • レコードは自動的に getter メソッド を生成するため、これらのメソッドを使ってフィールドの値を取得できます。

オブジェクトの文字列表現

Java
System.out.println(person);        // Person[name=Alice, age=30]
  • この行は Person オブジェクトの 文字列表現 を出力します。
  • レコードは自動的に toString() メソッド を生成するため、オブジェクトをそのまま出力すると、フィールドの値を含む文字列が表示されます。

重要なポイント:

  1. record は、データを保持するための簡潔なクラスを定義する新しい Java の機能です。
  2. レコードは 自動的に多くのボイラープレートコードを生成 するため、コードの量を減らすことができます。
  3. レコードのフィールドは final(変更不可)であり、イミュータブル(不変)なオブジェクトを作成するのに適しています。
  4. レコードを使用すると、データクラスを簡単に作成でき、getter メソッドtoString() メソッドを自動的に利用できます。

このコードは、Java の record 機能を使用して簡潔なデータクラスを定義し、それを使用する方法を示しています。これにより、データを保持するクラスを効率的に作成し、使用することができます。

まとめ

  • オブジェクト指向プログラミングの基本概念(クラス、オブジェクト、メソッド、フィールド)
  • 実際のプログラム例(車クラスと本クラス)を通じて、クラスの設計と使用方法
  • Car.javaMain.javaの解説により、クラスの定義と使用の関係
  • Book.javaMain.javaの例で、異なるタイプのオブジェクトの作成と操作方法
  • Java 14以降に導入されたレコードという機能について

Javaプログラミングにおいて、オブジェクト指向の原則を理解し適用することは非常に重要です。この内容を通じて、基本的なクラス設計の知識を得ることができます。特に、レコードの導入はコードの簡潔性と可読性を向上させることができます。

未経験でもWEBスキルを取得したい方
  • Javaコース
    Javaプログラミングを基礎から応用まで、体系的に学べる実践的なカリキュラムが特徴です。「マインクラフト」を通じてJavaの基本文法とフレームワークの概念を学びます。また、実際のプロジェクト開発を通じて、データベース連携やWebアプリケーション開発のスキルを身につけることができます。

コメント

タイトルとURLをコピーしました