クラス

クラス

クラスでは属性(性質)と動作(機能)を定義します。

属性はデータ構造(データの集まり)とも考えられます。

今回はクラスのデータについて説明します。


指示に従って作図しなさい。 プログラムを実行しないこと。

   1 public class Card
   2 {
   3         String suit;
   4         int rank;
   5         
   6         public static void main(String[] args)
   7         {
   8                 Card a;
   9                 Card b;
  10                 Card c;
  11                 
  12                 a = new Card();
  13                 a.suit = "ハート";
  14                 a.rank = 12;
  15                 
  16                 b = new Card();
  17                 b.suit = "スペード";
  18                 b.rank = 3;
  19                 
  20                 c = b;
  21                 c.rank = 10;
  22 
  23                 System.out.println( "bは " + b.suit + b.rank );
  24         }
  25 }


1.プログラムの構造を描きます

クラス全体を長方形で次のように囲みます。

クラスの中にあるメソッドを次のように囲みます。 今回はmainメソッド1つしかありませんが、通常は沢山のメソッドがあります。


2.宣言されている変数1つに対し1つの長方形を描きます。

この5つの変数のうち、a,b,cの3つはmainメソッド内のローカル変数です。

2つの変数 suit と rank はクラスの中にあって、どのメソッドの中にも入っていません。
このような変数は、この場所に変数がとられるわけではありません。
インスタンス(そのクラスのオブジェクト)が作成されるときの型紙として使われます。

角の丸い点線の長方形で囲みます。
Cardというクラスオブジェクトの型紙であることを示します。

次のような図になりました。

この図とクラスを表す図(UML)とが対応しています。


クラスは型にあたります。
プログラムの8~10行目の変数宣言では Cardという型(クラス)の変数 a, b, c を準備しています。


3.プログラムの実行をたどってみる

mainメソッドの実行は12行目から始まります。

右辺の new Card() を行い変数aに代入しています。

が行われるとそのクラスのオブジェクトが作られます。

Cardはここで定義しているクラスで、そのオブジェクト (インスタンス)は上で描いた型紙と同じ形をした実体です。

インスタンスにはクラス名をつけて上のように描くのが正しいのですが、 どのクラスのインスタンスか明らかなときは省略して次のように書いても良い。

作られたオブジェクト(インスタンス)を変数aに代入すると

変数aを使って、このオブジェクトにアクセスできるようになります。


13,14行目

Card型の変数aが参照しているオブジェクト内の変数を参照するには

のように、2つの名前をピリオドで繋いで書きます。

で、変数aが参照しているオブジェクト内の変数suitに、文字列"ハート"を代入します。

で、変数aが参照しているオブジェクト内の変数rankに、整数値12を代入します。


16~18行目

16行目でもうひとつCard型のオブジェクトが作られます。

オブジェクトはいくつでも作ることができます。

18行目まで実行されると、このようになります。


20行目

変数bの値を、変数cに代入しています。

この値を変数cに代入すると、 変数cは変数bと同じ値をもち、同じオブジェクトを参照することになります。


21行目

変数cが参照しているオブジェクト内の変数rankに、値10を代入します。

変数cとbは同一のオブジェクトを参照していましたから、 この後で b.rank の値を参照すると、この値も変わっています。

クラス (最終更新日時 2009-10-21 06:23:56 更新者 masahiko)