« メンバーアクセスの制限(publicとprivate) | メイン | ビルトインクラスの拡張 »

暗黙的なgetterメソッドとsetterメソッド

オブジェクト指向プログラミングの作法では、ほかのクラスのプロパティの値を直接書き換えたり読み出すこと良しとしない考え方があります。ではどうやって、ほかのクラスからプロパティにアクセスするかと言えば、プロパティの値を設定したり返したりする専用のメソッド、すなわち、getterメソッドとsetterメソッドをクラス内で定義しておき、それを介してのみアクセス可能にします。
しかしこれではクラスを利用するユーザーにとって手軽さを欠いたものになりかねません。そこでgetとsetのキーワードを使い、暗黙的なgetterメソッドとsetterメソッドを定義します。これであたかもプロパティに直接アクセスしているかのように見せることができます。
たとえば、次のGameクラスにはplayerNameとgamePointの2つのプロパティが使ってあります。GameクラスのインスタンスmyGameを作ったとき、2つのプロパティはプライベート変数であることから、myGame.playerName、myGame.gamePointのように簡単にアクセスすることができません。


sample→ex04-02/getsetフォルダ

クラス定義ファイル:Game.as
class Game {
//プライベート変数
private var playerName:String;
private var gamePoint:Number = 0;
//コンストラクタ
function Game(name:String) {
this.playerName = "Bomber_" + name;
}
//暗黙のgetterメソッド
function get player():String {
return this.playerName;
}
//暗黙のsetterメソッド
function set player(name:String):Void {
this.playerName = name;
}
//暗黙のgetterメソッド
function get point():Number {
return this.gamePoint;
}
//暗黙のsetterメソッド
function set point(v:Number):Void {
this.gamePoint = v;
}
}

しかし、get、setのキーワードを使ってplayerとpointのメソッドが定義してあることから、次のように外見上はオブジェクトのプロパティに直接アクセスしているかのように、2つのプロパティに気軽にアクセスすることができます。Gameクラスをブラックボックスと考えるならば、GameクラスのユーザーにとってはplayerとpointがGameクラスのプロパティとして見えます。

フレームアクション:getsetTest.fla
var myGame:Game = new Game("oshige");
myGame.point = 59;
trace(myGame.player); //出力→ Bomber_oshige
trace(myGame.point); //出力→ 59

note:
v2コンポーネントはget、setを利用することでユーザーにとってシンプルな使い勝手を実現してます。

投稿者 oshige : 2005年2月22日 11:52