Java入門|8章のまとめ

ドラゴンボールでつかむ、Javaクラスの土台。8章で学んだオブジェクト指向の基本をここでしっかり固めよう

8章では、Javaのオブジェクト指向の入口として、とても大切な内容をひと通り学びました。これまでの章では、変数や配列、条件分岐、繰り返しといったしくみを使って処理の流れを作ってきましたが、8章ではそこに「クラス」という考え方が加わりました。これによって、情報と処理をひとまとまりにして整理しながらプログラムを組み立てる見方ができるようになってきました。

ドラゴンボールで考えると、この章はまさに「戦士の設計図を作り、その設計図から実際の戦士を登場させ、情報を持たせ、技を使わせ、必要なら状態を返してもらう」という流れを学んだ章だったといえます。クラス、オブジェクト、フィールド、メソッド、引数、戻り値という言葉がばらばらの知識ではなく、ひとつの流れとしてつながって見えてきたなら、とてもよい理解の進み方です。ここでは、その流れをやさしく整理しながら、8章で身につけた内容をしっかり定着させていきましょう。

クラスは戦士の設計図だった

8章で最初に学んだ中心の考え方は、クラスです。
クラスは、ひとことで言うと設計図でした。

ドラゴンボールで考えるなら、悟空そのものがクラスなのではなく、「サイヤ人という戦士は、こういう情報を持ち、こういう動きができる」という共通の型を表したものがクラスです。

たとえばサイヤ人という設計図には、次のような内容をまとめられます。

分類
情報name、power、specialMove
動きshow、setPower、getPower

このように、クラスは単なるデータの置き場ではなく、情報と処理をひとつにまとめるための土台でした。
ここが、これまで学んできた単独の変数や配列とは大きく違うところです。

8章の最初では、この「情報と機能をまとめて持てる」という考え方そのものが新しいポイントでした。
Javaではこのクラスが中心になって、プログラム全体を組み立てていきます。

クラスの中にはフィールドとメソッドが入る

クラスを学ぶうえで、必ず整理しておきたいのがフィールドとメソッドです。
この2つは、クラスのメンバでした。

フィールドは、そのものが持っている状態や性質を表します。
ドラゴンボールなら、戦士の名前、戦闘力、必殺技といったプロフィールのような情報です。

一方でメソッドは、そのものができる動きを表します。
たとえば情報を表示する、名前を設定する、戦闘力を返す、といった機能がメソッドです。

表で整理するとこうなります。

用語役割ドラゴンボールでのたとえ
フィールド情報を持つname、power、specialMove
メソッド動きを持つshow、setName、getPower
メンバフィールドとメソッドをまとめた呼び方戦士の部品全体

この整理は8章全体を通してとても大切でした。
クラスを見たときには、まず「どんなフィールドを持っているのか」、次に「どんなメソッドを持っているのか」を確認するクセをつけると、コードがぐっと読みやすくなります。

オブジェクトは設計図から作られる実体だった

クラスは設計図ですが、設計図だけではまだ実際の戦士は存在していません。
そこで必要になるのがオブジェクトの作成でした。

サイヤ人クラスを用意しただけでは、まだ悟空もベジータも悟飯も存在していません。
その設計図をもとにして、実際の戦士をひとり作る。この実体がオブジェクトでした。

この関係は8章のとても大事な土台です。

用語意味
クラス戦士の設計図
オブジェクト設計図から作られた実際の戦士

つまり、

  • Saiyan クラスはサイヤ人の共通ルール
  • goku や vegeta は実際に作られた個別の戦士

という関係です。

この感覚がつかめると、「クラスを書くこと」と「オブジェクトを使うこと」がはっきり分かれて見えるようになります。
8章では、ここをきちんと区別して考える力が育ってきました。

オブジェクトを作ると、はじめて具体的な値を持てる

クラスの段階では、name や power という項目しか決まっていませんでした。
でもオブジェクトを作ると、その項目に具体的な値を入れられるようになります。

たとえば同じ Saiyan クラスから作ったオブジェクトでも、

  • goku の name は悟空
  • vegeta の name はベジータ

というように、それぞれ別々の値を持てます。

ここがとても大切です。
クラスは「何を持てるか」を決めるもので、オブジェクトは「実際に何を持っているか」を表すものでした。

この違いを表にするとこうです。

役割内容
クラス持てる情報の種類を決める
オブジェクト実際の具体的な値を持つ

ドラゴンボールでいえば、「サイヤ人という種族の設計図」と、「悟空という個別の戦士」は別物だということです。
この見方が、オブジェクト指向の入口としてとても重要でした。

参照型の変数でオブジェクトを扱った

8章では、オブジェクトを扱う変数についても学びました。
クラス型の変数は、オブジェクトそのものではなく、オブジェクトへのつながりを表す参照型の変数でした。

たとえば goku という変数があったとしても、それは悟空そのものではなく、悟空オブジェクトをさし示す目印のような役割をしていました。

この感覚は最初は少し独特ですが、ここをつかめると

  • フィールドへアクセスする
  • メソッドを呼び出す
  • 別のオブジェクトと区別する

といったことがすっきり理解できるようになります。

ドラゴンボールで言えば、goku というラベルをたどると、その先に悟空という戦士がいる、という感覚です。
この考え方があったからこそ、goku.name や goku.show() の意味もはっきりしました。

メンバアクセスでフィールドやメソッドを使えた

オブジェクトを作ると、そのメンバにアクセスできるようになりました。
ここで出てきたのが . を使ったメンバアクセスです。

フィールドにアクセスするときは、

  • goku.name
  • goku.power

のように書きました。

メソッドを使うときは、

  • goku.show()
  • goku.setPower(9000)

のように書きました。

つまり . は、「そのオブジェクトの中にある部品へ進む」ための道しるべでした。

この見方を持っておくと、フィールドとメソッドのどちらも、同じように「オブジェクトの中にあるメンバ」だと理解しやすくなります。

クラスの内側と外側で書き方が変わることも学んだ

8章の途中では、メンバへのアクセス方法が、クラスの外と内で少し変わることも学びました。

クラスの外、たとえば main メソッドの中では、どのオブジェクトのメンバかを指定する必要があります。
だから goku.name や goku.show() のように、変数名をつけて書きました。

一方、クラスの中では、自分自身のフィールドやメソッドを扱うことになるので、

  • name
  • power
  • show()

のように、そのまま書けました。

さらに、自分自身であることを強調したいときには this. を使えることも学びました。

場所フィールドメソッド
クラス外goku.namegoku.show()
クラス内name / this.nameshow() / this.show()

この整理は、クラスの中で処理を書くときにとても大切でした。
特に this は、この先の章でも何度も出てくるので、「自分自身を表すもの」という感覚を持てたことは大きな収穫です。

メソッドで処理をひとまとめにできた

8章では、メソッドの基本もしっかり学びました。
メソッドは、一定の処理をまとめて名前をつけたものです。

ドラゴンボールで言えば、戦士が使える技や機能をひとつのまとまりとして持たせるイメージです。
たとえば show なら「自分の情報を表示する技」、showSaiyan なら「案内を出してから情報を表示する技」というように考えられます。

この考え方によって、同じ処理を何度も書かずにすみ、必要なときに呼び出して使えるようになりました。

メソッドを呼び出すと、

  1. 呼び出し元からメソッドへ進む
  2. メソッドの中の処理が行われる
  3. 終わったら呼び出し元に戻る

という流れでした。

この流れが理解できたことで、処理を部品として整理する見方がかなり身についてきたはずです。

引数を使うと、メソッドへ値を渡せた

8章の後半では、メソッドに値を渡す引数を学びました。
ここからメソッドは、ただ同じ処理をするだけでなく、呼び出しごとに違う値に応じて動けるようになりました。

たとえば、

  • setName(String n)
  • setPower(int p)

のようなメソッドでは、呼び出し元から渡された値を受け取って処理しました。

ここで大切だったのは、仮引数と実引数の区別です。

用語意味
仮引数メソッド定義側で受け取る変数
実引数呼び出し側から実際に渡す値

たとえば goku.setPower(9000) なら、

  • 実引数は 9000
  • 仮引数は p

でした。

このしくみがわかったことで、「同じメソッドでも、渡す値によって処理結果が変わる」という感覚が身につきました。
これはメソッドを柔軟な部品として使ううえで、とても重要な力です。

実引数には値そのものも変数も使えた

引数の学習では、実引数として直接値を書く場合と、変数を渡す場合の両方を学びました。

たとえば、

  • goku.setPower(9000)

のように直接書くこともできましたし、

  • int battlePower = 9000;
  • goku.setPower(battlePower);

のように変数を使うこともできました。

ここで大事だったのは、メソッドに渡るのは変数名そのものではなく、その中に入っている値だということです。
また、実引数側の変数名と仮引数側の変数名は同じでなくてもよいことも学びました。

この理解があると、コードの見た目に惑わされず、「何の値がどこへ渡っているのか」を冷静に見られるようになります。

複数の引数も持てたし、引数のないメソッドもあった

8章では、引数は1つだけとは限らないことも学びました。
たとえば名前と戦闘力をまとめて設定するメソッドなら、2つの引数を受け取れます。

そのときは、引数をカンマで区切って並べました。
そして、左から順に実引数の値が仮引数へ渡されるのでした。

さらに、show のように引数を持たないメソッドもありました。
つまり、メソッドは役割に応じて、

  • 引数あり
  • 引数なし

の両方を使い分けられるということです。

このあたりまで理解できると、メソッド設計の見方がかなり育ってきます。
「何を受け取るべきか」「何も受け取らなくてよいか」を考えられるようになるからです。

戻り値を使うと、メソッドから結果を受け取れた

8章の最後では、戻り値のしくみを学びました。
引数が「呼び出し元からメソッドへ値を渡す」しくみだったのに対して、戻り値は「メソッドから呼び出し元へ値を返す」しくみでした。

たとえば、

  • getName()
  • getPower()

のようなメソッドは、それぞれ戦士の名前や戦闘力を呼び出し元へ返しました。

ここでは return を使って値を返すこと、そして戻り値を持つメソッドでは、返す値の型をあらかじめ書いておくことを学びました。

表で整理するとこうです。

しくみ向き役割
引数呼び出し元 → メソッド値を渡す
戻り値メソッド → 呼び出し元値を返す

この対応関係が理解できると、メソッドは一方通行ではなく、呼び出し元と情報をやり取りする部品だと見えてきます。

戻り値のあるメソッドとないメソッドを使い分けた

戻り値を学ぶことで、メソッドには

  • 値を返すもの
  • 値を返さないもの

の両方があることも整理できました。

値を返すなら、

  • String
  • int

などの型を書きます。

値を返さないなら、void を書きます。

たとえば、

  • getPower は int を返す
  • show は void で何も返さない

というように、役割に応じて書き分けました。

この違いを理解できたことは、これから先のJava学習でもとても大事です。
メソッドを見るたびに、「このメソッドは何かを返すのか、それとも返さないのか」を意識できるようになるからです。

8章で学んだ流れをひとつにつなげてみる

8章全体をひとつの流れとして見てみると、次のようになります。

  1. クラスという設計図を作る
  2. クラスの中にフィールドとメソッドをまとめる
  3. クラスからオブジェクトを作る
  4. オブジェクトのメンバにアクセスする
  5. メソッドを呼び出して処理を行う
  6. 必要なら引数で値を渡す
  7. 必要なら戻り値で結果を受け取る

この流れがつながって理解できるようになったことが、8章のいちばん大きな成果です。

ドラゴンボールで言えば、

  • サイヤ人の設計図を作る
  • 名前や戦闘力や技を持たせる
  • 悟空という実体を作る
  • その悟空に情報を設定する
  • 技を使わせる
  • 必要な値を渡す
  • 必要な結果を返してもらう

という一連の流れが見えるようになったわけです。

図で8章全体を整理すると理解が深まる

この図では、左側に Saiyan クラスという設計図があり、その中にフィールドとメソッドが整理されています。
これによって、クラスは情報と機能の両方を持つまとまりだということが見やすくなります。

その設計図から右側の goku オブジェクトが作られていて、そこには具体的な値が入っています。
ここで、クラスは設計図、オブジェクトは実体、という関係も自然に確認できます。

さらに右側には、引数で値を渡す、メソッドで処理する、戻り値で結果を受け取る、という流れが並んでいます。
これによって、8章で学んだ内容が別々の話ではなく、ひとつのオブジェクト指向の流れとしてつながっていることが視覚的に理解しやすくなります。

これから先の章につながる土台になった

8章は、オブジェクト指向のほんとうの入口でした。
ここで学んだ内容は、この先に出てくるより強力なクラスの機能を理解するための土台になります。

たとえば今後、コンストラクタや this の使い方、継承、ポリモーフィズム、オーバーライドといった内容を学ぶときも、土台にあるのはやはり

  • クラス
  • オブジェクト
  • フィールド
  • メソッド
  • 引数
  • 戻り値

です。

この基本があいまいなままだと、その先の内容はかなりわかりにくくなってしまいます。
逆に、この章の内容がしっかりつながっていれば、次の学習はぐっと理解しやすくなります。

だからこそ8章では、「用語を覚えること」だけではなく、「設計図から実体を作り、情報と処理をやり取りする」という流れそのものをイメージでつかんでおくことがとても大切でした。