
Java超|13章のまとめ
クラスの置き場所を整えると、Javaの世界は大きくなっても迷子にならない。13章は、悟空たちの戦士本部を整理するように、ファイル・パッケージ・importでクラスを育てやすくする章です。
13章では、Javaのクラスをただ作るだけでなく、どこに置き、どう分類し、どう使いやすくするかを学びました。
小さなプログラムなら、1つのファイルの中に複数のクラスを書いても、それほど困ることはありません。
しかし、クラスが増えてくると、1つの場所にすべてを書くだけでは、だんだん見通しが悪くなります。
悟空、ベジータ、ピッコロ、悟飯、クリリン、ブルマなど、登場人物や役割が増えていくほど、戦士情報、任務情報、通信処理、道具管理、戦闘記録をきちんと整理する必要があります。
Javaでも同じです。
クラスが増えてきたら、ファイル分割、パッケージ、import、サブパッケージ、クラスライブラリ、モジュールを使って整理します。
| 13章で学ぶこと | 役割 |
|---|---|
| ファイル分割 | クラスごとにファイルを分けて管理する |
| パッケージ | 関連するクラスをグループ化する |
| 同じパッケージの利用 | 同じグループ内のクラスを自然に使う |
| 異なるパッケージの利用 | public と パッケージ名.クラス名 で別グループのクラスを使う |
| import | 別パッケージのクラスを短い名前で使いやすくする |
| サブパッケージ | パッケージを階層化してさらに整理する |
| クラスライブラリ | Java標準クラスもパッケージで整理されていることを理解する |
| モジュール | パッケージより上位の整理単位を知る |
ドラゴンボール風にたとえると、13章は、戦士本部に増えていく巻物や戦士情報を、ただ積み上げるのではなく、棚・部署・分類ごとに整理していく章です。
悟空の戦士情報、ベジータの戦闘記録、ピッコロの修行計画、ブルマの通信装置、悟飯の学習記録が全部1本の巻物に書かれていたら、必要な情報を探すだけで大変です。
そこで、巻物を分けます。
同じ役割の巻物を同じ棚にまとめます。
別の棚の巻物を使うときは住所を指定します。
よく使う巻物は import で呼びやすくします。
Javaのクラス整理も、これと同じ考え方です。
13章で学んだことの全体像
13章は、新しい文法を大量に覚える章というより、クラスをどう整理し、どう使いやすくするかを学ぶ章です。
Javaのプログラムは、クラスという部品を組み合わせて作ります。
しかし、部品が増えれば増えるほど、どこに何があるのかを整理する力が必要になります。
ドラゴンボールの世界観に置きかえると、次のようになります。
| Javaの考え方 | ドラゴンボール風のイメージ |
|---|---|
| クラス | 悟空、ベジータ、任務、技、装備などを表す巻物 |
| ファイル | 1つの巻物 |
| パッケージ | 巻物を分類して置く棚 |
| サブパッケージ | 棚の中のさらに細かい分類 |
| import | 別の棚の巻物を使うための案内札 |
| public | 他の棚からも使える公開巻物 |
| モジュール | 複数の棚をまとめる大きな管理区画 |
13章の流れを整理すると、次のようになります。
| 段階 | 学んだ内容 | 何ができるようになるか |
|---|---|---|
| 1 | クラスをファイルに分ける | クラスごとの役割を見やすくできる |
| 2 | パッケージでまとめる | 関連クラスをグループ化できる |
| 3 | 同じパッケージのクラスを使う | 同じ仲間のクラスを自然に連携できる |
| 4 | 異なるパッケージのクラスを使う | 別グループのクラスを安全に利用できる |
| 5 | import を使う | 別パッケージのクラスを短く書ける |
| 6 | サブパッケージを使う | パッケージを階層的に整理できる |
| 7 | クラスライブラリを見る | 標準クラスもパッケージで整理されていると分かる |
| 8 | モジュールを知る | パッケージより大きな整理単位を理解できる |
この流れを押さえると、13章の内容はバラバラな知識ではなく、大きなJavaプログラムを整理するための一連の考え方として見えてきます。
クラスをファイルに分ける意味
クラスが増えてきたとき、最初に大切になるのが ファイル分割 です。
1つのファイルに複数のクラスを書くこともできます。
しかし、プログラムが大きくなると、1つのファイルに全部を詰め込む方法では読みにくくなります。
たとえば、ドラゴンボール風のプログラムを考えてみます。
| クラス | 役割 |
|---|---|
| GokuWarrior | 悟空の戦士情報を表す |
| VegetaWarrior | ベジータの戦士情報を表す |
| KiTechnique | 気の技を表す |
| BattleMission | 任務情報を表す |
| CapsuleItem | カプセル道具を表す |
| BattleManager | 戦闘の流れを管理する |
これらをすべて1つのファイルに書くと、どこに何があるのか分かりにくくなります。
そこで、クラスごとにファイルを分けます。
| ファイル | 書くクラス |
|---|---|
| GokuWarrior.java | GokuWarrior クラス |
| VegetaWarrior.java | VegetaWarrior クラス |
| KiTechnique.java | KiTechnique クラス |
| BattleMission.java | BattleMission クラス |
| CapsuleItem.java | CapsuleItem クラス |
| BattleManager.java | BattleManager クラス |
ドラゴンボール風にたとえると、悟空の戦士名簿、ベジータの戦闘記録、気の技の巻物、任務指令書、カプセル道具台帳、戦闘記録を別々の巻物に分けるようなものです。
| 分けない場合 | 分けた場合 |
|---|---|
| すべてが1つの巨大な巻物に入る | 役割ごとの巻物に分かれる |
| 必要なクラスを探しにくい | 必要なファイルを開きやすい |
| 修正箇所が見つかりにくい | 修正対象がはっきりする |
| 複数人で作業しにくい | 担当を分けやすい |
ファイル分割は、単にファイル数を増やすことではありません。
クラスごとの責任をはっきりさせ、読みやすく、修正しやすくするための工夫です。
図:クラスをファイルとパッケージで整理する

この図が示していること
この図では、クラスが増えたときに、1つの巨大なファイルへ詰め込むのではなく、クラスごとにファイルを分け、さらにパッケージで整理する流れを表しています。
左側では、複数のクラスが1つの巨大な巻物に入っています。
この状態では、必要なクラスを探しにくく、修正したい場所も見つけにくくなります。
右側では、クラスごとにファイルを分け、さらに pa.character、pa.battle、pa.item、pa.mission のように分類しています。
| 要素 | 意味 |
|---|---|
| ファイル分割 | クラスごとに書く場所を分ける |
| パッケージ | 関連するクラスをグループ化する |
| サブパッケージ | 役割ごとにさらに細かく分類する |
この図から分かることは、Javaのクラス整理は、ファイルとパッケージを組み合わせることで見通しがよくなるということです。
パッケージはクラスの所属棚
ファイルを分けると、クラスごとの役割は見えやすくなります。
しかし、クラスがさらに増えてくると、ファイルを分けるだけではまだ足りません。
関連するクラスをグループとしてまとめる必要があります。
そこで使うのが パッケージ です。
パッケージは、クラスを分類するためのしくみです。
ドラゴンボール風にたとえると、パッケージは戦士本部の巻物棚です。
| パッケージ | 入れるクラスの例 |
|---|---|
| pa | 学習用の基本クラス |
| pb | 実行確認用のクラス |
| pc | 他から利用される共通クラス |
| pa.battle | 戦闘処理関連のクラス |
| pa.item | カプセル道具や装備関連のクラス |
クラス名だけでは、どの役割のクラスなのか分かりにくい場合があります。
しかし、パッケージ名まで含めると、そのクラスの所属がはっきりします。
| 指定 | 意味 |
|---|---|
| GokuWarrior | クラス名だけ |
| pa.GokuWarrior | pa パッケージの GokuWarrior |
| pc.GokuWarrior | pc パッケージの GokuWarrior |
| pa.sub.GokuWarrior | pa.sub パッケージの GokuWarrior |
このように、パッケージはクラスの住所のような役割を持ちます。
ファイルとパッケージの違い
ここで、ファイルとパッケージの違いを整理しておきましょう。
ファイルは、クラスを書く場所です。
パッケージは、クラスの所属グループです。
| 考え方 | 何を整理するか | 例 |
|---|---|---|
| ファイル | クラスを書く単位 | GokuWarrior.java |
| パッケージ | クラスを分類する単位 | package pa; |
| フォルダ | パッケージに対応する保存場所 | pa フォルダ |
ドラゴンボール風にたとえると、ファイルは1本の巻物です。
パッケージは、その巻物を置く棚です。
GokuWarrior.java という巻物を、pa という棚に置くなら、ファイルの先頭に次のように書きます。
package pa;package pa; と書いたファイルは、pa パッケージに属します。
このとき、基本的には pa フォルダの中に保存します。

つまり、package 文とフォルダ構成は対応します。
| package 文 | 保存場所 |
|---|---|
| package pa; | pa フォルダ |
| package pb; | pb フォルダ |
| package pa.sub; | pa\sub フォルダ |
この対応を意識すると、パッケージの理解がかなり楽になります。
同じパッケージのクラスは連携しやすい
同じパッケージに属するクラス同士は、比較的自然に連携できます。
たとえば、pa パッケージに GokuWarrior クラスと BattleStart クラスがあるとします。

どちらのファイルにも、先頭に次のように書きます。
package pa;
すると、GokuWarrior クラスも BattleStart クラスも、同じ pa パッケージの仲間になります。
| ファイル | クラス | 所属 |
|---|---|---|
| GokuWarrior.java | GokuWarrior | pa |
| BattleStart.java | BattleStart | pa |
この場合、BattleStart から GokuWarrior を使うとき、同じパッケージ内なので次のように書きやすくなります。
GokuWarrior warrior1 = new GokuWarrior();ドラゴンボール風にたとえると、同じ棚にある悟空の戦士名簿と出撃指令書は、同じ本部資料として扱いやすいということです。
同じパッケージのクラスは、同じグループの仲間として連携しやすい。
これがパッケージの基本です。
異なるパッケージのクラスは住所を示して使う
同じパッケージのクラスは使いやすいですが、異なるパッケージのクラスを使う場合は注意が必要です。
たとえば、pb パッケージの BattleStart クラスから、pc パッケージの GokuWarrior クラスを使うとします。
| クラス | 所属パッケージ |
|---|---|
| BattleStart | pb |
| GokuWarrior | pc |
この場合、BattleStart の中で GokuWarrior とだけ書いても、Javaはまず pb パッケージの中を探そうとします。
しかし、GokuWarrior は pc パッケージにあるため、見つかりません。
そこで、パッケージ名を含めて指定します。
pc.GokuWarrior warrior1 = new pc.GokuWarrior();これは、pc パッケージにある GokuWarrior クラスを使う、という意味です。
| 書き方 | 意味 |
|---|---|
| GokuWarrior | 同じパッケージ内の GokuWarrior として探しやすい |
| pc.GokuWarrior | pc パッケージの GokuWarrior として指定する |
ドラゴンボール風にたとえると、pb の棚にある出撃指令書から、pc の棚にある悟空の戦士名簿を使うようなものです。
別の棚にある巻物を使うなら、どの棚のどの巻物なのかを住所つきで示す必要があります。
public は別パッケージから使えるようにする公開札
異なるパッケージのクラスを使うときは、利用される側のクラスが public であることも大切です。
たとえば、pc パッケージの GokuWarrior クラスを、pb パッケージから使いたいなら、GokuWarrior クラスは public にします。
package pc;
public class GokuWarrior
{
}public が付いているクラスは、別パッケージからも利用できます。
| クラスの指定 | 利用できる範囲 |
|---|---|
| class GokuWarrior | 基本的に同じパッケージ内 |
| public class GokuWarrior | 別パッケージからも利用可能 |
ドラゴンボール風にたとえると、public は他の部署からも閲覧できる公開巻物にする札です。
ただし、クラスが public でも、コンストラクタやメソッドが public でなければ、別パッケージから十分に使えない場合があります。
| 要素 | 別パッケージから使いたい場合 |
|---|---|
| クラス | public が必要 |
| コンストラクタ | public が必要 |
| メソッド | public が必要 |
| フィールド | 通常は private にして直接触らせない |
たとえば、次のような構成です。
package pc;
public class GokuWarrior
{
private String name;
public GokuWarrior()
{
name = "悟空";
}
public void show()
{
System.out.println(name);
}
}この場合、別パッケージから GokuWarrior オブジェクトを作成し、show() を呼び出せます。
importは別パッケージのクラスを呼びやすくする案内札
異なるパッケージのクラスを使うとき、毎回 pc.GokuWarrior と書くこともできます。
しかし、何度も使う場合は少し長くなります。
そこで使うのが import です。
import pc.GokuWarrior;このように書いておくと、そのファイルの中では GokuWarrior と短く書けるようになります。
| import なし | import あり |
|---|---|
| pc.GokuWarrior warrior1 = new pc.GokuWarrior(); | GokuWarrior warrior1 = new GokuWarrior(); |
import は、クラスの所属を変えるものではありません。
GokuWarrior は import しても pc パッケージのクラスのままです。
import は、今書いているファイルの中で短い名前を使えるようにするための宣言です。
ドラゴンボール風にたとえると、pc の棚にある GokuWarrior の巻物を、pb の任務指令書から使うために、最初に案内札を出しておくようなものです。
| 文 | 役割 |
|---|---|
| package pb; | 自分の所属を pb にする |
| import pc.GokuWarrior; | pc の GokuWarrior を使いやすくする |
| GokuWarrior warrior1 = new GokuWarrior(); | import 後の短い書き方 |
package と import はどちらもファイルの先頭付近に書きますが、役割は違います。
| 文 | 意味 |
|---|---|
| package 文 | 自分のクラスの所属を決める |
| import 文 | 使いたい別パッケージのクラスを指定する |
図:同じパッケージと異なるパッケージの違い

この図が示していること
この図では、同じパッケージのクラスを使う場合と、異なるパッケージのクラスを使う場合を比較しています。
左側では、GokuWarrior.java と BattleStart.java がどちらも pa パッケージに属しています。
この場合、BattleStart から GokuWarrior をクラス名だけで使いやすくなります。
右側では、BattleStart.java が pb パッケージにあり、GokuWarrior.java が pc パッケージにあります。
この場合、GokuWarrior クラスを public にして、使う側では pc.GokuWarrior のように住所を明示するか、import pc.GokuWarrior; を使う必要があります。
| 比較 | 同じパッケージ | 異なるパッケージ |
|---|---|---|
| クラスの関係 | 同じ棚の仲間 | 別の棚のクラス |
| 書き方 | GokuWarrior | pc.GokuWarrior |
| public | 場合による | 外部利用には重要 |
| import | 基本不要 | 短く書くために使う |
この図から分かることは、同じパッケージか異なるパッケージかによって、クラスの使い方が変わるということです。
サブパッケージでさらに細かく整理する
クラスがさらに増えてくると、1つのパッケージだけでは整理しにくくなります。
そこで使うのが サブパッケージ です。
たとえば、pa の下に sub という分類を作ると、次のようになります。
package pa.sub;この場合、フォルダ構成は次のようになります。
C:\Java\13
└─ pa
└─ sub
└─ BattleTool.java
| package 文 | 保存場所 | 実行時の指定 |
|---|---|---|
| package pa; | pa フォルダ | java pa.BattleStart |
| package pa.sub; | pa\sub フォルダ | java pa.sub.BattleTool |
ドラゴンボール風にたとえると、pa は本部の大きな棚、pa.sub はその中にある補助任務用の小さな棚です。
ただし、ここで大切なのは、pa と pa.sub は別パッケージ だという点です。
| パッケージ | Javaでの扱い |
|---|---|
| pa | 1つの独立したパッケージ |
| pa.sub | pa とは別の独立したパッケージ |
名前はつながっていますが、Javaでは別パッケージとして扱います。
そのため、アクセス修飾子を考えるときにも、pa と pa.sub は同じパッケージではない点に注意が必要です。
パッケージは名前空間として働く
13章では、パッケージが 名前空間 として働くことも大切でした。
名前空間とは、同じ名前がぶつからないように、所属を含めて名前を管理する仕組みです。
たとえば、GokuWarrior というクラス名が複数あっても、パッケージが違えば別クラスとして扱えます。
| 完全な名前 | 意味 |
|---|---|
| pa.GokuWarrior | pa パッケージの GokuWarrior |
| pc.GokuWarrior | pc パッケージの GokuWarrior |
| pa.sub.GokuWarrior | pa.sub パッケージの GokuWarrior |
ドラゴンボール風にたとえると、同じ GokuWarrior という名前の巻物があっても、どの棚にある巻物なのかまで指定すれば取り違えを防げます。
大きな開発では、同じような名前のクラスが出てくることがあります。
そのとき、パッケージ名まで含めて管理できると、名前の衝突を避けやすくなります。
クラスライブラリもパッケージで整理されている
Javaが最初から用意しているクラスライブラリも、パッケージで整理されています。
自分で作るクラスだけでなく、標準クラスも同じようにパッケージに所属しています。
| パッケージ名 | 主な役割 |
|---|---|
| java.lang | 基本機能 |
| java.io | 入出力 |
| java.net | ネットワーク |
| java.util | 便利な補助機能 |
| java.math | 数値計算 |
| java.text | 書式や国際化 |
| java.awt | 画面部品 |
| java.awt.event | イベント処理 |
| java.awt.image | 画像処理関連 |
たとえば、String は java.lang に属しています。
BufferedReader は java.io に属しています。
ArrayList は java.util に属しています。
Javaの標準クラスライブラリは、ドラゴンボール風に言えば、戦士本部に最初から用意されている巨大な巻物棚です。
| Javaの標準パッケージ | ドラゴンボール風のイメージ |
|---|---|
| java.lang | 基本道具棚 |
| java.io | 記録の読み書き棚 |
| java.net | 遠方通信棚 |
| java.util | 便利道具棚 |
| java.math | 精密計算棚 |
| java.awt | 画面部品棚 |
標準クラスライブラリを使いこなすには、どのパッケージにどんな機能があるのかを意識することが大切です。
java.langは特別にimport不要
標準クラスライブラリの中でも、java.lang は特別です。
java.lang に含まれるクラスは、通常 import を書かなくても使えます。
| クラス | 完全な名前 | import |
|---|---|---|
| String | java.lang.String | 通常不要 |
| Math | java.lang.Math | 通常不要 |
| System | java.lang.System | 通常不要 |
たとえば、次のように String や System をそのまま使えます。
String name = "悟空";
System.out.println(name);これは、String や System が特別な文法だからではありません。
java.lang パッケージが自動的に使えるようになっているからです。
| パッケージ | import の必要性 |
|---|---|
| java.lang | 通常不要 |
| java.lang 以外 | 基本的に必要 |
ドラゴンボール風にたとえると、java.lang は悟空やベジータが最初から持っている基本装備のようなものです。
任務のたびに申請しなくても、最初から使える状態になっています。
アスタリスクを使ったimport
同じパッケージから複数のクラスを使う場合、1つずつ import することもできます。
import java.io.BufferedReader;
import java.io.IOException;この書き方は、使うクラスがはっきりしていて分かりやすいです。
一方、同じパッケージのクラスをたくさん使う場合は、アスタリスクを使うこともできます。
import java.io.*;これは、java.io パッケージ内のクラスをまとめて使いやすくする書き方です。
| 書き方 | 意味 |
|---|---|
| import java.io.BufferedReader; | BufferedReader を使いやすくする |
| import java.io.IOException; | IOException を使いやすくする |
| import java.io.*; | java.io のクラスをまとめて使いやすくする |
ただし、アスタリスクは指定したパッケージの直下のクラスだけが対象です。
サブパッケージまでは含まれません。
アスタリスクではサブパッケージまで読み込まれない
ここはとても大切です。
たとえば、次のように書いたとします。
import java.awt.*;この場合、java.awt パッケージのクラスは使いやすくなります。
しかし、java.awt.image パッケージのクラスまでは含まれません。
java.awt.image のクラスを使いたい場合は、別に次のように書く必要があります。
import java.awt.image.*;表で整理すると、次のようになります。
| import 文 | 利用しやすくなる範囲 |
|---|---|
| import java.awt.*; | java.awt のクラス |
| import java.awt.image.*; | java.awt.image のクラス |
| import java.awt.*; だけ | java.awt.image は含まれない |
これは、java.awt と java.awt.image が別パッケージだからです。
以前学んだ pa と pa.sub の関係と同じです。
| 関係 | Javaでの扱い |
|---|---|
| pa と pa.sub | 別パッケージ |
| java.awt と java.awt.image | 別パッケージ |
ドラゴンボール風にたとえると、java.awt の棚をまとめて使う申請をしても、その中の別管理区画である java.awt.image の棚までは自動では使えません。
サンプルプログラム
ここでは、13章で学んだ内容のうち、import、標準クラスライブラリ、java.lang の使い方が見えるサンプルプログラムを確認します。
具体的なファイル名は Sample○.java の形式にはせず、通常のアプリ名として示します。
ファイル名:DragonTeamLibraryDemo.java
import java.util.ArrayList;
import java.util.Random;
class DragonTeamLibraryDemo
{
public static void main(String[] args)
{
ArrayList<String> warriors = new ArrayList<String>();
warriors.add("悟空");
warriors.add("ベジータ");
warriors.add("ピッコロ");
warriors.add("悟飯");
warriors.add("クリリン");
Random random = new Random();
int index = random.nextInt(warriors.size());
String selectedWarrior = warriors.get(index);
System.out.println("戦士名簿:" + warriors);
System.out.println("今回の出撃戦士は" + selectedWarrior + "です。");
int maxPower = Math.max(8000, 12000);
System.out.println("比較した最大戦闘力は" + maxPower + "です。");
}
}実行結果の例
Random を使っているため、出撃戦士の表示は実行するたびに変わる可能性があります。
戦士名簿:[悟空, ベジータ, ピッコロ, 悟飯, クリリン]
今回の出撃戦士はピッコロです。
比較した最大戦闘力は12000です。このサンプルでは、ArrayList と Random を使っています。
| クラス | 所属パッケージ | 役割 |
|---|---|---|
| ArrayList | java.util | 複数のデータをリストとして管理する |
| Random | java.util | ランダムな値を作る |
| String | java.lang | 文字列を扱う |
| Math | java.lang | 数学的な計算をする |
| System | java.lang | 標準出力などを扱う |
ArrayList と Random は java.util パッケージにあるため、import を書いています。
一方、String、Math、System は java.lang パッケージにあるため、通常 import は不要です。
このように、Javaの標準クラスライブラリも、パッケージの考え方を使って整理されています。
モジュールはパッケージより上の整理単位
Java 9以降では、パッケージよりさらに大きな整理単位として モジュール があります。
クラスが集まってパッケージになります。
パッケージがさらにまとまってモジュールになります。
| 単位 | 役割 |
|---|---|
| クラス | 実際の処理を持つ部品 |
| パッケージ | クラスを整理する単位 |
| モジュール | パッケージ群の公開範囲や依存関係を整理する単位 |
ドラゴンボール風にたとえると、クラスは1本の巻物です。
パッケージは巻物を置く棚です。
モジュールは複数の棚をまとめて管理する部署です。
モジュールでは、次のようなことを管理できます。
| モジュールで管理すること | 内容 |
|---|---|
| 公開するパッケージ | 外部から使える機能を決める |
| 内部用のパッケージ | 外部には見せない処理を分ける |
| 依存関係 | どのモジュールがどのモジュールを使うか整理する |
モジュールを定義するときは、module-info.java を使います。
ただし、学習の最初からモジュールを細かく意識する必要はありません。
まずは、クラス、ファイル、パッケージ、import の関係をしっかり理解することが大切です。
名前のないモジュール
module-info.java を作らずに書いた通常の学習用プログラムは、名前のないモジュールに属するものとして扱われます。
| 状態 | 扱い |
|---|---|
| module-info.java がない | 名前のないモジュール |
| module-info.java がある | 名前のあるモジュール |
この仕組みがあるため、初心者の段階ではモジュールを強く意識しなくても、Javaのプログラムを作って実行できます。
ドラゴンボール風にたとえると、最初は本部内の簡単な棚分けだけで任務を進められるようになっている、ということです。
大きな任務や本格的な部隊編成になったときに、モジュールという大きな管理区画を意識すればよい、と考えると分かりやすいです。
図:13章で学んだクラス整理の全体像

この図が示していること
この図では、13章で学んだ内容全体を1つの流れとして整理しています。
左側のクラスは、Javaプログラムを作る1つ1つの部品です。
GokuWarrior、VegetaWarrior、KiTechnique、BattleMission など、それぞれが別の役割を持ちます。
中央では、それらのクラスをファイルに分け、さらにパッケージで整理する様子を示しています。
右側では、別パッケージのクラスを使うために、public、パッケージ名.クラス名、import を使う流れを表しています。
下部では、java.lang、java.util、java.io などの標準クラスライブラリも、パッケージで整理されていることを示しています。
さらに、モジュールという上位の整理単位も配置しています。
| 図の要素 | 意味 |
|---|---|
| クラス | プログラムの部品 |
| ファイル | クラスを書く単位 |
| パッケージ | クラスの所属グループ |
| import | 別パッケージのクラスを使いやすくする |
| サブパッケージ | 階層的に整理する |
| クラスライブラリ | Javaが用意している便利なクラス群 |
| モジュール | パッケージ群を大きく管理する |
この図から分かることは、13章が単なる文法の章ではなく、クラスを整理して大きなプログラムを作りやすくする章だったということです。
13章で身についた力
13章を学ぶことで、Javaのコードをただ書くだけでなく、どう整理して育てるかという視点が身につきました。
これは、プログラムが大きくなるほど重要になります。
| 身についた力 | 内容 |
|---|---|
| クラスを役割ごとに分ける力 | ファイル分割の考え方 |
| クラスの所属を整理する力 | パッケージの理解 |
| 同じグループのクラスを連携させる力 | 同じパッケージの利用 |
| 別グループのクラスを使う力 | public と パッケージ名.クラス名 |
| コードを読みやすくする力 | import の活用 |
| 階層的に整理する力 | サブパッケージの理解 |
| 標準ライブラリを探す力 | クラスライブラリのパッケージ理解 |
| 大きな構成を見通す力 | モジュールの考え方 |
ドラゴンボール風に言えば、13章で身につけたのは、戦士本部の資料整理術です。
悟空やベジータの巻物を分ける。
同じ役割の巻物を同じ棚に置く。
別の棚の巻物を使うときは住所を指定する。
よく使う巻物は案内札で呼びやすくする。
棚が増えたら階層化する。
さらに大きな任務では、棚全体を部署として管理する。
Javaのクラス整理も、まさにこの考え方です。
13章で特に押さえておきたいポイント
13章の内容を学習後に確認するときは、次のポイントを押さえておくと理解が安定します。
| ポイント | 内容 |
|---|---|
| クラスが増えたらファイルを分ける | 役割を見やすくする |
| 関連クラスはパッケージにまとめる | グループとして整理する |
| package 文は所属を示す | 自分のクラスの住所を決める |
| フォルダ構成はパッケージに合わせる | package pa.sub; なら pa\sub |
| 同じパッケージ内は使いやすい | 同じグループの仲間として扱える |
| 別パッケージは住所を示す | pc.GokuWarrior のように書く |
| 外部から使うクラスは public が重要 | 別パッケージから利用できるようにする |
| import は短く書くための準備 | クラスの所属は変えない |
| サブパッケージは別パッケージ | pa と pa.sub は同じではない |
| 標準クラスもパッケージで整理される | java.lang、java.io、java.util など |
| モジュールは上位の整理単位 | パッケージ群を管理する |
この章で学んだ内容は、今後のJava学習の土台になります。
オブジェクト指向でクラスを作れるようになることは大切です。
しかし、作ったクラスをどこに置き、どう分類し、どう使いやすくするかも同じくらい大切です。
13章では、そのための基本的な整理方法を学びました。
クラスを作るだけでなく、クラスを育てやすい場所に置く。
これができるようになると、Javaのプログラムはずっと読みやすく、拡張しやすくなります。
