パパの勉強部屋

勉強の記録をつけています。Java、ネットワーク、Excel、etc.

スッキリわかるJava入門 第6章 複数のクラスを用いた開発①

●ソースファイルを分割する
 ・複数のソースファイルに分けて開発する=複数のクラスに分けて開発する。
 ・ファイルごとに開発を分担し、それぞれが並行して開発を進められる。(=分業しやすい)
 ・1つのプログラムを複数の部品に分けることを部品化という。
 ・別クラスのメソッドを呼び出すときの記述。
  ・int total = CalcLogic.tasu(a,b); ⇒CalcLogicクラスのtasu()
  ・int delta = CalcLogic.hiku(a,b); ⇒CalcLogicクラスのhiku()

●複数クラスのコンパイル
 ・javacコマンドで複数のソースファイルを指定する。
  > javac Calc.java CalcLogic.java … Calc.class CalcLogic.class
  ⇒それぞれのソースファイルに対応したクラスファイルが作成される。

Javaプログラムの完成品
 ・Javaプログラムの完成品は、複数のクラスファイルの集合体。
 ・誰かに配布する際は、すべてのクラスファイルを渡す必要がある。
  ⇒上の例の場合、Calc.class CalcLogic.classを渡す。
 ・JVMは起動時に指定されたクラスの中にあるmainメソッドを呼び出してプログラムの実行を開始する。
 ・実行する場合は「渡された複数のクラスファイルのうち、mainメソッドが含まれているクラスの名前」を指定する必要がある。

●JARファイルとは?
 ・プログラムの完成品が複数のクラスファイルだと、メールで送る際などに不便。
 ・Javaでは「複数のクラスファイルを1つにまとめるファイル形式」としてJAR(Java ARchive)が定められている。
 ・JARファイルはZIPファイルととてもよく似たアーカイブファイルであり、JDKに付属するjarコマンドでも作成することができる。

●パッケージを利用する
 ・各クラスをパッケージ(package)というグループに所属させて、分類・管理する仕組み。
 ・クラスがあるソースコードの先頭にpackage文を記述する。
  package 所属させたいパッケージ名;
  (ただし package 文はソースコードの先頭に記述する)
 ・アルファベットは小文字を使う事が一般的。
 ・「calcapp.main」や「calcapp.logics」のようにドットで区切ったパッケージ名も多く用いられる。
 ・「calcapp.main」や「calcapp.logics」のように、パッケージ名の一部が同じであっても、それぞれのパッケージに関連性はない。
  ⇒パッケージに親子関係・階層関係は無い。
 ・どのパッケージにも所属していないことを「無名パッケージに属している」または「デフォルトパッケージに属している」と表現する。
 ・別パッケージに属しているクラスを利用する場合、所属パッケージ名を添えたクラス名を利用する。
  ・int total = Calcapp.logics.CalcLogic.tasu(a,b);
  ・int delta = Calcapp.logics.CalcLogic.hiku(a,b);
 ・あるクラスから別パッケージのクラスを利用する場合、「パッケージ名を頭につけた完全なクラス名」を使う必要がある。
  ⇒完全はクラス名のことを、完全限定クラス名(full qualified class name)、または略してFQCNと言う。

名前空間
 ・パッケージを使うもう一つのメリット
  ⇒自分が作るクラスに対して、開発者が自由な名前を付けられるようにすること
 ・大規模な開発になると、複数の開発者が偶然「同じクラス名を使ってしまう」可能性が出てくる。
  ⇒内容が異なる別々のクラスで同じ名前を取り合ってしまうことを「名前の衝突」と言う。
 ・Javaではパッケージが異なれば、同じクラス名を使ってよい事になっている。
  ⇒クラス名が同一でも、パッケージ名が異なれば完全限定クラス名(FQCN)が異なるので両者は区別できる。
   パッケージを使う事によって、それぞれのパッケージ内では自由にクラス名を付ける事が可能になる。
 ・パッケージ名が衝突すると、これらの前提はすべて崩れてしまう。
 ・推奨されるパッケージ名
  ⇒パッケージ名は「保有するインターネットドメインを前後逆順にしたもの」から始める。
 ・例)foo.example.comというインターネットドメインを取得している企業
  ⇒com.example.fooで始まるパッケージ名を使う。
   インターネットドメインは世界に一つだけなので、パッケージ名が衝突する事はない。
   com.example.fooより後は、企業や組織内部でパッケージ名が衝突しないように調整すればよい。
 ・import文を使うことで、FQCN入力のめんどうさを軽減できる。
  import パッケージ名.クラス名;
  ※import文はソースコードの先頭に、ただしpackage文より後に記述する。
  ⇒頻繁に利用するクラスはimport文を使ってインポートしておくことによって、毎回完全限定クラス名を書く必要がなくなる。
 ・calcapp.logicsパッケージに所属するすべてのクラスをインポートしたい場合
  import calcapp.logics.*;
  ⇒ただし「calcapp.*;」という記述では、calcapp.mainとcalcapp.logicsに所属するすべてのクラスを一度にインポートできないことに注意。
   この指定では「calcappパッケージに所属する全クラス」がインポートされる。

●import宣言は、あくまで「めんどうさ軽減機能」
 ・Javaでは、一切の宣言をすることなく、JVMが扱えるすべてのクラスを常時使うことができる。
 ・ただし、利用に際しては必ずFQCNを利用しなければならず、import文はあくまでFQCNの記述を省略できるだけ。
  ⇒めんどうを軽減するため(開発者がラクをするため)の構文にすぎない。
 ・importしたからといって利用できるクラスやメソッドが増えたり、プログラムから利用できる機能が増えたりする事はない。