3.6 main メソッド、クラス、返却値

プログラム

B3_6

プログラムの説明

mainメソッドとクラス

プログラムB3_3を見てください。このmainメソッドでDiceオブジェクトが生成(インスタンス化)されています。

確認になりますが、オブジェクトを使用するにはクラスのコンストラクタ(クラス名と同じ特殊なメソッド)を呼び出しオブジェクトを生成する必要があります。

Diceクラスのソースコードを見てください。クラスはオブジェクトの設計図でした。

クラスは基本的に以下の三つの宣言から成り立っています。

  • クラスの宣言
  • 状態(インスタンス変数など)の宣言
  • 振る舞い(メソッド)の宣言

クラス宣言のブロックで状態の宣言と振る舞いの宣言が行われます。ただし、状態の宣言の順番やメソッドの宣言の順番には意味がありません。

つまり、Diceクラス宣言のブロックでは実行が上から下に動作してはいません。

もう一度、プログラムB3_3を見てください。mainメソッドの命令の各行に番号が付いています。各行の意味は

  1. Diceクラスの変数の宣言になります。宣言と同時にDiceオブジェクトが生成され、変数名diceでラベリングされています。
  2. 変数名diceでラベリングしたオブジェクトにcastメッセージを送ります。引数はありません。
  3. 変数名diceでラベリングしたオブジェクトにgetValueメッセージを送ります。引数はありませんが、返却値として状態のthis.valueの値が返却されます。

となります。

返却値

引数とはメソッドに渡される値(オブジェクト)で、返却値とはメソッドの部分に返却される値(オブジェクト)となります。

それでは、Diceクラスのソースコードを見てください。各mainメソッドメッセージがどのようにDiceオブジェクトに伝えられるかを説明します。

まず、B3_3のDiceオブジェクトに対するメッセージの順番がDiceクラスのメソッドの動作になります。

オブジェクト側からは以下のように振る舞います。

  1. コンストラクタが呼び出されます。返却値としてDiceオブジェクトが返却されます。

    コンストラクタのブロックでは何も行いません。

  2. castメソッドが呼び出されます。返却値はありません。

    castのブロックでオブジェクトの状態であるthis.valueにRandomオブジェクトから乱数を生成し、その値を代入します。

  3. getValueメソッドが呼び出されます。引数はありませんが、返却値として状態のthis.valueを呼び出し元に返却します。

    getValueのブロックでは返却するthis.valueをreturnキーワードで指定します。