《Jython2.5》Tutorials - Classes and Objects, #4

Java プログラマーのための Python 導入ガイド記事一覧
Tutorials - Classes and Objects, #4

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

■ 概要

Java で記述したクラスに対して、Jython は便利な機能を提供します。

 Java で作成したモジュールを、Jython の世界から覗くと、新たな可能性が広がります。
 Jython を対話モードで起動すると、あたかも Javaインタープリターのように利用できます。
 JavaBeans に準拠したクラスを利用するときに、Jython では洗練された表現が可能になります。

 《Note》JPython1.1.x/Jython2.1.x 用に作成したセミナー課題を、Jython2.5 で再構成しました。

Java で作成したモジュールに、Jython から自由にアクセスできる機能があると便利です。

■ 関連記事

Jython から Java の世界を眺める

■ 事例:クラス Rectangle

The Java™ Tutorials では、次の事例 Rectangle.java を紹介しています。

public class Rectangle {
    public int width = 0;
    public int height = 0;
    public Point origin;

    // four constructors
    public Rectangle() {
	origin = new Point(0, 0);
    }
    public Rectangle(Point p) {
	origin = p;
    }
    public Rectangle(int w, int h) {
	origin = new Point(0, 0);
	width = w;
	height = h;
    }
    public Rectangle(Point p, int w, int h) {
	origin = p;
	width = w;
	height = h;
    }

    // a method for moving the rectangle
    public void move(int x, int y) {
	origin.x = x;
	origin.y = y;
    }

    // a method for computing the area of the rectangle
    public int getArea() {
	return width * height;
    }
}

クラス Rectangle は(平面上にある)矩形領域(長方形)を表現したものです。3つのインスタンス属性 width/height/origin を持つとともに、4つのコンストラクター Rectangle と、2つのメソッド move/getArea を規定しています。

$ javac Rectangle.java 
$ ls
Point.class	Point.java	Rectangle.class	Rectangle.java

まず、事前の準備として、ソースモジュール .javaコンパイル javac して、クラスモジュール .class を作成しておきます。すると(ソースコードを記述した)言語 Java/Jython の違いに依らず(.class を介して)相互に情報をやり取りできます。ここでは、Jython から、Java の世界を眺めてみます。

クラス特性

■ 組み込み関数 dir
$ jython2.5b3
>>> import Point
>>> dir()
['Point', '__doc__', '__name__']
>>> import Rectangle
>>> dir()
['Point', 'Rectangle', '__doc__', '__name__']

import 文を使って、各モジュール(Point.class/Rectangle.class)を取り込むと、Jython の世界から、Java で作成したクラス Point/Rectangle を扱えるようになります。組み込み関数 dir を使って、対話モードで参照できる名前の中に、クラス Point/Rectangle が含まれるのが分かります。

■ 特殊属性 __dict__

Rectangle に固有の特性をより詳細に知りたいなら、特殊属性 __dict__ を参照します。

>>> for k,v in Rectangle.__dict__.items():
... 	print k,v
... 
area <beanProperty area type: int 0x1>
height <reflected field public int Rectangle.height 0x2>
width <reflected field public int Rectangle.width 0x3>
move <java function move 0x4>
getArea <java function getArea 0x5>
__init__ <java constructor _new_impl 0x6>
origin <reflected field public Point Rectangle.origin 0x7>

公開されたフィールド height/width/origin のほかに、コンストラクターを確認できます。ただし、その名前は、Rectangle ではなく、__init__ になっています。また、メソッド関数 move/getArea のほかに、bean 特性として area が規定されているのが分かります。

Tips

》作業中です《

Last updated♪09/06/01