《Jython2.5》JTree〈GoF〉Command が必要に
Java プログラマーのための Python 導入ガイド〈初級/応用編〉《Jython2.5》
JTree〈GoF〉Command が必要に
■ 概要
フォルダー/ファイルの階層構造を Swing/GUI を利用して「簡単に」閲覧できるツールがあると便利です。
この課題では、Swing/GUI を使って階層構造を持つ情報を提示します。 また〈GoF〉Composite/Iterator/Visitor/Command パターンを導入することで、 構造化プログラミングには必須の if/for が不要になるので、簡潔で見通しが良く、 要求仕様の変更にも柔軟に対処できる、プログラム(コード)を作成する方法を紹介します。 《Note》JPython1.1.x/Jython2.1.x 用に作成したセミナー課題を、Jython2.5 で再構成しました。
事例:コードの解説
class View(JPanel): def init_buttons(self): panel = JPanel() panel.layout = BoxLayout(panel, BoxLayout.LINE_AXIS) self.textButton = JButton( label = "Text",actionCommand = "Text",actionPerformed = self.actionPerformed, ) self.treeButton = JButton( label = "Tree",actionCommand = "Tree",actionPerformed = self.actionPerformed, ) for e in [ self.textButton, self.treeButton, ]: panel.add(e) return panel def actionPerformed(self, e): s = e.sourceif s.actionCommand == "Text":self.text_actionPerformed()if s.actionCommand == "Tree":self.tree_actionPerformed()
メソッド actionPerformed の本体では、if 文が必要になるので、簡潔で見通しの良いコードを記述できないだけでなく、要求仕様の変更にも柔軟に対処できません。
このセミナー課題では、高々2つの場合だけですが、実際のアプリケーション開発では、数十〜数百の場合に対処する必要が生じます。このアプローチを踏襲するかぎり「数十〜数百の if 文を書く」という呪いを解く術がありません。
何が問題か
■ オブジェクトの識別性
JButton の属性 .actionCommand(が保持する文字列)を利用して、どのボタンが選択されたのかを識別しています。そのため、if に続く条件式では、同じ文字列かどうかを比較して、処理を分岐する必要があります。
ところが、オブジェクト指向プログラミングにおいては、その特徴のひとつである「識別性」を利用できます。そのため、構造化プログラミングの定石である「条件分岐」を記述する必要がなくなり「if 文の呪縛」から解放されます。
⇒ 続きはこちら 》コードの解説《 で
■ 動的スキーマの適用
既存のシステムが継続して運用されるには、要求仕様の拡張に対処する術が必要になります。また、要求仕様がすべて確定してからでないと、開発に着手できないのも困りまます。そこで、要求仕様の変更に際して、その影響を受ける範囲を限定できるときもに、実行時に問題解決を図る術が必要になります。
オブジェクト指向プログラミングにおいては、その特徴のひとつである「多様性」を利用できます。そのため、構造化プログラミングの定石である「条件分岐」を記述する必要がなくなり「switch 文の呪縛」から解放されます。また、すでに稼働しているシステムを停止することなく、その機能を自由に拡張できるようになります。
⇒ 続きはこちら 》コードの解説《 で
Tips
》作業中です《