Java入門11 クラスとインスタンス

Java入門の第11回です。前回からの続きですが、今回だけでも分かる内容になっています。

今回はコード無しで、クラスとインスタンスについて解説します。クラスからインスタンスを生成するとはどういうことなのか?なんとなくでよいのでイメージをつかみましょう。

クラス(class)とは

クラス(class)とは、処理単位でまとめられたプログラム部品のことです。

例えば、ゲームプログラムを作成する場合を考えてみましょう。ひとつのゲームプログラムを完成させるには、様々な処理を実行するプログラム部品が必要になります。キャラクターを作成する処理、スコアを計算する処理、ゲーム進行を管理する処理などです。

これらの各処理をひとまとまりにして、それぞれをプログラム部品にしてやると、プログラム全体がメンテナンスしやすい構造となります。この場合の処理のまとまりがクラス(class)です。キャラクタークラス、スコアクラス、ゲーム進行管理クラス…という具合です。

ゲームのような大きなプログラムを作成する際には、プログラム全体をクラス単位で部品に分割して、それぞれのプログラム部品を組み合わせることで、ゲーム全体を構築するのが一般的です。このようなプログラミング手法は「オブジェクト指向」と呼ばれます。

オブジェクト指向とは

オブジェクト指向とは、プログラム部品を組み合わせることでプログラム全体を作成する手法です。ゲームプログラムの例で言えば、キャラクター作成、スコア計算、ゲーム進行管理などをプログラム部品として開発して、それらを組み合わせてひとつのゲームプログラムを作成します。プログラム部品をオブジェクト(物体)として扱うことから、こうしたプログラミング手法を「オブジェクト指向」と呼びます。

オブジェクト指向が普及した背景には、コンピュータの発達とともにソフトウェア開発が大規模化したことが挙げられます。ソフトウェア開発が大規模化したことで、ひとつのソフトウェア開発に多人数が参加する開発スタイルが一般的となります。この際、プログラム全体を部品単位に分けることで、多人数が参加する場合にも効率よく開発できるメリットを得られます。

それぞれのプログラム部品の開発を担当する人は、他の人が開発したプログラム部品の内側のコードを知らなくても、その使い方や組み合わせ方さえ知っていれば呼び出して利用できます。ゲームプログラムの例で言えば、キャラクター作成、スコア計算、ゲーム進行管理などのプログラム部品のすべてのコードを把握していなくても、必要な時に必要なプログラム部品を呼び出して使えます。

Javaプログラミングのキモは、クラスの内容を定義すること

Javaは、代表的なオブジェクト指向プログラミング言語です。Java言語によるプログラミングでは、オブジェクト単位でプログラム部品を作成して、それらを組み合わせることでプログラム全体を作成するのが基本となります。

個人で小さなプログラムを書いている場合には、オブジェクト指向プログラミングの恩恵を受けることは少ないかもしれませんが、やがて大きなシステムへと発展させていく可能性を視野に入れれば、小さなプログラムであってもオブジェクト指向を意識する方が良いでしょう。

Java言語でオブジェクト指向プログラミングをするとは、クラスの内容を適切に定義してやるということに他なりません。Javaプログラミングのキモは、クラスの内容を適切に定義することです。

クラスとインスタンス

Javaにおけるクラスとは、インスタンスを生成するための型や設計図のようなものです。クラスを元にして、インスタンスを生成します。作成対象の共通要素を抽出して定義したものがクラスで、そこに具体的な情報を与えることで生成されるのがインスタンスです。クラスを元にインスタンスとして生成されることで、クラスの抽象的な概念から具体的なオブジェクトとなります。

例えば、アクセルを踏むと速度が上がりブレーキを踏むと速度が下がる自動車を作成するクラスに対して、アクセルやブレーキの性能はどんなで形状はどんなで車体は何色で…という具体的な情報を与えることで、抽象的な自動車という概念から「プレイヤーAさんが操作するマシン」という具体的なインスタンスを生成します。

また例えば、平面上の座標と半径を与えると円を作成する円クラスに対して、座標は(x=4, y=6)で半径は5で…という具体的な情報を与えることで、抽象的な円という概念から、「座標(4, 6)を中心とする半径5の円」という具体的なインスタンスを生成します。

クラスインスタンス
自動車 プレイヤーAさんが操作するマシン
座標(4, 6)を中心とする半径5の円

自動車というモノは実在していませんが、Aさんの乗っているあの車なら実在しています。円というモノは実在していませんが、いまコンパスで描いたこの円なら実在しています。クラスとインスタンスの関係が、なんとなくイメージできるでしょうか。

まとめ

  • Javaは、代表的なオブジェクト指向プログラミング言語です。
  • オブジェクト指向プログラミングには、多人数が関わる大規模開発を効率良く行えるメリットがあります。
  • Javaでオブジェクト指向プログラミングを行うとは、クラスの定義を適切に行うことに他なりません。
  • クラスとはオブジェクトの概念を抽象化したものであり、漠然と自動車を作成する自動車クラスとか、漠然と円を作成する円クラスといったものです。表現を変えるなら、自動車とは何か?円とは何か?という要件を抽出して定義したものがクラスです。
  • クラスに必要な情報を与えることで、具体的なインスタンスを生成します。クラスからインスタンスを生成することで、例えば、「プレイヤーAさんが操作するマシン」 とか 「座標(4, 6)を中心とする半径5の円」 といった具体的なオブジェクトとなります。

次回へ続きます。