【Java入門(2)オブジェクト指向:基本編 #4】インスタンス

 

みのる
こんにちは。笑顔で感謝!✨ みのるコーチです。
今回も、ご覧いただき、ありがとうございます。

今回は

Java入門2 オブジェクト指向:基本編 #4
インスタンス

というテーマでお送りします。

彩香
インスタンス。また新しい言葉が出てきましたね。

シッカリ聴いて、身につけていきますよ~。

よろしくお願いします。

剛留
前回は、クラスの定義のしかたを勉強できました。

今回は、いよいよプログラムを実行していくんでしたね。

楽しみです。頑張ります。

【Youtube版】

Youtubeでもお伝えしていますので
是非チェックしてくださいね。

 

【1】 実行用クラス

前回は、設計図となるクラスの定義を学んだので…

今回は、設計図から実体を作ってプログラムを
動作させていきましょう。

みのる
オブジェクト指向は 現実世界のオブジェクトを
中心に考えて、Javaの仮想世界を作るような感じ…

…とお話しました。

その意味では、この…

仮想世界を動かしていくクラス

…が必要! という事になります。
それが、実行用クラスです。

この実行用クラスには、プログラムの入り口となる
メインメソッドを 配置します。

その事によって、プログラムを動作させて
Javaの仮想世界を 作っていくことが できるようになるのです。

ここでは、Javaのクラスには…

Javaのクラス
① Javaの 仮想世界の素となる設計図のクラス
② 実行する実行用クラス

この2つが あることを 押さえておいてくださいね。

【2】 インスタンス

設計図にあたるクラスを定義して
そこから 実体 を作るというお話をしていますが

この実体のことを Java では…

インスタンス

と言います。

そして、このインスタンスを作ることを…

インスタンス化

と言います。

インスタンス・インスタンス化
✅ インスタンス=実体
✅ インスタンス化=実体を作ること

Javaでの書き方はこうなります。

インスタンス化
new クラス名()

インスタンス化した結果は

・ 変数に代入する
・ 配列の要素にする
・ メソッド呼び出しの実引数にする

などの使い方はありますが…

今回は、変数に代入して使う方法を
見ていきましょう。

この場合、このように記述します。

インスタンス化して変数に代入
クラス名 変数名 = new クラス名();

例えば、営業部員を表すクラス SalesEmployee を考えましょう。
インスタンス化して変数に代入するには…

SalesEmployee se = new SalesEmployee();

という記述を行います。

代入の右辺、こちらがインスタンス化です。
クラスを元に、メモリ上に実体を作成します。

new演算子は 新たに実体を作成する演算子です。

この new演算子は、配列でも 出てきましたね。

配列の場合は、型名と角括弧を使って
要素数分の実体 を作成しました。

クラスをインスタンス化する時には
クラス名 の後に 丸括弧 をつけて表します。

代入の左辺を見ると…

クラス名をデータ型として扱っています。

クラス型といいますが、これは参照型の一種です。

参照型は、以下の記事でお伝えしています。

併せて、参考にしてくださいね。

【Javaプログラミング超入門 #06】データ型

SalesEmployee se = new SalesEmployee();

この例では、SalesEmployeeというクラスをインスタンス化して
SalesEmployee型の se という変数に代入しています。

彩香
new 演算子は、配列の時にも出てきたので
イメージは何となく掴めます。

そして、インスタンス化したら
そのクラスの型の変数に代入して使うんですね。

剛留
用語が色々と出てきましたね…。

でも、イメージ図と一緒にノートに書いておいたので
大丈夫と思います。

【3】 内部データ

SalesEmployee se = new SalesEmployee();

この例の、内部データのイメージを見ておきましょう。

クラスの定義を元に…
メモリ上に、インスタンスが 作られます。

たとえば、100番地から始まる位置に
作成されたとしましょう。

実体なので、フィールドは値を持ちますし
メソッドを呼び出す事も、できるようになります。

超入門の 配列 のお話をした時に…

new 演算子で 配列が作られた時には
Javaで定められた 既定値で初期化される。

…と お伝えしました。

そして、今回のように…

クラスをインスタンス化する時

…にも、フィールドは Javaの既定値 で初期化されます。

Javaの既定値については、以下の記事でお伝えしています。

併せて、参考にしてくださいね。

【Javaプログラミング超入門 #09】配列(1)

既定値を おさらいしておくと
このように なっています。

数値型は0
char型は文字コード0
boolean型はfalse
参照型はnull

ですので
クラス SalesEmployee をインスタンス化する時には

String name;  ← 自動的に null
int salesAmt; ← 自動的に 0

という値で自動的に初期化されます。

そして、左辺は、SalesEmployee型(参照型)の
変数 se が宣言されて

インスタンスの参照値、この場合には 100 番地が
se に代入されます。

こうなると、変数名 se は、クラス SalesEmployee を
インスタンス化した実体を指し示すこととなります。

このイメージを 掴んでおきましょうね。

【4】 メンバへのアクセス

インスタンス化したメンバを使うことを
メンバにアクセスするといいます。

そして、このメンバへのアクセス方法ですが…

インスタンスのメンバへのアクセス
変数に対して 『 . 』(ドット演算子)を使いう。

…という事になります。
ドット、ピリオドですね。

(フィールドの参照・代入)
変数名.フィールド名

(メソッド呼び出し)
変数名.メソッド名(実引数,…)

という形になります。

例を見ていきましょう。

(クラス)
public class SalesEmployee {
String name;
int salesAmt;

int sell(int amt) {
return salesAmt += amt;
}
}

営業部員を表す SalesEmployee という
クラスがあります。

 

(実行側)
  :
SalesEmployee se = new SalesEmployee();

se.name = “速水剛留”;
se.salesAmt = 1000000;
  :
int result = se.sell(250000);
  :

メインメソッドなどでインスタンス化を
行う場合には…

new 演算子でインスタンス化して
SalesEmployee型の変数 se に代入します。

(実行側)
  :
SalesEmployee se = new SalesEmployee();

se.name = “速水剛留”;
se.salesAmt = 1000000;
  :
int result = se.sell(250000);
  :

そして、このインスタンスのフィールド name に
“速水剛留” を代入する場合には、このように

se.name = “速水剛留”;

と記述して、フィールド salesAmt に 1000000 を
代入するには、

se.salesAmt = 1000000;

と記述します。

メソッドの場合にも、同様に

se.sell(200000);

という形で、ドット演算子を使用してメソッド呼び出しを行います。

メンバへのアクセスは、ドット演算子
押さえておいてくださいね。

ここまでのイメージを 簡単にまとめておきましょう。

設計図となるクラスでは
フィールドとメソッドを定義しておきます。

クラスから実体にあたるインスタンスを作成します。
この事をインスタンス化といいます。

インスタンスはフィールドに値を持ちますし
メソッドは実際に呼び出せるようになります。

メインメソッドなど、使う側からは
まずは、クラスをインスタンス化します。

new 演算子を用います。

クラス名 変数名 = new クラス名();

と記述します。

例えば、SalesEmployee クラスをインスタンス化
する場合には、このように記述します。

SalesEmployee se = new SalesEmployee();

インスタンス化した結果を 変数に代入すると…

そのインスタンスの
メンバ(フィールド・メソッド)にアクセスできます。

メンバへのアクセスは ドット演算子を使用します。

・フィールドへのアクセスは、変数名.フィールド名
・メソッドへのアクセスは、変数名.メソッド名(引数,…)

例えば、変数 se が SalesEmployee型の
インスタンスを指し示している場合

このように記述します。

sa.name = “”;
sa.sell(200000);

【5】 クラス図

クラス図では、クラスの「属性」と「振舞い(操作)」
を表すほかに、クラス同士の関係性も表します。

…というお話をしましたが、今回は
関係性の1つをお伝えします。

今回の例の
実行用のクラスと 設計図のクラスの関係性です。

Driver クラス と SalesEmployeeクラスの
関係は、このように表します。

破線(点線)の矢印ですね。

呼び方は

依存

といいますが…

この場合は Driverクラスが SalesEmployee クラスを
利用する関係という意味になります。

破線(点線)の矢印

ここも 押さえておきましょうね。

【まとめ】

【1】 実行用クラス
・ プログラムを動かすには
  実行用のクラスが必要。

・ 実行用クラスには
  プログラムの入り口となる
  メインメソッドを配置する。

【2】 インスタンス
・ クラスから作られる実体を
  Javaではインスタンスと言う。

・ インスタンスを作る事を
  インスタンス化と言う。

・ インスタンス化して
  変数に代入する方法

  クラス名 変数名 = new クラス名();

【3】 内部データ
・ インスタンス化されると
  メモリ上に領域が確保され
  既定値で初期化される。

・ クラス型の変数には
  インスタンスの参照値が
  代入される。

【4】 メンバへのアクセス
・ インスタンスのメンバ
  へのアクセスは
  ドット演算子を使う。

・ フィールドの参照・代入

  変数名.フィールド名

・ メソッド呼び出し

  変数名.メソッド名(実引数,…)

【5】 クラス図
・ クラス同士の関係で
  片方が片方を利用する関係は
  破線(点線)の矢印で表す。