welcome: please sign in

ページのコンテンツをアップロード

下記のページ名のコンテンツをアップロードすることができます。 もしページ名を変更すれば、別のページのコンテンツをアップロードすることもできます。 ページ名が空の場合、ファイル名からページ名を決定します。

ページコンテンツを格納したファイル
ページ名
コメント

2011-10-26 03:54:24時点のリビジョン35

location: クラス

クラス

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

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

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


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

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


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

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

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


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

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

3つの変数 suit, rank, sum はクラスの中にあって、どのメソッドの中にも入っていません。

このうち static変数はここ(クラスの中)に取られます。

一方、 suit, rank の2つは、この場所に変数がとられるわけではありません。
インスタンス(そのクラスのオブジェクト)が作成されるときの型紙として使われます。

角の丸い点線の長方形で囲みます。
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が代入されます。

ここまでの結果を図示するとこのようになります。


23行目

変数bが参照しているオブジェクト内の変数rankの値を表示します。

変数bとcは同一のオブジェクトを参照しています。 この時点では b.rank の値は10になっています。