Developer

【はじめてのJava】クラス【オブジェクトとクラス編】
2021.02.01
Lv1

【はじめてのJava】クラス【オブジェクトとクラス編】

はじめてのJava

このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。


オブジェクトとクラス編

オブジェクトとクラス編では、Javaを扱う上で非常によく出てくる「オブジェクト」や「クラス」について扱っていきます。

前回は「オブジェクト」について扱いました。

今回は「クラス」が何なのかを扱っていきます。


目次


クラス

 クラス とはJavaでオブジェクトを作成する際のひな型となるもののことです。Javaはこの「クラス」単位でソースコードを作成していきます。

例えば私たちが「車」を自作するとします。その時に、いきなり作り始める人は稀で、普通は「設計図」を考えることから始めると思います。この「設計図」に当たるものが「クラス」です。

ですのでJavaの中のオブジェクトの設計図がクラスだと理解しておけば大丈夫です。

今までプログラムを作成した際にもこの「クラス」を作成していました。では一体、どのようにクラスを記述していたのでしょうか。


クラスの書き方

以下のように「class クラス名」をつけた中カッコ{ }で囲んだ部分が一つのクラスになります。

class Sample{ //クラスの開始
  //ここがクラスの中身
} //クラスの終わり

例えばはじめてのソースコードでは以下のソースコードを書きました。

public class Sample{
  public static void main(String[] args){
    System.out.println("Hello World!");
  }
}

このソースコードに書かれていた「Sample」はクラス名で、このソースコードはSampleという名前のクラス(設計図)だったのです。

車の設計図を想像するといろいろと違和感があるかもしれませんが、これには理由があります。一つは、Sampleクラスは、「まずプログラムを動かしてみる」ことを目的としていたため、「オブジェクト」を意識せずに書かれたクラスだったためです。もう一つは、Sampleクラスがmainメソッドを動かすためだけに作られたクラスだったためです。

Javaはすべてのプログラムをクラスという単位で考えます。そのため、mainメソッドもクラスの内側に配置する必要があります。mainメソッドだけをクラスの外側に配置することはできないのです。そのため、「とりあえずJavaのプログラムを動かすためだけに、mainメソッドを持ったクラスを作る」という作り方をすることもあります。

上記のSampleクラスはまさにそのように作られたクラスだったのです。そういった背景から、Sampleクラスは「設計図」という印象を受けにくいクラスとなっているのです。


クラスの中身

クラスにも、オブジェクトで言う「属性」と「操作」にあたる要素があります。「属性」が「 変数 」で「操作」が「 メソッド 」です。

それぞれを詳しく見てみましょう。

変数

Javaでオブジェクトを作成したい場合、属性は「変数」で表現します。特に、オブジェクトごとに固有の変数のことを「 インスタンス変数 」や「 フィールド 」「 メンバ変数 」という言い方をします。

例えば車の場合は、一台一台「走行速度」「ナンバー」「色」といったデータが異なっています。ですので「走行速度」「ナンバー」「色」を車クラスで表現する場合は変数(インスタンス変数)として表現します。

インスタンス変数を作成する際には「変数名」と「データ型」を決める必要があります。この様に変数名やデータ型を決めることを変数を定義すると言います。

変数のデータ型を何型にするかは、変数を定義する人が自由に決めることができます。実際の開発では一度決めた変数名やデータ型を後から変更することはとてつもなく大変ですので、定義する際にはよく考える必要があります。
(練習中は気にしすぎるよりも、どんどん試すことをお勧めします。)

実際に小数型の「走行速度」、整数型の「ナンバー」、文字列型の「色」を持った車の設計図を、Carクラスとして作成すると次のようになります。
なお、Carクラスはコンパイルはできますが、mainメソッドがないため単体では実行できません。

class Car{
  double speed; //速さ
  int number; //ナンバー
  String color; //色
}

メソッド

Javaでオブジェクトを作成する場合、操作は「メソッド」で表現します。特に、オブジェクトごとに固有のメソッドのことを「 インスタンスメソッド 」「 メンバメソッド 」という言い方をします。

例えば車の場合は、一台一台に「アクセル」「ハンドル」「ブレーキ」「クラクション」という機能がついています。ですので「アクセル」「ハンドル」「ブレーキ」「クラクション」を車クラスで表現する場合はメソッド(インスタンスメソッド)として表現します。

メソッドを作成する際には「引数」と「戻り値」と呼ばれるものと、「メソッドの実行内容」を事前に決めなければいけません。詳しい説明は別の回に行いますが、このようにメソッドの詳細を決めることをメソッドを定義すると言います。

メソッドも変数と同様に、どのように定義するかはメソッドを定義する人が自由に決めることができます。実際の開発では一度決めたメソッドの「引数」「戻り値」を後から変更することはとてつもなく大変ですので、定義する際にはよく考える必要があります。また、「メソッドの実行内容」については、きちんと設計されている場合は後から変更することもあり得ます。ただしその場合も影響箇所が広くなるため、動作テストなどをやり直す必要が出てきます。
どちらにしても、メソッドも定義する際によく考えて定義する必要があります。
(練習中は気にしすぎるよりも、どんどん試すことをお勧めします。)

実際に「クラクション」を持った車の設計図を、Carクラスとして作成すると次のようになります。
なお、Carクラスはコンパイルはできますが、mainメソッドがないため単体では実行できません。

class Car{
  void clac(){ //クラクションを表すclacメソッドです。詳細は別の回で紹介します。
    System.out.println("プップー");
  }
}

サンプルプログラム

「変数」と「メソッド」を両方持ったCarクラスの作成は以下の通りです。

class Car{
  double velocity; //速度
  int number; //ナンバー
  String color; //色
  void clac(){ //クラクションを表すclacメソッド
    System.out.println("プップー");
  }
}

まとめ

クラスでは属性を「変数」で表す。
クラスでは操作を「メソッド」で表す。

次回

次回はサンプルプログラムで作ったCarを設計図からオブジェクトにしてみたいと思います。


はじめてのJavaシリーズの目次はこちら
プログラムの作り方編はこちら


java 11 の練習問題一覧はこちら
はじめてのJavaシリーズの練習問題一覧はこちら