Flex、AIR、Java、Androidなど

Archive for 1月 8th, 2009

08 1月, 2009

Iteratorパターンの理解

Posted by: tachibana In: プログラミング

※この記事は私が本を読み、頭で考えたことを将来完全に理解してから見直して笑ったりするためにそのまま羅列したものです。故に間違った理解や意味不明なこともたくさん出てくると思います。プログラミングを教えるような立場の方には有益かも(笑)?
・Aggregateインターフェースはimplementsされることによりimplemantsしたクラス・・・
・Iteratorインターフェースはクラス群がApplicationとしてうごくようになった時、Iterator型の変数の定義を可能にする。

実体化されたクラスの中にIterator型の変数ができる

Iteratorのインスタンスが動くのでメインクラスに何か変更があっても大丈夫。
※クラス化されていないとインスタンスとして定義できない(型が存在しないのでreturnできない)?
Aggregateインターフェースが定義され、implementsされているのはこれによりBookShelfクラスにIteratorを作成するメソッドを定義することを義務付けるため?

これによりAggregateインターフェースをimplementsしたクラスはIterator型の変数を持つことになる
抽象クラスを定めることにより、各クラスが実装しているメソッドを理解しやすくなる。
抽象クラスをインスタンス化するだけのAggregateインターフェースは、それをimplementsする集合体であるクラスにiteratorを返すメソッドの定義を強制する。
そのクラスがインスタンス化されると、メインクラスはインスタンス化されたクラスのIteratorを得ることが出来る。Iteratorは、Iteratorクラスをimelementsしたクラスに自分自身をパラとして渡し、現在のプロパティを格納し、それを操作するメソッドと共にIterator型の変数としてメインクラスにセットされる
つまりIteratorはあるインスタンスのメソッドをループして値を得るのではなく、それ自身がそれを実体化したクラスのプロパティを保持しているオブジェクト。メソッドは参照渡しではなく、実体渡し。
本棚クラスはiteratorメソッドを持つ。iteratorメソッドはIterator型の変数を返す。Iteratorをimplementsしたクラスはメソッドの定義を義務付ける。
なぜBookShelfIterator型にしない? = new BookShelfIterator(this)じゃない?
Iteratorを使うことで実装されているメソッドをはっきりと理解でき、Iterator型の変数を数を数えるためだけのメソッドとして理解できる。BookShelfIteratorが余計な形に変更されるのを防ぐ効果もあるのか?
集合体として機能するクラスはよく使う。だが毎回同じように数を数えるメソッドを実装するのはめんどい。Iteratorインターフェースをつくっておけば、集合体として機能するインスタンスにはIteratorをimplementさせ、iteratorを返すメソッドを定義させることになり、iterator()はそれ自身をパラにしてIteratorを実装するインスタンスを作り返すのでそれをiterator型のインスタンスとして保持し「パラにしてIteratorを実装する」クラスを実装することになる。
自分なりの結論:

AllayList等のクラスは標準でIteratorインターフェースを実装している。自分で何らかの集合体のようなクラスを作る際は集合体のクラスは集合体であることを示す何らかのインターフェースを実装し、実装したクラスにiteratorの保持を強制させる。また、本項の場合はIteratorはインターフェースであり、それを実装した抽象でないクラスを集合体がインスタンス化し保持する形をとっている。基本的にループでまわす必要があるか、考えられる場合はfor文でなくIteratorを使うべき。クラスの再利用化を考えた時やIterator部分の実装を変えるような必要が出てきた際はコストを削減できる。

コメントは受け付けていません。

前々から欲しいと思っていたので会社で買った頂きました。ありがとうございます。
詳説 Actionscript 3.0と迷いましたが、あっちは5800円もするのでまたの機会にします。こちらは3800円でした。
この手の本を読むのは初めてなので各デザインパターンのコードを読みつつ考えた理解していく工程をそのまま残していこうかなと考えております。あとあと面白いかもしれないので。

コメントは受け付けていません。

Categories

 

2009年1月
« 1月   2月 »
 1234
567891011
12131415161718
19202122232425
262728293031  

About

Author: tachibana

  • ちょっとしたことはTwitterに書いています。こっちはアプリの公開等の時に更新されます。
  • 最近はもっぱらJavaとObjective Cです。AS3は飽きました。
  • スクリプト言語ではPerlが好きでしたが最近はGAE/Jで何でもやってます。
  • Linuxは自宅サーバー建てるのがやっとのレベルです。前の会社で何日も徹夜してやったのはいい思い出です。
  • アプリへのご要望などご意見等ありましたらお気軽にご連絡下さい。

Alternative content here