パッケージの概要
パッケージと言う機能は、
複数人での開発となった場合に威力を発揮する機能です。
プログラムの規模が大きくなると、
複数人での開発スタイルとなりますが、
その場合、同じクラス名を使うとエラーとなってしまいます。
それゆえに、クラス名が衝突しない様に、
気を遣う事となります。
プログラマ自身が気をつけなければならないため、
独自の管理体制を持つ必要がありました。
このクラス名衝突問題の管理を
Java言語の中に取り込んだのがパッケージです。
パッケージには、好きな名前をつける事ができ、
そのパッケージがフォルダ(ディレクトリ)機能を提供します。
1つのフォルダの中には同じ名前のファイルを格納できませんが、
異なるフォルダ間であれば、同じファイル名があっても大丈夫です。
これと同じように、
1つのプログラムの中に同じクラス名があってはいけません。
しかし、異なるパッケージ間であれば、
同じクラス名があっても大丈夫です。
と言う事です。
なんとなくイメージがつかめたでしょうか?
パッケージの使い方
パッケージは、フォルダ機能を提供していますが、
手作業でフォルダを作る必要があります。
(プログラム統合開発環境 Eclipse ではパッケージを作る機能があります。)
例えば pkg_hello と言うパッケージを作るとしたら、
パッケージ名と同じ pkg_hello と言うフォルダを作ります。
そして、その pkg_hello パッケージ内に
Chelloクラスを記述したい場合、
pkg_helloフォルダ内に
Chelloクラスを記述したソースファイルを格納します。
パッケージの記述例
package pkg_hello;
public class Chello {
void show() {
System.out.println("Hello");
}
}
先頭行でパッケージ指定しています。
この記述は、このファイルは pkg_helloパッケージに属しています。
と言う意味になります。
そして、もう1つ別のパッケージと
そのパッケージ内のクラスも作ってみます。
package pkg_main;
public class Cmain {
public static void main(String[] args) {
pkg_hello.Chello obj = new pkg_hello.Chello();
obj.show();
}
}
こちらは、pkg_mainパッケージに属するCmainクラスです。
このpkg_mainパッケージ内から
別のパッケージ内のクラスを指定するには、
パッケージ名.クラス名 と指定する必要があります。
また、パッケージ間でクラスを使う場合は、
クラス修飾子としてpublicを指定しなければなりません。
何も指定しない場合は、
別パッケージからそのクラスを使えません。
(アクセス不可)
同じパッケージ内に限りアクセスできます。
この2つのパッケージを用いた
プログラムフォルダ構成図は以下のようになります。
pkg_hello(フォルダ) └Chello.java(ソースファイル) pkg_main(フォルダ) └Cmain.java(ソースファイル) |
Javaには以下のようなルールがあるため、
上記のような構成にしてあります。
・1つのファイルには、1つのpublic指定クラスしか記述できない。 ・public指定されたクラスがあるファイルのファイル名は、 ”public指定したクラス名.java” と、しなければならない。 |
public指定されていないクラスが記述されたファイルのファイル名は
自由に決めてOKです。
しかし、クラス名をファイル名とすると分かりやすくなります。
1ファイルに1クラスの記述をするようにするとキレイな構成になります。
パッケージのネスト
パッケージ内にパッケージを作る事もできます。
これは、フォルダ内にフォルダを作る。
と言う意味と同じです。
もちろん、それぞれのパッケージ内のクラスは別モノとして扱われます。
使用例
パッケージ(フォルダ)構成図
pkg_A(フォルダ) └pkg_B(フォルダ) └Chello.java(ソースファイル) pkg_main(フォルダ) └Cmain.java(ソースファイル) |
ファイル名:Chello.java
package pkg_A.pkg_B;
public class Chello {
void show() {
System.out.println("Hello");
}
}
ファイル名:Cmain.java
package pkg_main;
public class Cmain {
public static void main(String[] args) {
pkg_A.pkg_B.Chello obj = new pkg_A.pkg_B.Chello();
obj.show();
}
}
このプログラムは、
パッケージ pkg_A の中にパッケージ pkg_B を入れた例です。
パッケージが1階層の時と同じようにドットを使って
パッケージ名.パッケージ名.クラス名 のように指定します
パッケージの活用例
パッケージ機能の活用例としては、
佐藤君、鈴木君、田中君の3人で1つの
アプリケーション開発しているとしたら、
それぞれに固有のパッケージを担当させる。
例えば、佐藤君が作る全てプログラムは、
パッケージ:satou内で作るものとする。
以下、鈴木君と田中君も同じようにすれば、
それぞれが作ったプログラムを合わせた時に、
クラス名の衝突がない事がパッケージ機能によって保証されているので、
そのような事を気をする必要がなくなります。
以上、パッケージについての説明でした。