未分類

クラスとは

投稿日:

これまでの章では、変数や配列など、さまざまな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

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

関連記事

サンプルイメージ

メソッドの基本

「キャラクター」クラスを作成するときには、キャラクターに関するさまざまな「機能」を、メソッドというしくみでまとめることができます。 メソッドは、フィールドとともにクラスのメンバと呼ばれます。 下記のブ …

サンプルイメージ

練習問題(クラスの利用)(後半)

          練習10-7 下記のような結果となるように、ArrayTest1.javaにshowArrayメソッドを追加してください。 練習10-8 下記のようになるように配列の中に、負の数が …

サンプルイメージ

練習問題(for)解答例

以下に問題の解答例を記述します。 いかがでしょうか。多くの人は文法は理解できたが、それをどこでどのように使えばいいのかわからないと思っている人がほとんどでしょう。 何かを作成するまで処理の流れや組み合 …

サンプルイメージ

練習問題(日付クラス)

         練習12-1 実行した日を含め30日を画面に表示してください。 練習12-2 CharacterオブジェクトをyyyyMMdd形式の文字列に変換するメソッド、formatYMDを作成 …

サンプルイメージ

メソッドの引数

メソッドでさらに柔軟な処理を行うことができます。メソッドを呼び出す際に、 呼び出し元からメソッド内に何か情報(値)を渡し、その値に応じた処理を行う ということができます。メソッドに渡す情報を引数といい …