クラスを使ってみよう
最初にこれらのオブジェクトを使用するSample70クラスを作成します。手順は以下のとおりです。
- [パッケージ・エクスプローラー]の[Sample]をマウス右ボタンでクリック
- 表示されるポップアップメニューで[新規]→[クラス]を指定
- 表示される[新規Javaクラス]ダイアログで、[名前]にsample70と入力
- 同じ[新規Javaクラス]ダイアログで、[どのメソッド・スタブを作成しますか?]のところにある[public static void main(String[] args)]をチェックする
- [終了]ボタンをクリック
それでは、Sample70で、原点(0, 0)を表す点o(オー)オブジェクト、点(1, 2)と点(3, 6)を結ぶ線lineオブジェクトと、点(2, 3)と点(4, 9)と点(0, 6)から構成される三角形triangleオブジェクトと、点(10, 10)を中心として半径が1である円circleオブジェクトを表現してみましょう。
これらのオブジェクトを表現するためには、これまでに用意したクラスを使って変数を宣言します。
Point o; //点oオブジェクト
Line line; //線lineオブジェクト
Triangle triangle;//三角形triangleオブジェクト
Circle circle;//円circleオブジェクト
Javaでは、変数を宣言しただけではオブジェクトの情報を保持するための入れ物は用意されません。配列のときと同じようにnew演算子を使って、この入れ物を作成します。こうやって作成された入れ物のことを、インスタンスといいます。インスタンスを作成するためには、new演算子の後にクラス名()と書きます。また、インスタンスが作成された後の評価結果は、インスタンスが用意された場所を示す値となります。この値を変数へ代入することにより、変数を使って入れ物を利用することができるようになります。
o = new Point();
line = new Line();
triangle = new Triangle();
circle = new Circle();
コラム コンストラクタ
インスタンスを作成するためにnew演算子の後に書いたものは、実は各クラスのコンストラクタというものです。入れ物を作成するに当たっては、各フィールドの初期値を設定したいことも多いので、そういった処理ができるようにコンストラクタというものが用意されており、プログラマが自分でその処理をコーディングすることもできるようになっています。本連載ではコンストラクタの詳細については解説しませんが、興味のある読者は調べてみてください。
さて、入れ物の作成ができて、変数を使って利用することができるようになりました。ただし、まだ原点の情報や点(1, 2)の情報などはプログラムに入ってきていませんので、これらの値を設定しなければなりません。フィールドへ値を設定するためには、次のようにします。もちろん変数名の後に指定できるフィールド名は変数の型となるクラスが持つフィールド名だけです。
変数名.フィールド名 = 値;
従って、変数oへ次のように値を設定することで、oは原点を表現することになります。
o.x = 0;
o.y = 0;
次に、lineやtriangleのフィールドを設定しますが、注意しなければならないことがあります。lineやtriangleではPoint型のフィールドは宣言されていますが、これらの入れ物が用意されていないということです。そこで、これらの変数のフィールドへ設定するPoint型のインスタンスを使うために変数を用意します。
Point point = new Point();
point.x = 2;
point.y = 3;
line.p0 = point;
point = new Point();
point.x = 4;
point.y = 9;
line.p1 = point;
フィールドへ直接Point型のインスタンスを代入してからx座標とy座標を代入することもできます。
triangle.p0 = new Point();
triangle.p0.x = 3;
triangle.p0.y = 9;
triangle.p1 = new Point();
triangle.p1.x = 4;
triangle.p1.y = 3;
triangle.p2 = new Point();
triangle.p2.x = 4;
triangle.p2.y = 6;
同様にしてcircleにも値を設定します。
circle.p0 = new Point();
circle.p0.x = 10;
circle.p0.y = 10;
circle.r = 1;
最後に例としてo.x 、line.p0.y、line.p1.x、triangle.p2.y 、circle.rの値を出力してみます。もしo.yやline.p0.xなどほかの値を出力してみたい場合は、同様にしてSystem.out.printlnの命令を使って出力してみてください。
System.out.println(o.x);
System.out.println(line.p0.y);
System.out.println(line.p1.x);
System.out.println(triangle.p2.y);
System.out.println(circle.r);
ここまでのコードをまとめると次のようになります。これで各オブジェクトをプログラムで表現することができたことになります。
このプログラムを実行すると、o.x 、line.p0.y、line.p1.x、triangle.p2.y 、circle.rの値が出力されて以下のような結果が得られます。
0
3
4
6
1
まとめ
今回は、Javaのクラスとインスタンスについて解説をしました。また、クラスの属性を表現するためにはJavaではクラスにフィールドを用意するということを解説しました。オブジェクト指向だと、実際にある物からクラスを抽出すればよいので、かなり直感的にプログラムを理解することができたのではないでしょうか。今回の例だけでは、まだピンと来ないかもしれませんが、クラスにフィールドを用意することによってデータを保持できるということは重要な概念になりますので、よく覚えておくようにしてください。
さて、クラスの宣言については、まだ重要な要素が抜けています。それは「クラスの振る舞い」についてです。Javaではメソッドとして表現することになりますが、次回はこれらについて解説する予定です。
筆者プロフィール
小山博史(こやま ひろし)
情報家電、コンピュータと教育の研究に従事する傍ら、オープンソースソフトウェア、Java技術の普及のための活動を行っている。Ja-Jakartaプロジェクト(http://www.jajakarta.org/)へ参加し、PMCの一員として活動を支えている。また、長野県の地域コミュニティである、SSS(G)(http://www.sssg.org/)やbugs(J)(http://www.bugs.jp/)の活動へも参加している。
Copyright © ITmedia, Inc. All Rights Reserved.