《余録》Swing/Jython - Iterator の隘路

前の記事記事一覧次の記事

Java プログラマーのための Python 導入ガイド〈初級/応用編〉《Jython2.5》
《余録》Iterator の隘路

《著》小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
第1版♪2003/05/23 ● 第2版♪2009/04/03

■ 概要

フォルダー/ファイルの階層構造を Swing/GUI を利用して「簡単に」閲覧できるツールがあると便利です。

 セミナー課題では、JTree/DefaultMutableTreeNode と同等の機能を「実現する」方法を紹介しました。
 ここでは、入門者向けに、既存の機能を「利用する」方法を紹介するとともに、その問題点について考察します。

 《Note》JPython1.1.x/Jython2.1.x 用に作成したセミナー課題を、Jython2.5 で再構成しました。
■ 関連記事

Javaデザインパターンへの誘い―〈脱〉初級プログラミング宣言

Javaデザインパターンへの誘い―〈脱〉初級プログラミング宣言

何が問題か: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

》作業中です《

Last updated♪09/05/20