== クラス == クラスでは'''属性'''(性質)と'''動作'''(機能)を定義します。 属性はデータ構造(データの集まり)とも考えられます。 今回はクラスのデータについて説明します。 ---- 指示に従って作図しなさい。 プログラムを実行しないこと。 {{{#!java public class Card { String suit; int rank; public static void main(String[] args) { Card a; Card b; Card c; a = new Card(); a.suit = "ハート"; a.rank = 12; b = new Card(); b.suit = "スペード"; b.rank = 3; c = b; c.rank = 10; System.out.println( "aは " + a.suit + a.rank ); System.out.println( "bは " + b.suit + b.rank ); System.out.println( "cは " + c.suit + c.rank ); } } }}} ---- 1.プログラムの構造を描きます クラス全体を長方形で次のように囲みます。 . {{attachment:class2.png}} クラスの中にあるメソッドを次のように囲みます。 今回はmainメソッド1つしかありませんが、通常は沢山のメソッドがあります。 . {{attachment:class3.png}} ---- 2.宣言されている変数1つに対し1つの長方形を描きます。 . 変数宣言はsuit, rank, a, b, c の5つがあります。 . その横にそれぞれ長方形を描きます。 クラスの中にある2つの変数 suit と rank はこの場所に変数がとられるわけではありません。<
> インスタンス(そのクラスのオブジェクト)が作成されるときの'''型紙'''として使われます。<
> 角の丸い点線の長方形で囲んで Cardというクラスオブジェクトの型紙であることを示します。 '''クラス'''は型にあたります。<
> プログラムの8行目の変数宣言では Cardという型(クラス)の変数 a, b, c を準備しています。 {{attachment:card1.png}} 10行目の new Card() が行われると、Cardクラスのオブジェクトが作られます。 インスタンスは型紙と同じ形をした実体です。  {{attachment:card2.png}} これをCard型の変数に代入することで、このオブジェクトやオブジェクト内の変数にアクセスできるようになります。<
> aのsuitは a.suit 、aのrankは a.rank とピリオドでつないで表します。 14行目でもうひとつCard型のオブジェクトが作られます。<
> オブジェクトはいくつでも作ることができます。 {{attachment:card3.png}} 18行目では変数bの値を、変数cに代入しています。 この結果、変数cは変数bと同じ値をもつことになり、同じオブジェクトを参照します。 19行目で c.rank の値を変更しています。 変数cとbは同一のオブジェクトを参照していましたから、 この後で b.rank の値を参照すると、この値も変わっているのが分かります。 {{attachment:card4.png}}