Blacky Blog

外資系IT企業でエンジニアをしています。 ここでは自分が読んだ本、勉強していることなど None Tech の情報を発信しています。

IT プログラミング

[初心者向け] Java 独学: 4. オブジェクト指向: クラス

投稿日:6月 2, 2019 更新日:

みなさん、こんにちは。

このシリーズは、Java を独学で学んでいただける方法で、初心者でも開発者としてのベースの知識ができます。実際に手を動かせるよう環境設定の方法も載せています。Java のサイトや本を読んで学んだだけの方でも、挫折せず、自分で手を動かせるような構成にしていますのでおすすめの方法です。

[初心者向け] Java 独学: 4. オブジェクト指向: クラス

前回までで、Javaの基本的なプログラミングの書き方を紹介してきましたがいかがだったでしょうか。

CodeCampGATE

今回からは、これまでと異なりプログラムをどうデザインするかという概念的な部分を紹介します。この部分からどうデザインするかの個人差が出てくるため面白いと思います。

クラスとインスタンス

まずはクラスとインスタンスという概念を理解する必要があります。

  • クラスは図面で、インスタンスは実際の建物
  • クラスは設計図で、インスタンスは実際の車両
  • クラスは男性で、インスタンスは実際の人であるA君やB君。
  • クラスは柴犬で、インスタンスは柴犬のポチやハチ。

イメージできますか?インターネットを調べると専門的な用語で説明されている記事が多くありますが、正直言葉で覚えて理解しようとしてもしっくりこないと思います。

なので、一旦イメージだけ持ってください。クラスは何かの定義で、インスタンスが実体。このくらいでいいです。

import Car;
import java.time.LocalDate;

public class Lesson4_Class
{
    public static void main(String[] arg)
    {
        Car mycar = new Car();
        mycar.SetModel("Audi Q5");
        mycar.SetOwner("Blacky Taro");
        mycar.SetnextValidatedate(LocalDate.now().plusYears(2).toString());
        System.out.println(
            String.format("Registerd Mycar! model:%s, Owner: %s NextValidationdate: %s",
                mycar.GetModel(),mycar.GetOwner(),mycar.GetnextValidatedate() )
        );
        return;
    }
}

では、今回のサンプルです。ざっくりいうと、車を登録するというシナリオです。車クラスからインスタンスを作って、車のモデル、オーナー、次の車検日といった情報を登録し、その内容を出力するものです。車クラスは私が独自に作成したものです。詳細はのちほど。

CodeCampGATE

1. クラスからインスタンスを作る

まず最初に以下のコードが車クラスから実体を作っています。”mycar ” がインスタンスです。

    Car mycar = new Car();

このクラスからインスタンスを作る最初のメソッドのことをコンストラクタといいます。

2. マイカー情報を登録する

        mycar.SetModel("Audi Q5");
        mycar.SetOwner("Blacky Taro");
        mycar.SetnextValidatedate(LocalDate.now().plusYears(2).toString());

ここの部分で、マイカーのモデル、オーナー、次の車検日の情報を登録しています。3行目の次の車検日は、LocalDate.now().plusYears(2) にて現在日から2年後を足した日付を取得しています。

そして、最後に登録したマイカー情報を取得して、出力しています。

        System.out.println(
            String.format("Registerd Mycar! model:%s, Owner: %s NextValidationdate: %s",
                mycar.GetModel(),mycar.GetOwner(),mycar.GetnextValidatedate() )
        );

mycar.GetModel() はモデルを取得し、mycar.GetOwner() はオーナー、mycar.GetnextValidatedate()は次の車検日を取得します。

ここでそもそも Car クラスってどうやって使えるようにしているのか思われた方は、1行目のコードを見てください。

import Car;

これで Car クラスを読み込んでいます。

Car クラス を定義している Car.java ファイルが同じ場所に配置してあるため読み込めるます。

では、Car クラスの定義を見ていきましょう。

public class Car
{
    private String model = null;
    private String nextValidatedate = null;
    private String owner = null;

    public Car()
    {

    };
    public Car(String model, String nextdate, String owner)
    {
        this.model = model;
        this.nextValidatedate = nextdate;
        this.owner = owner;
    };
    public void SetModel(String model)
    {
        this.model = model;
    };
    public void SetnextValidatedate(String nextDate)
    {
        this.nextValidatedate = nextDate;
    };
    public void SetOwner(String owner)
    {
        this.owner = owner;
    };
    public String GetModel()
    {
        return this.model;
    };
    public String GetnextValidatedate()
    {
        return this.nextValidatedate;
    };
    public String GetOwner()
    {
        return this.owner;
    };
}

1. クラスの定義

最初にクラスの名前を定義しています。public は、このクラスはすべてのクラスからアクセスできることを意味しています。class Car は、”Car” という部分がクラスの名前を定義しています。

public class Car

2. メンバー変数の定義

続いてクラスのメンバー変数を定義しています。

private String model = null;
private String nextValidatedate = null;
private String owner = null;

今回は、車のモデル、次の車検日、オーナーというメンバー変数を定義しています。メンバー変数については次回詳細に説明します。

3. コンストラクタの定義

public Car()
{

};

次にやっているのは、コンストラクタの定義です。コンストラクタは、インスタンスを作成するメソッドでしたね。なのでクラスには必ず必要です。書き方は、”public <クラス名>()”です。コンストラクタは必ず public です。

複数のコンストラクタ

もう一つコンストラクタがあるのがわかりますか。

public Car(String model, String nextdate, String owner)
{
    this.model = model;
    this.nextValidatedate = nextdate;
    this.owner = owner;
};

実は、クラスには複数のコンストラクタを定義できます。このことをコンストラクタのオーバーロードなんて言います。言葉はあまり覚えないくていいです。

ではなぜ複数のコンストラクタを定義できるのでしょうか。実際に見てみましょう。

今回のサンプルでは、Car クラスからインスタンスを生成して、その後、 SetModel とかを呼んでモデルや車検日などを登録していましたよね。

一方、インスタンスを生成するときに一緒に、モデルや車検日も登録する必要がある場合に、もう一つのコンストラクタが役に立ちます。では以下のコードを実行してみてください。 実行結果は最初のものと同じです。

import Car;
import java.time.LocalDate;

public class Lesson4_Class
{
    public static void main(String[] arg)
    {
        Car mycar = new Car("Audi Q5",LocalDate.now().plusYears(2).toString(),"Blacky Taro");
        System.out.println(
            String.format("Registerd Mycar! model:%s, Owner: %s NextValidationdate: %s",
                mycar.GetModel(),mycar.GetOwner(),mycar.GetnextValidatedate() )
        );
        return;
    }
}

どこが変わったかわかりますか。

    Car mycar = new Car("Audi Q5",LocalDate.now().plusYears(2).toString(),"Blacky Taro");

上記は、コンストラクタの引数に、モデル、車検日、オーナー情報を渡しています。これにより、インスタンス化する際に、マイカー情報も登録しています。つまり、もう一つのコンストラクタを用意していたのは、インスタンス化するときにマイカー情報も登録するためです。

CodeCampGATE

4. メンバー関数の定義

   public void SetModel(String model)
    {
        this.model = model;
    };
    public void SetnextValidatedate(String nextDate)
    {
        this.nextValidatedate = nextDate;
    };
    public void SetOwner(String owner)
    {
        this.owner = owner;
    };
    public String GetModel()
    {
        return this.model;
    };
    public String GetnextValidatedate()
    {
        return this.nextValidatedate;
    };
    public String GetOwner()
    {
        return this.owner;
    };

最後にメンバー関数を定義です。全部で6つの関数を定義しています。 メンバー関数については次回詳細に説明します。

まとめ

今回はクラスの最初としてコンストラクタやクラスの定義の仕方について学びました。 是非、クラス定義してインスタンスを作ってみてください。 この辺りからプログラムをどう描くかが人それぞれ異なってきて面白くなってきます。

次回はメンバー変数について紹介します。

フリューゲル

-IT, プログラミング
-, , ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

ネットワークエンジニアとしての基礎: はじめに

みなさん、こんにちわ。 このシリーズは、ネットワークエンジニアとしてスキルを身に着け、転職する方やフリーランスとして働く方に向け、ネットワークエンジニアとして必要なスキルを学ぶための入門シリーズです。 …

[初心者向け] Java 独学: 2. データ型、変数、式を理解する: データ型を変換する

みなさん、こんにちは。 このシリーズは、Java を独学で学んでいただける方法で、初心者でも開発者としてのベースの知識ができます。実際に手を動かせるよう環境設定の方法も載せています。Java のサイト …

[初心者向け] Java 独学: 4. オブジェクト指向: メソッド

皆さん、こんにちわ。 このシリーズは、Java を独学で学んでいただける方法で、初心者でも開発者としてのベースの知識ができます。実際に手を動かせるよう環境設定の方法も載せています。Java のサイトや …

[初心者向け] Java 独学: 2. データ型、変数式を理解する: データ型

みなさん、こんにちは。 このシリーズは、Java を独学で学んでいただける方法で、初心者でも開発者としてのベースの知識ができます。実際に手を動かせるよう環境設定の方法も載せています。Java のサイト …

[初心者向け] Java 独学: 5. コンパイルとデバッグ: 例外処理: その 2

みなさん、こんにちは。 このシリーズは、Java を独学で学んでいただける方法で、初心者でも開発者としてのベースの知識ができます。実際に手を動かせるよう環境設定の方法も載せています。Java のサイト …