Java/Python 導入ガイド:swing/Jython - JavaBeans

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

Java プログラマーのための Python 導入ガイド〈初級/入門編〉《Jython2.5》
swing/Jython - JavaBeans

《著》小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
第1版♪2003/05/23 ● 第2版♪2009/04/03
》作業中です《

■ 概要

JavaBeans に準拠したクラスに対して、Jython は便利な機能を提供します。

 Java で作成したモジュールを、Jython の世界から覗くと、新たな可能性が広がります。
 JavaBeans に準拠したクラスを利用するときに、Jython では洗練された表現が可能になります。
 getter/setter メソッドを呼び出すときに(C# のプロパティーと同様に)簡潔なコードを記述できます。

事例:JavaBeans

public class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }
    public String toString() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return this.name;
    }
    public boolean isId() {
        return this.name != "";
    }
}

このクラスは、JavaBeans に準拠したものです。

Jython の世界

Java で作成したモジュールを、Jython の世界から覗くと、新たな可能性が広がります。

#! /usr/bin/jython2.5b3
"""
    
Java で作成したクラス Person を、Jython で記述したクラスと同様に扱えます。
コンストラクター
>>> x = Person("John Doe")
コンストラクター Person が規定してあると(メソッド __init__ と同様に)オブジェクトに固有のインスタンス属性値を初期設定します。
■ メソッド toString
>>> x
John Doe
メソッド toString が規定してあると(メソッド __str__ と同様に)オブジェクトに固有の文字列表現が得られます。
■ getter メソッド
    
u'John Doe'
単に .name と記述するだけで、メソッド呼び出し .getName() と同じ効果が得られます。すると、初期設定された属性値を確認できます。
■ setter メソッド
>>> x.id
True
>>> x.name = "Jack"
>>> x
Jack
>>> x.name
u'Jack'
単に .name = と記述するだけで、メソッド呼び出し .setName() と同じ効果が得られます。すると、更新された属性値を確認できます。
■ is.. メソッド
    
True
単に .id と記述するだけで(boolean をリターン値とする)メソッド呼び出し .isId() と同じ効果が得られます。
■ misc
>>> x.name = ""
>>> x

>>> x.name
u''
>>> x.id
False
>>> x.id
True
>>> None
version #1.0.1
"""
名前を持たない(空の文字列)オブジェクトの属性値 x.id は、偽 False と評価されます。ここで、True とあるのは、エラーケース(不具合)を誘発するためです。

モジュール modtest

## ----------------------------------------
import   Person_ex
module = Person_ex

## ----------------------------------------
from doctest import testmod

def ex():
    reload(module)
    testmod(module)    

## ----------------------------------------
if __name__=='__main__':
    testmod(module)
■ テスト結果
テストケースを含むモジュール Person_ex.py を実行すると、次のようなテスト結果が出力されます。
$ jython2.5b3 -i Person_ex.py
**********************************************************************
File "/Users/sketch/home_Jython/_myHome/PyoSwing/_pyoSwing/ex_testmod/Person_ex.py", line 20, in Person_ex
Failed example:
    x
Expected nothing
Got:
    
**********************************************************************
File "/Users/sketch/home_Jython/_myHome/PyoSwing/_pyoSwing/ex_testmod/Person_ex.py", line 26, in Person_ex
Failed example:
    x.id
Expected:
    True
Got:
    False
**********************************************************************
File "/Users/sketch/home_Jython/_myHome/PyoSwing/_pyoSwing/ex_testmod/Person_ex.py", line 28, in Person_ex
Failed example:
    None
Expected:
    #1.0.1
Got nothing
**********************************************************************
1 items had failures:
   3 of  15 in Person_ex
***Test Failed*** 3 failures.
>>> 
ここでは、15 件中に 3 件の不具合が発生しています。たとえば、2件目の不具合を見ると、True が期待されているのに、False が得られたのが分かります。

Tips

モジュール modtest を利用すると、対話モードで試行錯誤した履歴を、そのままテストケースとして再利用できるので、アジャイル開発を促進します。 》作業中です《
Last updated♪09/05/11