《余録》Swing/Jython - Iterator の隘路
Java プログラマーのための Python 導入ガイド〈初級/応用編〉《Jython2.5》
《余録》Iterator の隘路
■ 概要
フォルダー/ファイルの階層構造を Swing/GUI を利用して「簡単に」閲覧できるツールがあると便利です。
セミナー課題では、JTree/DefaultMutableTreeNode と同等の機能を「実現する」方法を紹介しました。 ここでは、入門者向けに、既存の機能を「利用する」方法を紹介するとともに、その問題点について考察します。 《Note》JPython1.1.x/Jython2.1.x 用に作成したセミナー課題を、Jython2.5 で再構成しました。
■ 関連記事
- Java/Python 導入ガイド:Swing/Jython2.5 - JTree - 続・ひよ子のきもち, Swing/Jython - JTree
Javaデザインパターンへの誘い―〈脱〉初級プログラミング宣言
- 作者: 小泉ひよ子
- 出版社/メーカー: カットシステム
- 発売日: 2003/07
- メディア: 単行本
- クリック: 4回
- この商品を含むブログ (2件) を見る
何が問題か:Iterator の隘路
Java の歴史を紐解くと、コレクションに対して反復処理を行う、いくつかのイディオムが登場します。
■ インターフェース:Enumeration
Vector items = new Vector(); items.add(A); items.add(B); items.add(C); ... Enumeration enum = items.elements(); while (enum.hasMoreElements()) { Type s = (Type) enum.nextElement(); ... }
■ インターフェース:Iterator
List items = new ArrayList(); items.add(A); items.add(B); items.add(C); ... Iterator iter = items.iterator(); while (iter.hasNext()) { Type s = (Type) iter.next(); ... }
これらに共通するのは、特定のデータ構造(Vector/ArrayList など)に依存しない、インターフェース Enumeration/Iterator を使って、抽象的な表現が可能になることです。
インターフェースを利用するメリットは、簡潔で見通しの良いコードを記述できるだけではありません。同じインターフェースを使って記述したコード(what)に影響を与えずに、それを実現する方法(how)を自由に変更して拡張できます。すると、同じプロトコル(what)に従うなら、それを実現する方法(how)を変更しても、それを利用するコードを変更する必要がなくなります。
■ 何が問題か:Enumeration, Iterator, etc.
しかし、似て非なるインターフェースがいくつも存在するのは問題です。たとえば、Enumeration/Iterator は、ほぼ同じ機能を提供しているのに、互換性がありません。将来、これとは違う新しいインターフェースが導入されると、既存のインターフェースを使って記述したコードは、改変を余儀なくされます。
そこで、特定のインターフェースに依存しない、より抽象的な情報隠蔽のためのメカニズムが必要になります。セミナー課題では、デザインパターンと Jython の組み込みの機能を併用することで、これらの問題点を解消する方法を紹介します。
⇒ 続きはこちら 》〈GoF〉Iterator を導入する《 で
Tips
》作業中です《