Python 弾丸ツアー/Java: JavaBeans 準拠 ... step 1: モジュールを取り込む

OOPデザインパターンリファクタリング

Python.use(better); Python 弾丸ツアー/Java: JFC/Swing 編
>>> JavaBeans 準拠
step 1: モジュールを取り込む
《Python3.1|Jython2.5|IronPython2.6》

《著》小粒ちゃん@湘南組《監修》小泉ひよ子とタマゴ倶楽部
第0版♪2001/03/02 ● 第1版♪2003/05/23 ● 第4版♪2010/03/08

step 1: ウィンドウを表示する

■ モジュールを取り込む

 ̄コードを記述するには、必要なモジュールを事前に取り込む必要があります。Java で記述した、

import javax.swing.JFrame;

と同等のコードは、Jython では、

from javax.swing import JFrame

になりますが、構文に違いはあっても、その意義に違いはありません。また、Java では、次のようにして

import javax.swing.*;

モジュール内のすべてのクラスを取り込めますが、これと同等のことを Jython では、

import javax.swing

のようにすると、

def tips():
    frame = javax.swing.JFrame()
    ...

各クラス JFrame を含むモジュール javax.swing の名前を明示する必要があります。

インスタンスを初期設定する

Java では、生成したインスタンスを初期設定するのに(クラス名と同じ)コンストラクターを利用します。

        JFrame frame = new JFrame("JFC/Swing");
        ...
        frame.setPreferredSize(new Dimension(150, 50));

このとき、演算子 new が必要です。Jython では、

        frame = JFrame("Swing")
        ...
        frame.setPreferredSize(Dimension(150, 50))

クラスも呼び出し可能オブジェクトなので、演算子 () を適用するだけです。このとき、new は不要です。

■ JavaBeans 準拠

Jython では、JavaBeans に準拠するものには、便利な機能を提供します。すると、前述したコードは、

        frame = JFrame()
        frame.title = "Swing"
        frame.defaultCloseOperation = JFrame.EXIT_ON_CLOSE
        frame.preferredSize = (150, 50)
        frame.pack()
        frame.visible = True

このように記述できます。

■ setter

インスタンス属性を設定するのに、setter を利用します。たとえば、インスタンス属性 title を設定するときには、get の後に属性の名前を続けた、メソッド setTitle が存在するものとします。このとき、set に続く最初の文字は大文字になります。すると、Java では、

        JFrame frame = new JFrame();
        frame.setTitle("Swing");

のようになりますが、Jython では、

        frame = JFrame()
        frame.setTitle("Swing")

のようにして、ウィンドウのタイトル(文字列)を設定できます。さらに、Jython では、

        frame = JFrame()
        frame.title = "Swing"

のようにして「インスタンス属性 title に値を設定している」かのような表現が可能になります。

インスタンスの自動生成

インスタンス属性に設定する値が適切でないときには、自動的に適切な値を生成します。たとえば、

        frame.preferredSize = (150, 50)

とするだけで、右辺に指定したタプルから、適切な値を生成して、

        frame.preferredSize = Dimension(150, 50)

と同じ結果になります。

TOP
》作業中です《