プログラミング応用a 第9回 『モジュール化その1 (メンバアクセス制御とアクセッサ)』 |
9-7 【コンストラクタでセッタを利用する】
また,セッターは担当するフィールドに適切な値が設定されるようにチェックをする役目を持つ事が多い。上図のAccessor2.javaの例では,setAge( )
メソッドとsetGender( )メソッドで,それぞれフィールドに代入される値として渡された実引数の値が適切かどうかチェックをしている。
そのため,コンストラクタの初期化処理でも,こうした値のチェックを行うセッタを利用すると良い。この方針に従い,Accessor2.java を書き換えた例を
以下に示す。コンストラクタの初期化処理で setAge( ) と setGender( ) を呼び出している(☆と★の箇所)。
Accessor2.java
なお,ここではコンストラクタに負の年齢値や性別値として不正な値を実引数として渡してオブジェクトを初期化するとエラーメッセージ
を表示して,Person1型オブジェクトのフィールドは適切な初期化が行われないままになってしまう。
そもそも適切な値で初期化されないままオブジェクトを利用するのは危険なので,本来であれば
・なんらかの特別な処理に移行して,適切な値に初期化されるように再チャレンジする
・他のサービスに影響の無いようにこのプログラムを終了する。
といった処置が必要になってくる。このような処置を扱うためには,後期に学習する「例外」という仕組みを知る必要がある。
学習中の皆さんは,とりあえず上記の例のようにエラー表示などで対処しておくようにしておけばいいだろう。
|
以下に,オブジェクト指向の鉄則・常識を示す。
※フィールドは必ず private に指定する
※クラス外部からフィールドを参照したり操作する場合は,必要に応じて専用のメソッド(アクセッサ, accessor)を用意すること