おとやすみ日記

ゲームプランナー、一児の父です。

プログラミングにおけるデザインパターンを、Flashに置き換えて考えてみる。

勉強のためのメモとして投稿しておきます。もう、外に向けたブログって概念じゃなくて自分の内側の深いところから生まれるものを外に出していく作業。…要するにメモ、ってことなんだよねそれ。
随時追記予定。

デザインパターン1/23個目 Iterator

集合体の要素(配列とか)を統一した方法で一つずつ数えていくのが、Iteratorパターン。
具体的なクラスだけじゃプログラミングできない。抽象化したクラスやインターフェースを使ってプログラミングするのが大事。
→再利用しやすくなるし。

実装がどうであれ、Iteratorパターンを使える。

「走査」という言葉がやたらと出てくる。要は配列の中を順番に見ていくことや、for文でまわしている状態のことらしい。

走査する対象(集約オブジェクト)としてのListクラス。
このListクラスの、
・オブジェクトが持つ名前の順番にアクセスする場合、どんな順番でアクセスするか?
・オブジェクトのパラメータを利用して走査する場合
 →「走査方法」は誰が提供するのか?

「走査方法」は、目的によっていろんな方法があるから、あらかじめ用意できない。
なので、走査方法を与えるクラスは、Listクラスとは別に独立させたクラスとしてユーザーに作ってもらう。
(走査方法自体はユーザーが自由につくれるほうがいい。)

また、Listクラスの中身に変更が生じたとき、それによって他の部分にも影響が出ることが予測できる。
Iteratorパターンでは、そんなときの影響が少なくなるような設計になっているらしい。






デザインパターンの理解より先に、

まず抽象クラスとインターフェースという概念を知ったことが大事だと思った。

■ 抽象クラス と 具体的なクラス

演劇に例えると、「桃太郎(抽象クラス)→ Aくん(具体的なクラス)」。

桃太郎は、鬼退治に行くという"ふるまい(役割)"が決められている。

桃太郎を演じるAくんは、鬼退治をするという役割を演じる。

■ Iteratorの抽象クラスは、集合体とそれを数えるインターフェース。

抽象クラスでいえば「集合体と、それらを数える(走査する)インターフェース」

サンプルでは「本棚に本が収められていて、それらを数える」という例えで説明している。

たとえば別の例として「トランプ(集合体)」にも置き換えられるはず。

今日ほかに学んだこと

・implements(実装)、インターフェース、抽象クラスという言葉。(オブジェクト指向の話題でも出てくるらしいけど)