トップ 一覧 検索 ヘルプ RSS ログイン

クラスとオブジェクトの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!! 第一章 Java プログラミングの基礎

!! 1-3. Javaプログラムの基礎

! クラスとオブジェクト

Javaについての本を読むと、必ずといって良いほどオブジェクトの話が出てきます。

オブジェクトとは何でしょうか。これについては初心者向けにたくさんの本が出されています。たくさんの本が出されるほど、初心者にとってはなかなか理解しづらい概念のようです。

本書では単に'''「クラスを実体化したものがオブジェクトである」'''としておきます。

では、クラスとはなんでしょうか。ここでは「データ型と、そのデータを扱うためのメソッド(method = 手法)を定義したもの」としておきます。クラスは型とメソッドを定義しています。実際のデータはオブジェクトが持つことになります。いわばクラスはオブジェクトの設計図のようなものです。ある人の言葉を借りれば「たい焼で例えると、クラスがたい焼の金型で、オブジェクトがたい焼。」ということになります。 

ひとつ例を挙げましょう。二次元空間で粒子の運動を追うプログラムを書くとしましょう。このとき、点に関して位置座標(x,y)、およびそれを操作するためのメソッドをプログラムに書くことになります。プログラムを書くとき、これら質点に関するデータとその操作をひとつにまとめて記述することができたら便利ですよね。そのような仕組みを提供してくれるのがクラスです。

実際に、Javaには上に挙げたようなクラス Point クラスが存在します。Pointクラスは位置座標 (x,y) を保持する変数 x, y と、それらを操作するメソッドが定義されています。メソッドは例えば、位置座標 (x,y) をセットするための setLocation() や位置を移動させるための translate() 、位置座標を得るためのgetX()、getY() といったものが用意されています。より詳しい情報はJavaのAPIリファレンスを見てもらえると良いです。Pointクラスの詳細は次のURLから見ることができます。(APIリファレンスの読み方については付録「Java API Document を活用する」(189ページ)を参照して下さい。

[http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/awt/Point.html|http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/awt/Point.html]

クラスの重要な特徴の一つに「継承」があります。継承とはクラスの持つ変数やメソッドを引き継ぐことができる仕組みです。たとえば上の点クラスPointだけでは質量を持つ点、質点を表現することはできません。データとして質量を持たせる必要があるからです。ただし、点が質量をもつ以外はPointクラスとやることは変わりません。こんなときには、Pointクラスを継承したMassParticleクラスを作ってやれば良いのです。

''MassParticle.java''
 1.import java.awt.Point;
 2.
 3.public class MassParticle extends Point{
 4.    // 質量を表す変数
 5.    int m;
 6.    
 7.    /* コンストラクタ */
 8.    public MassParticle( int m){
 9.        this.m = m;
 10.    }
 11.    
 12.    /* コンストラクタ */
 13.    public MassParticle( int m, int x, int y){
 14.        this.m = m;
 15.        this.setLocation( x, y);
 16.    }
 17.    
 18.    /* 質量を得る */
 19.    public int getMass(){
 20.        return m;
 21.    }
 22.    
 23.    /* 質量を設定する */
 24.    public void setMass( int m){
 25.        this.m = m;
 26.    }
 27.}
{{pre num
import java.awt.Point;

public class MassParticle extends Point{
    // 質量を表す変数
    int m;
    
    /* コンストラクタ */
    public MassParticle( int m){
        this.m = m;
    }
    
    /* コンストラクタ */
    public MassParticle( int m, int x, int y){
        this.m = m;
        this.setLocation( x, y);
    }
    
    /* 質量を得る */
    public int getMass(){
        return m;
    }
    
    /* 質量を設定する */
    public void setMass( int m){
        this.m = m;
    }
}
}}

MassParticleクラスはPointクラスを継承していますので、当然Pointクラスが持っているsetLocation() や translate() を使うことができます。クラスをうまく設計していけば、相当にプログラミングの手間が省けることを理解して頂けたでしょうか。これがオブジェクト指向の強みになっています。

なお、継承元のクラスを''スーパークラス(super class)''、継承したクラスをスーパークラスの''サブクラス(sub class)''と呼びます。今の例ではPointクラスがスーパークラスです。