Java の素描 #005:《余録》コードの解説

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

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

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

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

Step05:《余録》コードの解説

■ メソッドを利用する意義

メソッドは、複数の変数を含むコードの断片を意味のある構成単位として扱う手段を提供します(カプセル化)。メソッド内でコードの断片を記述するときには、それを囲む外部の情報を利用できます。しかし、メソッドを利用するときには、その内部情報を利用できません。この特徴を利用すると「情報隠蔽の原則」に基づく洗練されたコードを記述できます。


■ メソッド(局所関数)を抽出する
## ---------------------------------------- wcFrame.py
class TopPanel(JPanel):
    def __init__(self, master, *args, **keys):
        master.contentPane = self
        ...
        comp = splitPane()
        self.add(comp)

メソッド __init__ の本体では、新たに生成したコンポーネント comp を、追加 add するだけなので、その意味を理解するのも容易です(理解容易性)。



ここでは、変数 comp が参照する具体的なインスタンス(JSplitPane)に依存しないことに意味があります。実際に、メソッド splitPane を実現するときには、その本体で JSplitPane を利用しています。しかし、メソッド splitPane を利用するコードの断片では、その実現方法には依存しません。すると、メソッド splitPane を実現する方法を変更しても、その影響を受けないので、要求仕様の変更にも柔軟に対処できます(柔軟性)。

        def splitPane():
            comp = JSplitPane(
                ...
                leftComponent  = leftComponent(),
                rightComponent = rightComponent(),
                )
            return comp

ここでは、キーワード引数 leftComponent に続く実引数の具体的なインスタンス(JLabel)に依存しないことに意味があります。実際に、メソッド leftComponent を実現するときには、その本体で JLabel を利用しています。しかし、メソッド leftComponent を利用するコードの断片では、その実現方法には依存しません。rightComponent についても同様です。

        def leftComponent():
            comp = JLabel(
                ...
                )
            return comp

ここでは、具体的なコンポーネント(JLabel)に依存するコードが、メソッド本体に閉じていることに意味があります。このメソッドを利用するときには、それに依存しないコードを記述する必要があります。実際に、メソッド splitPane の本体では、それに依存しないコードだけを記述しています。rightComponent についても同様です。

■ イディオム

これら3つのメソッド(splitPane, leftComponent, rightComponent)に共通するイディオムは、

        def ...():
            comp = ???(
                ...
                )
            return comp

という形式になっています。??? には、具体的なコンポーネント(JSplitPane, JLabel)を指定しますが、これらのメソッドを利用するときには、それに依存しないコードを記述する必要があります。つまり「情報隠蔽の原則」に基づいて、特定のコンポーネントに依存するコードが、メソッド本体に閉じていることが重要です。

》作業中です《


関連記事

TOP

Last updated♪2010/08/01