Java.use(better, Jython=Swing);《6》ワークスペース

前の記事記事一覧次の記事
Java.use(better, Jython=Swing);


Java プログラマーのための Python 導入ガイド

第1版♪2003/05/23

■ 概要

リファクタリングを実践して、ワークスペースを規定するクラスを抽出します。

(^.^)

ワークスペース

《Note》すでに、コード全体を一元管理するのは困難になりつつあるので、リファクタリングを実施します。ここでは、メソッド本体の行数が一桁以内に収まる「アスリートコード」を目指します。核となるメソッド群に共通する特性と個性との違いが明確になったとき、リファクタリングの効能は確信へと変わります。

リファクタリングを実践する

リファクタリングを実践して、ワークスペースを規定するクラスを抽出します。

class Workspace:
    def __init__(self):
        self._local_ = {}
        self.workspaceView()
    def workspaceView(self):
        panel = JPanel(layout=BorderLayout())
        panel.add(self.textView(), BorderLayout.CENTER)
        frame = JFrame(
            defaultCloseOperation=JFrame.EXIT_ON_CLOSE,
            size=(240, 100),
            title="Wa~ku`waku`Space (^_^)",
            JMenuBar=self.menuBar(),
            )
        frame.add(panel)
        frame.visible = True
    def menuBar(self):
        menuBar = JMenuBar()
        buttons = (
            ("do"     , self._do     ,), 
            ("print"  , self._print  ,), 
            ("inspect", self._inspect,), 
            )
        for text, act in buttons:
            menuBar.add(JButton(text=text, actionPerformed=act))
        return menuBar
    def textView(self):
        self.view = JTextArea()
        return JScrollPane(self.view)
    def _do(self, e):
        self.evaluate(self.source_do(self.view.selectedText))
    def _print(self, e):
        self.evaluate(self.source_inspect(self.view.selectedText))
        self.printIt(_self_)
    def _inspect(self, e):
        self.evaluate(self.source_inspect(self.view.selectedText))
        self.inspectIt(_self_)
    def source_do(self, text):
        return text + "\n" \
            + "global _local_; _local_ = locals()"
    def source_inspect(self, text):
        return self.source_do(text) + "\n" \
            + "global _self_; _self_ = %s"%text.splitlines()[-1]
    def evaluate(self, source):
        eval(compile(source, "(*.*)", "exec"),
                globals(), self._local_)
    def printIt(self, it):
        s = self.view.text
        p = self.view.selectionEnd
        self.view.text = s[:p]+" %r"%it+s[p:]
    def inspectIt(self, it):
        Inspector(it)


リファクタリングの話題は、すでに入門編でも触れているので、ここでは全体像を俯瞰します。3つのメソッド _do/_print/_inspect に共通する特性を表わす evaluate と、それぞれの個性を表わすメソッド群との関係に茶着目すると、その理解が深まります。

Last updated♪2009/08/13