未分類

クラスとは

投稿日:

これまでの章では、変数や配列など、さまざまなjavaの機能について学んできました。このような知識を使えば、いろいろなプログラムを自由に作成することができます。

たとえば、カードゲームのカードを管理するプログラムを考えてください。カードのキャラクターの属性を配列であらわすことができます。属性を画面に出力することもできます。

しかし、カードゲームに関する多種多様なプログラムを作成しないといけません。このような時、これまでに作成したコードを効率よく生かしていくことが大切です。

この章で学ぶクラスという仕組みを使うと、プログラムを効率よく作成していくことができます。

クラスのしくみを知る

クラスを扱うときには、現実の世界に存在する、「モノ」の概念に着目していきます。たとえば、「キャラクター」といったモノに着目し、プログラムを作成することを考えてみることにします。

キャラクターは、火や水といった属性をもち、25や37といった体力もあります。このとき、「キャラクター」に関するデータとして、次のようなものを考えることができるでしょう。

  • 属性
  • 体力の残量

「キャラクターの属性は○○である」「体力は残り○○である」といった「キャラクター」一般に関することがらを「キャラクタークラス」に取り入れていきます。これらのデータは、いわばキャラクターの「性質」のようなものだと考えることができます。

この他にもキャラクターには、次のような「機能」があります。

  • キャラクターの属性を決める
  • キャラクターの体力を回復させる
  • 属性や体力を表示する

これらの「機能」は、キャラクターの属性や体力などを変更したりするものといえます。クラスとは、このような

モノの性質や、それにかかわる機能をまとめながら、プログラムを作成していくために使う概念です。

クラスを宣言する

モノの性質や機能をまとめたクラスを記述することを、クラスを宣言するといいます。

クラスの名前は自分で選んでつけます。たとえば、Character「キャラクター」などといった名前をつけることができます。

  • フィールド … クラスの「性質」をあらわすしくみ。
  • メソッド … クラスの「機能」をあらわすしくみ。メソッドに関してはこの章の後半に学びます。
  • メンバー … フィールドとメソッドをあわせたもの

class Character{

String zokusei;//キャラクターは属性をもちます

int tairyoku;//キャラクターは体力をもちます

}

ブロックの中で、zokuseiやtairyokuといった変数を宣言しています。これが「フィールド」です。これからフィールド(変数)に属性や体力を格納していきます。

クラスを利用するということは

フィールドをまとめて、クラスを宣言してみました。しかし、宣言しただけでは不十分です。

「キャラクター」というモノが実際にどんな属性や体力をもつか

といったことは何も記述していません。実際にキャラクターは火といった具体的な属性をもちます。これについてまだ何も決まっていません。

そこで必要になるのが、オブジェクトの作成という作業です。オブジェクトの作成とは、

実際に一人のキャラクターをつくる

というイメージを思い浮かべるとよいかもしれません。「キャラクター」がどのような「性質」をもつかクラスとして宣言しました。これからクラスの仕様を利用して、実際にコード上で一人ずつキャラクターを作成していくのだ、と考えてみてください。

コード上で作成されるキャラクターのことを、オブジェクトまたはインスタンスと呼びます。

オブジェクトを作成する

実際オブジェクトを作成するコードには、以下の2つの手順が必要になります。

  1. オブジェクトを扱う変数を宣言する
  2. オブジェクトを作成し、その変数で扱えるようにする

1の作業についてみてみましょう。これは、

宣言したクラスを使って、オブジェクトを扱う変数を宣言する

ということを意味します。第3章などで、int型やdouble型の変数を宣言したことを思い出してください。1の作業は、このような変数を宣言する方法とほぼ同じです。これまでint型やdouble型としてきた型名の部分に、クラス名を使えばよいのです。

Character char1;   Character型の変数char1を宣言します

これがCharacterクラスのオブジェクトを扱う「変数char1」を用意する文です。変数char1は、「Character型の変数」と呼ばれます。

次に、2の作業についてみてみましょう。newという演算子を使い、Characterクラスのオブジェクトをコード上に作成します。

char1 = new Character(); オブジェクトを作成して変数char1に代入します。

この文では、同時に「newを使った結果を変数char1に代入する」という作業をしています。この代入をすると、

変数char1を使って、作成したCharacterクラスのオブジェクトを扱うことができる

ようになるのです。このことを、変数char1はCharacterクラスのオブジェクトをさす、ということもあります。

オブジェクトの作成方法についてまとめると、次のようになります。2つの作業が必要です。

オブジェクトの作成(その1)

クラス名 変数名;

変数名 = new クラス名();

なお、1と2の作業をまとめて、1つの文にすることもできます。

Character char1 = new Character();

メンバにアクセスする

それでは、作成したオブジェクトを利用して、さらにコードを記述していくことにしましょう。Characterクラスのオブジェクトを1つ作成すると、

キャラクター一人の属性や体力の値を設定する

という作業ができるようになります。作成したオブジェクトは、zokusei、tairyokuという値を格納できるフィールド(変数)をもちます。そこで、このフィールドに実際の値を代入すればよいのです。

フィールドに値を代入するには、オブジェクトをさす変数名にピリオド(.)をつけて、フィールドを指定します。

char1.zokusei  属性をあらわします

char1.tairyoku  体力をあらわします

char1の属性を火とし、体力を25とするには、次のように代入します。

char1.zokusei = ’火’;  属性を代入します

char1.tairyoku = 25;  体力を代入します

このように、フィールドを扱うことを、メンバ(フィールド)にアクセスするといいます。

クラスの宣言、オブジェクトの作成について説明してきました。実際に動作する、コードを入力していきましょう。

最初にCharacterクラスが書かれていますが、プログラムの実行はこれまでと同じようにmain()メソッドから処理が始まります。

main()メソッドでは、Characterクラスのオブジェクトを作成しています。次にフィールドに値を格納し、属性と体力を設定します。その後でzokuseiとtairyokuの値を出力しています。

これで、キャラクターを管理する簡単なプログラムを作成することができました。

2つ以上のオブジェクトを作成する

オブジェクトはいくつでも作成することができます。たとえば、二人のキャラクターを作成するには、変数char1のほかにchar2を準備してnewを使えばよいのです。

すると、二人の「キャラクター」は、それぞれの独自の属性や体力をもつことになります。なお、char1、char2は変数名ですから、別の適当な名前をつけてもかまいません。

クラスを利用する手順のまとめ

  1. クラスを宣言する
  2. クラスからオブジェクトを作成する

1の「クラスを宣言する」という作業は、

「キャラクターに関する一般的な仕様」(クラス)を設計するという作業です。

一方、2の「オブジェクトを作成する」という作業は、その仕様(クラス)をもとにして、

「個々のキャラクター」(オブジェクト)を作成し、データを記憶したり操作したりするという作業です。

Javaでは、この2つのコードを2つのファイルに分割し、別々の人間が記述することもできます。1の段階でCharacterクラスをうまく設計しておくと、たいへん便利です。そのCharacterクラスを利用すれば、「キャラクター」を扱うさまざまなプログラムを、別の人間が効率よく作成していけるからです。

この方法については別の章で詳しく学ぶことにしましょう。

-未分類

執筆者:


comment

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

関連記事

サンプルイメージ

変数

変数のしくみを知る プログラムを実行するとき、いろいろな値を記憶させながら処理をしていきます。例えば ユーザーが入力した数値を画面に出力する というプログラムについて考えてみましょう。まず、数値をどこ …

サンプルイメージ

クラス変数、クラスメソッド

      これまでのコードは、クラス内のメンバ(フィールドとメソッド)は、オブジェクトが作成されたときに、はじめて値を格納したり呼び出したりすることができました。 オブジェクトを作成することによって …

サンプルイメージ

クラスの機能

       まず、最初にクラスのフィールド、メソッドを取り上げていきます。 前の章で取り上げたコードです。フィールドに属性や体力量を代入しています。 実際にキャラクターの属性や体力量を設定する かの …

サンプルイメージ

クラスライブラリのしくみ

                 今まで、クラスの基本について学びました。これまでは以下のような手順でクラスを作成してきました。 クラスを設計するコードを書く → クラスを宣言するクラスを利用するコー …

サンプルイメージ

スレッドの基本

        これまでのプログラムは、main()メソッドから始まって、順番に文を実行、条件判断文をたどっていました。 Javaでは、この「処理の流れ」を複数もつことができます。 コード上から複数の …