Java の素描 #023:《余録》リファクタリングの詳細な手順

記事一覧 Java.use(better, Swing=Jython) #FIFA World Cup への道《Jython2.5》

Java の素描 Jython 弾丸ツアー:時短プログラミング生活のすすめ 〜

《著》森こねこ、伊藤うさぎ、小粒ちゃん@湘南組《監修》タマゴ倶楽部

第1版♪2003/05/23 ● 第2版♪2006/04/03 ● 第3版♪2010/06/11

Step23:《余録》リファクタリングの詳細な手順

■ クラスを抽出する

新たなモジュール wcView 用意した後で、クラス WcControlPane を抽出するまでの、詳細な手順を示します。

## ---------------------------------------- wcFrame.py
class TopPanel(JPanel):
    def _controlPane(self, group, **keys):
        ...
        comp = tablePane()
        return comp

## ---------------------------------------- wcView.py
    def _controlPane(self, group, **keys):
        ...
        comp = tablePane()
        return comp

メソッド _controlPane を、新たなモジュール wcView に転記(移動)します。

## ---------------------------------------- before
    def _controlPane(self, group, **keys):
        ...
        comp = tablePane()
        return comp

## ---------------------------------------- after #1
class WcControlPane:
    def __init__(self, subject, group, **keys):
        self.subject = subject
        ...
        self.comp = tablePane()

まず、新たなクラス WcControlPane を用意します。次に、メソッドの名前を _controlPane から __init__ へと変更します。そして、新たな引数 subject を挿入するとともに、インスタンス属性 self.subject を初期設定します。さらに、一時変数 comp に代えて、インスタンス属性 self.comp を用意した後で、リターン文を削除します。

## ---------------------------------------- before
class TopPanel(JPanel):
    def __init__(self, master, *args, **keys):
        ...
        self.table = {}

## ---------------------------------------- after #2
class WcControlPane:
    table = {}

クラス TopPanel では、インスタンス属性 self.table を削除するのに代えて、クラス WcControlPane では、これをクラス属性 table にします。

## ---------------------------------------- before
class TopPanel(JPanel):
    def __call__(self, e):  # javax.swing.event.ListSelectionEvent
        row = e.source.leadSelectionIndex
        value = self.table[self.group].getValueAt(row, 0)
        self.update_(value)

## ---------------------------------------- after #3
class WcControlPane:
    def __call__(self, e):  # javax.swing.event.ListSelectionEvent
        row = e.source.leadSelectionIndex
        value = self.table[self.subject.group].getValueAt(row, 0)
        self.subject.update_(value)

まず、特殊メソッド __call__ を、新たなモジュール内のクラス WcControlPane に転記(移動)します。次に、インスタンス自身 self に代えて、インスタンス属性 self.subject を介して、必要な情報をやり取りします。

》作業中です《


関連記事

TOP

Last updated♪2010/08/04