連載
» 2005年03月19日 00時00分 公開

Eclipseではじめるプログラミング(7):Javaの「クラス」と「インスタンス」を理解する (1/2)

[小山博史,@IT]
/fjava/index/index_eclipsejava.html

【改訂版】Eclipseではじめるプログラミング New!
これからプログラミングを学習したい方、Javaは難しそうでとっつきづらいという方のためのJavaプログラミング超入門連載です。最新のEclipse 3.4とJava 6を使い大幅に情報量を増やした、本連載「Eclipseではじめるプログラミング」の改訂版となります

 「変数と型」について、第3回「Javaの変数と型を宣言する」で解説しました。そこではプリミティブ型というデータの基本型について説明をしましたが、プリミティブ型だけではアドレス帳に登録するような個人情報といった複雑なデータを表現するのは大変です。そこで、オブジェクト指向言語ではクラスという概念を導入することによって、このような複雑なデータを表現できるようになっています。今回はこのクラスを中心に、オブジェクトやインスタンスといった用語について解説をします。

オブジェクトとクラス

 クラスについて説明をする前にオブジェクトという用語について理解をしておきましょう。Javaはオブジェクト指向言語といわれていますが、オブジェクトとは一体何でしょうか。オブジェクトとは、英語のObjectのことで「物」とか「物体」と訳されます。このことからも分かるように、オブジェクト指向というのは「物」を見ながらプログラムを設計、実装していきます。これだけではよく分からないと思いますから、具体的に見ていきましょう。

 例えば、ビデオレンタルショップが自社専用のコンピュータシステムを用意したいと考えて、その開発を読者の皆さんへ依頼してきたとしましょう。ビデオレンタル屋では、会員情報の管理や、レンタルしているビデオの管理をこのシステムで行えるようにしたいそうです。こういった情報をコンピュータで扱えるようにするためには、会員の情報やビデオの情報をプログラムで表現できるようにする必要があります。

 そこで、プログラムを作る前に実際の作業について理解するために、ビデオレンタルショップに自分の会員証を作ってもらったとしましょう。そうすれば会員証の作り方やどんな情報が会員証に記載されるかが分かるはずです。ここでは作る手順については考えないとして、実際に会員証に載る情報を確認してみると「会員番号」「氏名」「電話番号」「住所」といったデータが記載されることが分かったとしましょう。まずは、この自分のカードをプログラム上で表現できるようにしなければなりません。

 同じようにビデオレンタルをする手順を確認してみます。例えば「タイトルA」というビデオにはタイトル、ジャンルといったデータがあり、そのビデオがいつ貸し出しされたか、何回貸し出しされたか、といった情報も管理しておく必要があることが分かったとします。そうすると、こういった情報もプログラム上で表現できないといけないことが分かります。

 プログラムを作成するに当たって、処理の対象となる情報は何かということを抽出するには、このように実際の作業を分析しながら行います。この分析の簡単な例を紹介しましたが、会員カードやビデオといった具体的な物(オブジェクト、Object)を使って抽出しているのが分かったと思います。このようにオブジェクトを中心として設計をしていくこと、つまりオブジェクト指向で設計をするのは、非常に直感的で分かりやすいはずです。

 次に具体的なオブジェクトを対象として検討していくと、オブジェクトを分類することができることに気付きます。例えば、ビデオレンタル屋さんには、「タイトルA」のビデオだけでなく、「タイトルB」などほかの作品のビデオもあるはずです。これらはそれぞれ物としては別ですが、ビデオという点では同じものです。この具体的な物としてのビデオと、分類としてのビデオを分けて話ができるようにするために、前者をオブジェクト、後者をクラス(Class、分類)といって分けて呼ぶようになっています。

Javaのクラス

 クラスの例をもう少し考えてみるために、図形エディタを作成するとします。図形としては、線、三角形、円を扱えるようにします。

 この図形エディタを作成するに当たって必要なクラスとしては、何があるでしょうか。図形だけに着目すると、少なくとも線(Line)、三角形(Triangle)、円(Circle)は扱えないといけないわけですから、これらのクラスが必要になります。ほかに図形のためのクラスは必要ないでしょうか。よく考えると、線は点と点を結んだものですし、三角形は3つの異なる点を線で結んだものですし、円はある点からの距離が同じ点の集合になります。こういったことから、点(Point)というクラスもあった方がよさそうだということが分かります。これらのクラスを実際のJavaのコードで表現するには、次のようにします。{ } の中にはクラスを表現するのに必要な情報などを後で追加します。

class クラス名 { }


 それでは、Eclipseで各クラスを作成してみましょう。手順は以下のとおりです。まずは、Pointクラスを作成してみましょう。第2回の「Eclipseの基本操作に慣れる」と同様にEclipseを起動し、パースペクティブを[Java]に切り替えておいてください。パースペクティブが[Java]になっていないときは、メニューの[ウィンドウ]→「パースペクティブを開く」→[Java]を指定すれば、切り替えることができます。次のような手順で新規にクラスを作成することにします。

  1. [パッケージ・エクスプローラー]の[Sample]をマウス右ボタンでクリック
  2. 表示されるポップアップメニューで[新規]→[クラス]を指定
  3. 表示される[新規Javaクラス]ダイアログで、[名前]にPointと入力
  4. 同じ[新規Javaクラス]ダイアログで、[どのメソッド・スタブを作成しますか?]のところにある[public static void main(String[] args)]がチェックされていたら、そのチェックを外す。
  5. [終了]ボタンをクリック

 次のようにPointクラスが作成されます。classの前にpublicというキーワードが付いていますが、これを付けると公開されたクラスということになり、ほかのクラスから自由に使えるようになります。publicについての詳細はここでは説明しませんので、呪文だと思ってもらって構いません。ちなみに、/* から始まり */で終わる部分はコメントになります。Javaでは複数行のコメントはこのように記述できます。似たようなもので、/** から始まり */で終わる部分がありますが、これはJavaドキュメンテーションコメントといわれるもので、特別な意味を持つコメントになります。現段階ではコメントだと思ってもらって構いません。

 このように、Eclipseではウィザード機能により、特にコーディングをしなくてもクラスを表現するのに必要なコードは自動的に生成されます。同様にして残りのLineクラス、Triangleクラス、Circleクラスも作成しましょう。

 ここまでで、各クラスをJavaで表現することはできました。かなり簡単だったのではないでしょうか。これは、まだクラスの基本中の基本部分を作っただけだからです。まだ、このままではクラスが持つべき情報までは表現できていません。例えば、線は2つの点で表現できますが、Lineクラスのコードからはそれが分かりません。そこで、次はクラスが持つべき情報を表現する方法について見てみます。

フィールド

 クラスが持つべき情報をJavaで表現するためにはフィールドを使います。先に文法を理解しておきましょう。Javaでフィールドを宣言するためには、次のようにします。ただし、データ型 フィールド名; という文はいくつでも続けることができます。

class クラス名 {

  データ型 フィールド名;

}


 次に、今回対象として考える図形は2次元のものだけとして、具体的に見てみましょう。

 まずPointクラスですが、2次元の点を決めるためには、x座標とy座標の値を持つ必要があります。簡単にするため、それぞれの座標は整数値しか持たないとしましょう。すると、Pointクラスにはx座標とy座標を表現するためのフィールドが必要であり、そのフィールドにはint型のデータを保持しなければならないということになります。ここまで説明をすると気付くかもしれませんが、フィールドというのは「クラスが持つ変数」だといい換えることができます。

 具体的にx座標とy座標のフィールドを追加したPointクラスは次のようになります。作成してあったPointクラスに水色の部分を追加してください。以下も同様です。

 次にLineクラスですが、これは2つの点を結ぶものなので、これらの情報を持たなければなりません。これまでデータ型としてはboolean、int、doubleといったものしか使ってきませんでしたが、クラスもデータ型として使うことができます。従って、Lineクラスは2つのPoint型のフィールドを持つように表現することができるので、次のようになります。

 Triangleクラスは3つの点を持てばよいので、Lineが分かればすぐにできるでしょう。次のようになります。

 Circleは中心となる点p0と半径rを持つようにすればいいので、次のようになります。

 以上で、各クラスが持つべき情報をフィールドで表現することができました。次は実際に、これらのクラスを使ってみましょう。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。