プロジェクト、パッケージ、クラス

ここまでに、「プロジェクト」「パッケージ」「クラス」という3つの用語を使いました。これらの用語について簡単に紹介します。

図: プロジェクト、パッケージ、クラス

クラス

クラスはJavaプログラムの単位 で、これから「プログラムを作成してください」といった時にはこのクラスというものを作成することになります。別々のプログラム を1つのクラスに詰め込むことはできません。プログラムには「void start() {…}」というもの(「メソッド」という)を書いてもらいましたが、これ は1つのクラスにつき1つしか作成できません。「void start() {…}」を2つ書いてしまうと、コンピュータがプログラムを実行しようとする際にどちらを処理すればよいのかがわからなくなってしまい、実行できません。

先ほど作ったクラスは「First」だったと思いますが、「Second」という別のクラス(First以外の名前 なら何でもかまいません)を作成すれば、そこに「void start() {…}」というプログラムの断片を書けます。このようにクラスを分けることで、複数のプログラムをIDEで同時に作成しておくことができるようになります。

なお、クラスは本来、Javaの非常に複雑な機能です。このコースの後半ではクラスを使ってプログラムから複雑なデータを利用したり、さらに後のコースでは「オブジェクト指向プログラミング」という技法を使うためにクラスを利用したりします。いまのところは、「クラスはプログラムを書く単位」という程度の認識でよいと思います。

パッケージ

パッケージはいくつかのクラスをグループとしてまとめるための仕組みで、このコースでは週ごとに別々のパッケージを作成し、そこの中にクラスを作成することになります。このパッケージを使用する利点は、「パッケージが違えば同じ名前のクラスを使える」という点や、「目的が異なるクラスは別のパッケージに分けた方が分類しやすい」という点です。たとえば、今回は「j1.lesson01」というパッケージに「First」という名前のクラスを作成したと思います。次回に「j1.lesson02」というパッケージを作成すれば、そこに「First」という名前のクラスを再度作成することができます。また、それぞれの「First」という名前のクラスをどの週に作成したのかが一目でわかるようになります。

また、パッケージにはもう1つ利点があって、「パッケージ単位でアクセス制御ができる」という特徴があります(実はこちらが本命です)。大きなプログラムを作成する際に「別のパッケージからクラスを触らせない」などの制御や、プログラムを実行する際に「パッケージに余計なクラスを追加させない」などの制御を行えます。パッケージを意味のある機能で分割しておくと、余所の機能から自分の機能をむやみに操作されたりして、プログラムの挙動がおかしくなるなどの問題を未然に防げるようになります。

プロジェクト

プロジェクトはJavaの仕組みではなくEclipseの仕組みで、「ソフトウェアをビルド(コンピュータ上で実行可能な形式に変換すること)する単位」のために作られます。1つのプロジェクトには複数のパッケージを作成でき、それらに含まれている全てのクラスは1つのソフトウェアを構成するプログラム片の集まりとしてまとめてビルドされます。

しかし、このように書いてもあまり腑に落ちないかもしれません。現在は1つのクラスで1つのプログラムになるように進めているため、ビルドの単位というものは気にしなくても問題ありません。いくつものクラスが連携して動作するような大きなプログラムを書くようになったら、このプロジェクトというのが非常に重要な役割を果たすようになります。それまでは、「パッケージの入れもの」くらいの認識でかまいません。

なお、このコースでは単一のプロジェクトで作業を進めます。今後、講義と無関係のプログラムを書く際には、別のプロジェクトを作成してそこで作業を進めた方がいいかもしれません。そうしておけば、講義で作成したプログラムにエラーがあったりしても、別のプロジェクトで作成しているプログラムは問題なく実行できます。