Java の素描 #005:《余録》コードの解説
‖記事一覧‖ Java.use(better, Swing=Jython) #FIFA World Cup への道《Jython2.5》
Java の素描 〜 Jython 弾丸ツアー:時短プログラミング生活のすすめ 〜
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 についても同様です。