Essential ActionScript 3.0 読書メモ 第26回 メソッドでオブジェクトの状態を調べ、変更する

インスタンス変数をprivateで宣言し、そのインスタンス変数が定義されたクラスの外側のコードから読んだり変更させたりしないようにしておくのが、良いオブジェクト指向プログラミングのやり方である、というのは既に学んだ通り。

良いオブジェクト指向プログラミングのやり方では、外部のコードにインスタンス変数を直接変更させる代わりに、オブジェクトの状態を調べたり変更したりするインスタンスメソッドを定義すべきとされている。

どこからでもインスタンス変数の値が変更できるなら、ある値が本当に有効な値を持っているのかの確証がなくなってしまう。Blogクラスのインスタンス変数titleを取り出してみたら、中身はブログタイトルではなく記事のタイトルでした、なんてことでは困る。

このような問題を避けるために、インスタンス変数はprivateで宣言すべきである。外部のコードにインスタンス変数へのアクセスを許可する代わりに、publicなインスタンスメソッドを用意し、それぞれのオブジェクトの状態を安定した方法で変更できるようにする。
例:

class Blog {
  private var title;

  public function getTitle () {
    return this.title;
  }

  public function setTitle (newTitle) {

    if (newTitle > 100) {// titleが100文字以上ある場合
      newTitle = newTitle.substr(0, 100); // 100文字目までを取り出す(101文字目以降は除去)

    } else if (newTitle == “”) {// 新しいタイトルとして与えられた文字列が空の場合
      return;// this.titleには変更を加えず、メソッドを終了
    }
    this.title = newTitle;
  }
}

伝統的なオブジェクト指向プログラミングの用語では、オブジェクトの状態を取得するメソッドをアクセッサー(accessor)あるいはゲッター(getter)、変更するメソッドをミューテーター(mutator)あるいはセッター(setter)と呼ぶ。しかし、ActionScript 3.0では、「アクセッサーメソッド」という用語は特別のメソッドを意味する。そのため、Essential ActionScript 3では、これらの用語を使用していない。代わりに、取得メソッド(retriever method)/変更メソッド(modifier method)という用語を使用している。

今日の進捗:428→449/4343 全体の1割が終了!

コメントを残す