Java メソッドと基本的なオブジェクト指向プログラミング

JavaJavaBeginner
オンラインで実践に進む

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、メソッドとオブジェクト指向プログラミング(OOP)の基本を紹介することで、あなたの Java のスキルを向上させます。これらの概念は、構造的に良く、再利用可能で効率的なコードを書くために不可欠です。以下の内容を学びます。

  1. コードを整理して再利用性を高めるためのメソッドの作成と利用
  2. クラスとオブジェクトの背後にある核心の考え方の理解
  3. メソッドと属性を含む基本クラスの実装

この実験が終了するとき、あなたはメソッドを活用して複雑な問題を小さくて管理しやすいセグメントに分割する Java プログラムを書くことができるようになります。また、Java におけるオブジェクト指向プログラミングがどのように機能するかを理解するようになります。これは、より大きく、より複雑なアプリケーションを構築するための重要なスキルです。これらの概念が最初は複雑に見える場合も、心配しないでください。私たちは段階的にアプローチし、実験が終了するまでに、これらの考え方がより整理された強力なコードにどのように貢献するかを理解するようになります。

始めましょう!

これは Guided Lab です。学習と実践を支援するためのステップバイステップの指示を提供します。各ステップを完了し、実践的な経験を積むために、指示に注意深く従ってください。過去のデータによると、この 初級 レベルの実験の完了率は 89%です。学習者から 99% の好評価を得ています。

メソッドの理解と作成

メソッドは、基本的にメインプログラム内にある小さなプログラムです。メソッドは、コードを整理し、可読性を向上させ、同じコードを繰り返し記述することなくコードを再利用できるようにします。メソッドは、ツールキット内の特殊なツールと考えることができます。それぞれが特定の目的のために設計されています。

  1. まず、WebIDE で MethodDemo.java ファイルを開きます。次のスターターコードが表示されます。

    public class MethodDemo {
        public static void main(String[] args) {
            System.out.println("Welcome to the Method Demo!");
    
            // TODO: Call methods here
        }
    
        // TODO: Add methods here
    }

    これは、Java プログラムの基本的な構造です。main メソッドは、プログラムの実行が開始されるエントリポイントです。

  2. 次に、最初のメソッドを作成しましょう。挨拶を表示する簡単なメソッドを作成します。このメソッドを main メソッドの外側と後、クラスレベルに追加します。

    public class MethodDemo {
        public static void main(String[] args) {
            System.out.println("Welcome to the Method Demo!");
    
            // TODO: Call methods here
        }
    
        // Add the new method here, outside and after the main method
        public static void printGreeting(String name) {
            System.out.println("Hello, " + name + "! Welcome to Java methods.");
        }
    }

    この意味を分解してみましょう。

    • public: このキーワードは、メソッドが他のクラスからアクセスできることを示します。
    • static: これは、メソッドがクラスの特定のインスタンスではなく、クラス自体に属することを意味します。この概念については後で詳しく説明します。今のところは、オブジェクトを作成せずに使用したいメソッドの要件と考えてください。
    • void: これは、メソッドが値を返さないことを意味します。挨拶を表示するアクションを実行しますが、データを返しません。
    • printGreeting: これは、メソッドに割り当てた名前です。この名前を使用して、メソッドを呼び出します。
    • (String name): これはパラメータ(引数)であり、メソッドが受け入れるデータです。String を想定しており、name という名前を付けました。このメソッドを呼び出すときは、このパラメータに値を指定する必要があります。
  3. 素晴らしい!メソッドを作成したので、使用してみましょう。main メソッド内で、// TODO: Call methods here コメントを次のように置き換えます。

    printGreeting("Alice");
    Java method call example

    この行は、printGreeting メソッドを 呼び出し または 起動 し、「Alice」という名前を 引数 として渡します。引数は、メソッドがアクションを実行するために必要な特定の入力(input)を提供します。

  4. ファイルを保存し、プログラムをコンパイルして実行しましょう。WebIDE の下部にあるターミナルで、次のコマンドを入力します。

    javac ~/project/MethodDemo.java
    java -cp ~/project MethodDemo

    最初のコマンドは Java ファイルをコンパイルし、Java 仮想マシンが理解できるバイトコードに変換します。2 番目のコマンドは、コンパイルされたプログラムを実行します。次のような出力が表示されます。

    Welcome to the Method Demo!
    Hello, Alice! Welcome to Java methods.
  5. 素晴らしい!最初の Java メソッドを作成して使用しました。別の名前で再度呼び出してみましょう。main メソッドで、最初の printGreeting 呼び出しの直後に次の行を追加します。

    printGreeting("Bob");
  6. 保存、コンパイル、およびプログラムを再度実行します。これで、次のように表示されます。

    Welcome to the Method Demo!
    Hello, Alice! Welcome to Java methods.
    Hello, Bob! Welcome to Java methods.

    異なる入力でメソッドを再利用できることに注目してください。これは、メソッドを使用する大きな利点です。

  7. 次に、値を返すメソッドを作成しましょう。このメソッドをクラスに、printGreeting メソッドの下に追加します。

    public static int sumNumbers(int a, int b) {
        return a + b;
    }

    このメソッドは 2 つの整数を受け取り、それらを加算して結果を返します。void の代わりに int を使用して、このメソッドが整数値を返すことを示していることに注意してください。

  8. この新しいメソッドを main メソッドで使用してみましょう。main メソッドの最後に次の行を追加します。

    int result = sumNumbers(5, 7);
    System.out.println("The sum of 5 and 7 is: " + result);

    ここでは、sumNumbers メソッドを起動し、値 5 と 7 を引数として提供しています。メソッドの戻り値は、result という名前の変数に格納されます。戻り値を格納した後、値をコンソールに出力します。

  9. 保存、コンパイル、およびプログラムをもう一度実行します。これで、次の追加出力が表示されます。

    The sum of 5 and 7 is: 12
    Java method output example

おめでとうございます!最初の Java メソッドを作成して使用しました。メソッドがアクションを実行(挨拶の表示など)し、戻り値(2 つの数の合計など)を提供する方法を見てきました。メソッドを使用すると、コードをより小さく、再利用可能な部分に構造化できるため、プログラムの理解と保守が容易になります。

クラスとオブジェクトの入門

メソッドを理解したので、簡単なクラスを作成することでオブジェクト指向プログラミングに一歩踏み込みましょう。オブジェクト指向プログラミングでは、クラスをオブジェクトを作成するためのブループリントとして使用します。クラスをクッキーカッターと考え、オブジェクトをそれを使って作るクッキーと考えてください。

  1. Car.java を開いて、クラスの作成を始めましょう。まず、クラスを定義していくつかの属性を追加します。

    public class Car {
        // 属性
        private String make;
        private String model;
        private int year;
    }

    これらの属性(フィールドまたはプロパティとも呼ばれます)は、すべての Car オブジェクトが持つものを定義します。各車は、メーカー、モデル、製造年を持ちます。

    private キーワードは、これらの属性がクラス自体の内部からのみアクセスできることを示します。これは、カプセル化の例であり、オブジェクト内のデータの整合性を保護する概念です。

  2. では、クラスにコンストラクタを追加しましょう。コンストラクタは、新しいオブジェクトを作成するときに自動的に呼び出される特殊なメソッドです。主にオブジェクトの属性を初期化するために使用されます。Car クラスにこのコンストラクタを追加します。

    // コンストラクタ
    public Car(String make, String model, int year) {
        this.make = make;
        this.model = model;
        this.year = year;
    }

    このコンストラクタは 3 つのパラメータを受け取り、それらを使って属性の値を設定します。this キーワードは、現在のオブジェクトの属性を参照するために使用されます。属性とコンストラクタに渡されるパラメータの名前が同じ場合、オブジェクトの属性と区別するのに役立ちます。

  3. 次に、車の情報を表示するメソッドをクラスに追加しましょう。Car クラスにこのメソッドを追加します。

    // メソッド
    public void displayInfo() {
        System.out.println("Car Information:");
        System.out.println("Make: " + make);
        System.out.println("Model: " + model);
        System.out.println("Year: " + year);
    }
Java code snippet displayInfo method

このメソッドはパラメータを受け取らず、戻り値も返しません。単に車の情報をコンソールに出力します。

  1. 素晴らしい!Car クラスを作成しました。では、CarDemo.java を開いて、次のコードを追加しましょう。

    public class CarDemo {
        public static void main(String[] args) {
            // 次のステップでここにコードを追加します
        }
    }

    これは、デモプログラムの基本構造を確立します。

  2. では、いくつかの Car オブジェクトを作成して使ってみましょう。main メソッドの中にこのコードを追加します。

    Car myCar = new Car("Toyota", "Corolla", 2022);
    myCar.displayInfo();
    
    Car friendsCar = new Car("Honda", "Civic", 2023);
    friendsCar.displayInfo();

    ここでは、2 つの Car オブジェクトを作成しています。new キーワードは新しいオブジェクトを作成するために使用され、先ほど定義したコンストラクタを呼び出してメーカー、モデル、年を設定しています。その後、各車オブジェクトの displayInfo メソッドを呼び出してそれらのプロパティを表示しています。

  3. プログラムをコンパイルして実行する前に、複数の Java ファイル(Car.javaCarDemo.java)を扱っていることに注意することが重要です。依存関係のある複数のファイルをコンパイルする場合、一緒にコンパイルする必要があります。また、CarDemo.javaCar.java が同じディレクトリ内にあることを確認してください。そうでない場合、CarDemo.java の先頭に Car クラスをインポートする必要があります。

    CarDemo.javaCar.java が異なるディレクトリにある場合、CarDemo.java の先頭にインポート文を追加する必要があります。

    import packagename.Car;  // 必要に応じて 'packagename' を実際のパッケージ名に置き換えてください

    では、CarDemo プログラムをコンパイルして実行しましょう。

    javac ~/project/Car.java ~/project/CarDemo.java
    java -cp ~/project CarDemo

    最初のコマンドは、両方の Java ファイルを一緒にコンパイルして、すべての依存関係を解決します。2 番目のコマンドは、CarDemo クラスを実行します。

    次のような出力が表示されるはずです。

    Car Information:
    Make: Toyota
    Model: Corolla
    Year: 2022
    Car Information:
    Make: Honda
    Model: Civic
    Year: 2023
Java program output example

おめでとうございます!あなたは初めての Java クラスを作成し、それを使ってオブジェクトを作成しました。これは Java におけるオブジェクト指向プログラミングの基礎です。ブループリント(Car クラス)を定義し、それを使って特定のインスタンス(Car オブジェクト)を作成しました。各オブジェクトは独自の固有の属性セットを持っていますが、すべてクラスによって定義された構造と振る舞いを共有しています。

さらなるメソッドでクラスを拡張する

クラスとオブジェクトの基本的な理解があるので、Car クラスをさらに拡張してその利用性を高めましょう。車が実行できるアクションを表すメソッドと、車に関して調べたいプロパティを追加します。

  1. Car.java ファイルを開きます。車が加速することを表すメソッドを追加しましょう。Car クラスにこのメソッドを追加します。

    public void accelerate() {
        System.out.println("The " + make + " " + model + " is accelerating.");
    }

    このメソッドは車の属性を変更しません。単に車が加速していることを示すメッセージを表示します。

  2. では、ブレーキをかけるメソッドを追加しましょう。Car クラスにこのメソッドを追加します。

    public void brake() {
        System.out.println("The " + make + " " + model + " is braking.");
    }

    このメソッドも、前の accelerate メソッドと同じように、車のアクションに関するメッセージを表示するだけです。

  3. 次に、車に関する情報を提供するメソッドを追加しましょう。このメソッドを追加します。

    public String getMakeAndModel() {
        return make + " " + model;
    }

    このメソッドはメーカーとモデルを 1 つの文字列に結合して返します。このメソッドが情報を提供するため、戻り値の型は String で、void ではありません。

  4. 最後に、車が骨董車に分類されるかどうかを判定するメソッドを追加しましょう。多くの場所では、車が 25 年以上経過している場合、骨董車と見なされます。このメソッドを追加します。

     public boolean isAntique() {
         int currentYear = java.time.Year.now().getValue();
         return (currentYear - year) > 25;
     }

    このメソッドは Java の組み込みの Year クラスを使って現在の年を取得します。そして、車の年齢を計算し、25 年以上経過している場合は true を返し、そうでない場合は false を返します。

  5. これらの追加メソッドを Car クラスに追加したので、それらを使用するように CarDemo.java ファイルを更新しましょう。CarDemo.java を開き、その内容を次のように置き換えます。

    public class CarDemo {
        public static void main(String[] args) {
            Car myCar = new Car("Toyota", "Corolla", 2022);
            Car classicCar = new Car("Ford", "Mustang", 1965);
    
            myCar.displayInfo();
            myCar.accelerate();
            myCar.brake();
    
            System.out.println(classicCar.getMakeAndModel() + " is an antique: " + classicCar.isAntique());
    
            Car[] carArray = {myCar, classicCar};
            for (Car car : carArray) {
                System.out.println(car.getMakeAndModel() + " is an antique: " + car.isAntique());
            }
        }
    }

    この新しい main メソッドはいくつかのことを行います。

    • 現代車と古典車の 2 つの Car オブジェクトを作成します。
    • 現代車オブジェクトに新しく追加した acceleratebrake メソッドを呼び出します。
    • 古典車オブジェクトに getMakeAndModelisAntique メソッドを使用します。
    • Car オブジェクトの配列を作成し、for-each ループを使ってそれらを反復処理します。これにより、オブジェクトのコレクションをどのように処理するかを示しています。
  6. 両方のファイルを保存してから、CarDemo プログラムをコンパイルして実行します。

    javac ~/project/Car.java ~/project/CarDemo.java
    java -cp ~/project CarDemo

    次のような出力が表示されるはずです。

    Car Information:
    Make: Toyota
    Model: Corolla
    Year: 2022
    The Toyota Corolla is accelerating.
    The Toyota Corolla is braking.
    Ford Mustang is an antique: true
    Toyota Corolla is an antique: false
    Ford Mustang is an antique: true

おめでとうございます!あなたは Car クラスを大幅に拡張し、オブジェクトを使ってより複雑なプログラムを作成しました。これは、オブジェクト指向プログラミングがコードで現実世界の概念をモデル化するためにどのように使用できるかを示しています。各車オブジェクトは現在独自のデータ(メーカー、モデル、年)とアクション(加速、ブレーキなど)を持っており、本当の車と同じようになっています。

  1. Car クラスにアクションを表すメソッド(accelerate()brake())を追加しました。これらのメソッドは現在の実装では車の状態を変更しませんが、より複雑なプログラムでは、速度や燃料レベルなどの属性を変更する可能性があります。

  2. getMakeAndModel() を追加しました。これは 2 つの情報を 1 つの文字列に結合します。これはオブジェクト指向プログラミングの一般的なパターンであり、オブジェクトデータに便利にアクセスできるメソッドを作成することです。

  3. isAntique() メソッドは、オブジェクトデータ(車の年)と外部情報(現在の年)をどのように組み合わせて、オブジェクトに関する新しい情報を導き出すかを示しています。

  4. CarDemo クラスでは、複数のオブジェクトをどのように作成して使用するか、これらのオブジェクトに対してさまざまなメソッドをどのように呼び出すか、そしてオブジェクトの配列をどのように反復処理するかを示しました。

この例はオブジェクト指向プログラミングの力を示しています。私たちはデータ(メーカー、モデル、年)と動作(加速、ブレーキ、isAntique)の両方をカプセル化した Car クラスを作成しました。作成する各 Car オブジェクトは独立しており、独自の固有のデータセットを持っていますが、すべてのオブジェクトはクラスによって定義された同じアクションセットに従います。

まとめ

この実験では、Java プログラミングの旅において大きな進歩を遂げました。より複雑で整理された Java プログラムを書くための基礎となる、いくつかの基本的で重要な概念を学びました。学んだことをまとめましょう。

  1. メソッド

    • コードを構造化し、再利用性を高めるためにメソッドを作成して使用しました。
    • メソッドがパラメータを受け取り、戻り値を返す方法を調べました。これにより、複雑な問題を小さくて管理しやすいタスクに分割できます。
    • メソッドはコードの繰り返しを減らし、プログラムを理解しやすく保守しやすくします。
  2. クラスとオブジェクト

    • クラスをオブジェクトを作成するためのブループリントとしての概念を紹介しました。
    • 属性(メーカー、モデル、年)とメソッド(displayInfo、accelerate、brake など)を持つ Car クラスを作成しました。
    • オブジェクト(クラスのインスタンス)をインスタンス化し、それらのオブジェクトに対してメソッドを呼び出す方法を学びました。
  3. オブジェクト指向プログラミング

    • オブジェクト指向プログラミングがコードで現実世界の考え方をどのようにモデル化できるかを観察しました。
    • Car クラス内でデータ(属性)と動作(メソッド)をカプセル化しました。
    • 複数の Car オブジェクトを作成し、各オブジェクトが独自のデータセットを持ちながら、クラスによって定義された同じアクションを共有する方法を示しました。
  4. 拡張されたクラス機能

    • Java の組み込みの日付ツールを利用して車が骨董車であるかどうかを判定するなど、より複雑なメソッドで Car クラスを拡張しました。
    • メソッドがオブジェクトデータと外部情報とどのように相互作用して新しい情報を生成するかを見ました。
  5. 複数のオブジェクトの操作

    • Car オブジェクトの配列を作成し、プログラムでオブジェクトのコレクションをどのように操作するかを示しました。

これらの概念は Java プログラミングの基礎を形成し、より大きく、より複雑なアプリケーションを作成するために不可欠です。Java の旅を続けるにつれて、これらの概念を何度も利用することになるでしょう。

プログラミングを習得するには、一貫した練習が必要です。学習を拡張するためのいくつかのアイデアを以下に示します。

  1. Car クラスに colormileage など、さらに属性を追加してみましょう。
  2. paint(String newColor)drive(int miles) など、これらの属性を変更するメソッドを作成しましょう。
  3. 複数の Car オブジェクトを格納できる Garage クラスを作成しましょう。ガレージに車を追加したり、削除したり、ガレージ内のすべての車を表示するメソッドを追加しましょう。
  4. BookStudent など、他の種類のオブジェクトに対するクラスを作成して実験しましょう。

コーディングを続け、探求を続け、最も重要なことは、楽しみ続けることです!あなたは十分な道のりを歩んで、熟練した Java プログラマになっています。