チュートリアル 06 autocount1 - Attributes

この例では、アトリビュート(attribute)システムを導入します。これは、クラスの変数とMax環境とのインターフェイスとなるもので、特にわずらわしい変更を伴わずに導入できます。

import com.cycling74.max.*;

public class autocount1 extends MaxObject {

	private int count=0;
	
	public autocount1() {
		declareAttribute("count");
	}

	public void bang() {
		count++;
		outlet(0, count);
	}
}

変数 count は整数で他の整数と同じように宣言されています。しかし、クラスのコンストラクタの中では、declareAttribute メソッドに変数名が文字列(String)として与えられています。このメソッドは count をアトリビュートとして登録するもので、これにより自動的にいくつかの非常に便利な機能が与えられます。

アトリビュートに与えられる主な機能は、Max パッチの中での変数の値のセット(設定)とゲット(取得)を、自動的に、背後からサポートするものです。Max ユーザが "count 8"というメッセージを autocount1 オブジェクトに送信すると、count の値に 8 がセットされます。その後、ユーザがこのオブジェクトに "get count" というメッセージを送信すると、オブジェクトの右アウトレットから 8 が出力されます。

場合によっては、アトリビュートに対して独自の set メソッドや get メソッドを提供したいことがあるかもしれません。例えば、入力される値を特定の範囲に限定したい場合、あるいは、変数の値以外に追加情報を提供するような get メソッドを提供したい場合などが挙げられます。これを行なうためには、declareAttributes(String, String, String) を呼び出す必要があります。この第2、第3のString はそれぞれ、ゲッターメソッドとセッターメソッドの名前でなければなりません。このどちらかに null を渡すと、デフォルトの自動的なゲットやセットの実装が有効になります。有効なセッターメソッドは void 型を返さなければなりません。また、有効なゲッターメソッドでは、 Atom[] を返さなければなりません。。

アトリビュートが持っている他の便利な機能の主なものには、ユーザがインスタンス化アーギュメントから set メソッドにアクセスできるということがあります。新しい autocount1オブジェクトのインスタンス化アーギュメントに"@count"を含めると、それに続く値が、コンストラクタメソッドの実行が完了した後に count の set メソッドに渡されます。セッターメソッドはコンストラクタの実行時に呼び出されることが可能であるため、コンストラクタの場合と同様に、セッターでオブジェクトのアウトレットからデータを送信してはいけません。

このクラス自体はかなり基本的なもので、counter オブジェクトのような動作を行ないます。autocount1 は bang を受信するたびに増加する整数値を出力します。 autocount2 では、より興味深いことがらを紹介します。

 

実行例: