JavaFX Scriptプログラム言語を学ぼう

レッスン10:パッケージ


パッケージはあなたのクラスとそれらの関連性を体系付けて構造化してくれます。 このレッスンはパッケージの設定と使い方をあなたに一つずつ説明します。

この時点で、あなたにはJavaFXプログラム言語の基礎のしっかりとした理解があります。 しかし、ソースファイルの位置は少々まとまりがなくなりそうです。 (今までたぶんあなたは一つのディレクトリをたくさんの無関係な例で一杯にしています。) 私達は、パッケージにコードを配置することにより、全体的な体系化を改善できます。

パッケージは、あなたのコードを機能性に従ってグルーピングすることを可能にします。 それらは、あたたのコードにユニークな名前空間を与えてもくれます。 私達はここからAddressクラスを特定なパッケージに配置する例を段階的に調べて行きます。

ステップ1:パッケージ名を選ぶ


コードを変更する前に、まず私達は作ろうとしているパッケージの名前を選ばなければなりません。 私達のAddressクラスはアドレスブックアプリケーション(仮名)で使うつもりなので、 パッケージ名として"addressbook"を使います。

ステップ2:ディレクトリを作る


次に、私達はファイルシステム上にaddressbookディレクトリを作らなければなりません。 このディレクトリは、addressbookパッケージに属するように設計されたあらゆるクラスの .fxソースファイルを中に収めます。 どこでも自由にこのディレクトリを作ってください。 ここでの例として/home/demo/addressbookを使います。 しかし、スクリプトはパッケージ名と一致するディレクトリに存在しなければなりません。 このケースではaddressbookです。

ステップ3:パッケージ宣言を追加する


さてこれから、addressbookディレクトリに行ってAddress.fxソースファイルを作ります。 以下のソースコードを貼り付けてください。 一行目がパッケージ宣言を与えていて、このクラスがaddressbookパッケージに属することを宣言しています。

package addressbook;

class Address {
     var street: String;
     var city: String;
     var state: String;
     var zip: String;
}

パッケージ宣言があるとき、それはソースファイルの一行目になければならないことに注意してください。 ソースファイルごとに一つのパッケージ宣言だけが許されています。

ステップ4:アクセス修飾子を追加する


次に、私達はpublicキーワードをAddressクラスとその変数に追加しなければなりません。

package addressbook;

public class Address {
     public var street: String;
     public var city: String;
     public var state: String;
     public var zip: String;
}

このキーワードは五つの利用可能なアクセス修飾子の内の一つです。 私達は次のレッスンでアクセス修飾子を研究します。 今のところは、publicがこのコードを他のクラスとスクリプトからアクセスできるようにするということだけ 知っていてください。

ステップ5:ソースをコンパイルする


まだaddressbookディレクトリにいるうちに、このソースをjavafxc Address.fxコマンドで普通にコンパイルします。 (大規模なソフトウェアプロジェクトでは、複数のパッケージのコードをビルドするもっと洗練された方法があります。 しかし、このディレクトリのソースをコンパイルすればこの例は正常に動きます。) コンパイル後、このディレクトリは生成された.classファイルを含みます。

ステップ6:クラスを使う


私達は今、修正したAddressクラスをテストする準備ができています。 しかし、まず親ディレクトリの/home/demoに戻ります。 ここでシンプルなスクリプトpackagetest.fxを作ります。これはaddressbookパッケージの使い方をテストします。

私達がこのクラスにアクセスする二つの方法があります。

// アプローチ #1

addressbook.Address {
     street: "1 Main Street";
     city: "Santa Clara";
     state: "CA";
     zip: "95050";
}
アプローチ #1は完全修飾クラス名(addressbook.Address)を使ってオブジェクトを生成します。 他の方法と比べると、このアプローチはとてもわずらわしいと(大きなスクリプトでは特に) 感じるかも知れません。しかし、今はまだ、この存在を知っているべきです。

// アプローチ #2
import addressbook.Address;

Address {
     street: "1 Main Street";
     city: "Santa Clara";
     state: "CA";
     zip: "95050";
}

アプローチ #2はimportキーワードを使います。これはスクリプトの中ならどこでも 短い名前(Address)が使えるようにします。 このアプローチは大きなプロブグラムが自己文書化されるため、推奨されます。 ひと目で各々のクラスが属するパッケージが何か見分けることができます。

// アプローチ #3

import addressbook.*;

Address {
     street: "1 Main Street";
     city: "Santa Clara";
     state: "CA";
     zip: "95050";
}

アプローチ #3はaddressbookパッケージに定義されているpublicクラスの全てをインポートする ワイルドカードの"*"を使っています。 この例の中には、こうする利点はあまりありませんが、もしパッケージが多くの数のクラスを 含んでいたら、あなたはすべてを一度にインポートするために、このテクニックを使えます。 何人かのプログラマはこれをいい加減と感じていて、その否定的な側面は、 このアプローチでは特に複数のパッケージが入り組んでいるときに、 与えられたクラスがどのパッケージにあるのかを見分けるのがより困難になるということです。


Home