例題で学ぶデザインパターン #4: モジュール分割
例題で学ぶ Jython/Swing デザインパターン《Jython2.5》《記事一覧》
モジュール分割
■ 概要
例題により、アプリケーションを作成する過程を通して、Jython/Swing によるデザインパターンを習得します。
この課題では、Swing/GUI を使って階層構造を持つ情報を提示します。〈GoF〉Composite/Iterator/Visitor/Command パターンを導入すると、if/for 文によるコードの汚染、配列の境界問題が解消されるので、要求仕様の変更にも柔軟に対処でき、簡潔で見通しの良いコードを記述できるようになります。
《Note》JPython1.1.x/Jython2.1.x 用に作成したセミナー課題を、Jython2.5 で再構成しました。
事例:モジュールを起動する
モジュールを起動すると、次のようなウィンドウが現れます。
$ jython2.5b3 -i step04/TreeEx.py
ツリー JTree を構成する各ノードを選択すると、その直下にある各項目の名前がテキスト領域 JTextArea に表示されます。たとえば、ノード colors を選択すると、テキスト領域に文字列 blue/violet などが表示されます。
$ ls -l step04 total 32 -rw-r--r-- 1 sketch staff 4617 6 7 11:17 TreeComposite$py.class -rwxr-xr-x@ 1 sketch staff 371 6 7 11:17 TreeComposite.py -rwxr-xr-x@ 1 sketch staff 2197 6 7 11:16 TreeEx.py
モジュールを起動すると、同時に、クラスファイル .class が生成されます。
事例:コードの解説
■ モジュール TreeEx
#! /usr/bin/jython2.5b3
...
from TreeComposite import Node
from..import 文によって、分割したモジュール TreeComposite を取り込み、クラスを Node を参照できるようになります。
class View(JPanel): ... def children(self, node):return "\n".join( [str(e) for e in node.children()])
メソッド children の本体は、分割したモジュール TreeComposite のメソッド __str__ に移動します。
■ モジュール TreeComposite
#! /usr/bin/jython2.5b3
class Node(object):
クラス Node は、ツリーを構成するノードを表現したものです。
def __init__(self, node, **keys): self.node = node
インスタンス属性 self.node は、ツリーを構成するノードを参照します。
def __str__(self):
return "\n".join(
[str(e) for e in self.node.children()])
メソッド __str__ は、オブジェクトに固有の文字列表現を規定します。ここでは、その直下にある子ノードの名前を列挙します。
事例:評価
完成したアプリケーションを利用して、ここまでの成果物を評価します。このアプリケーションを完成させると、次のような解析が可能になります。
home +-- step01
+-- TreeEx.py (1625) |
+-- TreeEx.py (2161) |
+-- TreeEx.py (2516) |
+-- TreeComposite$py.class (4617) |
+-- TreeComposite.py (371) |
+-- TreeEx.py (2197) |