Javaはオブジェクト指向のプログラミング言語であり、初心者が躓きやすい要素の1つとしてオブジェクト指向の概念が挙げられます。
本記事では、初心者向けにJavaプログラミングの必須知識であるオブジェクト指向の基本について解説していきます。
Javaのオブジェクト指向って何?
Javaはオブジェクト指向の言語で、プログラムのデータや機能をオブジェクト(部品)として組み合わせることでシステムを構築していきます。
オブジェクト指向は考え方
オブジェクト指向は、プログラムをオブジェクト(部品)として捉えた上で、部品を操作してシステムとして稼働させます。
オブジェクト指向自体が考え方であるため、Javaに限った機能ではなく、様々なプログラミング言語で取り入れられています。
オブジェクト指向に明確な定義はない
オブジェクト指向が難しいと感じる要因は、オブジェクト指向に明確な定義がない点にあります。
オブジェクト指向自体が概念であり、明確な解答がありません。
クラスとインスタンス
オブジェクト指向の学習を進める上で「クラス」と「インスタンス」は理解が必須となる用語です。
クラス
クラスとは、頻繁に利用される表現として「設計図」の役割を担います。
オブジェクトの設計図としてフィールド(データ)やメソッド(処理)を定義することができ、オブジェクトのテンプレートとしての役割を果たします。
インスタンス
インスタンスとは、クラスを実体化したモノを指します。
クラスを設計図として例えたように、設計図だけでは実際に利用することが出来ず、実体化したインスタンスが必要です。
クラスからインスタンスを作成することを「インスタンス化」と呼びます。
クラスとインスタンスのイメージ
クラスとインスタンスのイメージを現実に例えると、マンションの設計図が「クラス」、実際に建築されたマンションが「インスタンス」のようなイメージです。
クラスにはマンションに必要なデータや処理がテンプレートとして記載されており、インスタンスではそのテンプレートに沿ってマンションが建築された状態です。
現実世界でもマンションが全て同じではないように、テンプレートを元に5階建てと10階建てマンションや部屋の広さを変更するなど、それぞれのインスタンス毎に異なる値や処理を持たせることが出来ます。
サンプル
クラスとインスタンスのイメージを具体的なJavaのサンプルコードで確認しておきましょう。
public class Main { public static void main(String[] args) { Apartment apart = new Apartment(); apart.floor = 5; apart.autoLock(); } } class Apartment{ String name; int floor; int size; void autoLock() { // 処理内容 } }
10行目から18行目が「クラス」を定義している部分で、11~13行目がフィールド、15~17行目がメソッドです。
実際に利用しているのは1~8行目のMainクラスで、4行目がインスタンス化を実施している部分です。
インスタンス化したオブジェクトは5・6行目のように、実際に利用することが出来るようになります。
オブジェクト指向の用語
次にオブジェクト指向で頻繁に登場する用語についても確認しておきましょう。
クラスとインスタンスは上記で別途解説しているので、その他用語について紹介していきます。
- フィールド
- メソッド
- カプセル化
- 継承
- ポリモーフィズム
フィールド
フィールドとは、クラス内で定義される変数のことで、データを格納することが出来ます。
Stringやintといった各種データ型が利用出来るのはもちろん、publicやprivateといった修飾子でアクセス範囲を指定することも可能です。
メソッド
メソッドとは、クラス内で定義される処理のことを指します。
クラス内外からメソッドを呼び出すことで、様々な処理を実行します。
上述したフィールドデータを利用したり編集したりすることも可能です。
カプセル化
カプセル化とは、データを保護するために利用される概念で、オブジェクトを外部から勝手に操作されないよう保護する目的で利用されます。
フィールド値の説明でアクセス範囲を指定することが出来ると記述しましたが、このアクセス修飾子を利用して外部に公開したいデータと外部には公開したくないデータを振り分けることが可能です。
データを外部から自由に変更出来ると思わぬバグを生む可能性もあるため、変更条件を加えたり外部からは一切変更出来ないようにカプセル化することでオブジェクトが破壊されないよう保護します。
継承
継承とは、あるクラスに定義されているフィールドやメソッドなどを他のクラスに引き継がせることを指します。
親クラス・子クラスなどとも表現され、継承元である親クラスの機能を継承先である子クラスでは定義しなくても利用可能です。
もちろん子クラスにだけ機能を追加することも出来るため、共通機能は親クラスで作成し、独自の機能だけを子クラスで定義するような運用が可能となります。
ポリモーフィズム
ポリモーフィズムは多様性とも表現されますが、物事を大枠で捉えた上でそれぞれの処理内容に関しては各実装に委ねられる考え方を指します。
Javaのプログラミングでは、同名のメソッドで引数や各クラス毎に実装内容を切り替えることで、呼び出される条件によって同名メソッドでも異なる処理を実現することが可能です。
Javaではポリモーフィズムを実現するために、「オーバーライド」や「オーバーロード」といった機能が提供されています。
オブジェクト指向のメリット
オブジェクト指向のメリットとして「独立性」「再利用性」「拡張性」の高さが挙げられます。
独立性
頻出用語でご紹介した「カプセル化」にも関わる部分ですが、クラス毎の結びつきを少なくして、他のプログラムから干渉されないようにすることで独立性を高めます。
独立性を高めることで、チームで作業する際に分業がしやすくなったり、プログラムを修正する際にも他の機能に影響しないような開発が可能となります。
再利用性
再利用性は「継承」に関わる部分で、既存の機能を活用した上で必要な機能のみを作成することにより、開発時間の短縮に繋がります。
またカプセル化により独立性が高まっていることから、他のシステムでも再利用できるようなプログラム開発が可能です。
拡張性
拡張性に関しては「ポリモーフィズム」に関わる部分で、プログラムを共通化出来る部分は共通部品として作成しながらも、自由に改変出来るようにシステムを作成することで拡張性の高いプログラムとなります。
また「継承」機能を利用することでも、必要な機能のみを追加することで既存機能をうまく利用しながら拡張性の高いプログラムが作成出来ます。
さいごに: Javaシステム開発ではオブジェクト指向への理解が必須
本記事では、Javaでのプログラム開発に必須となるオブジェクト指向の基本知識についてご紹介してきました。
Javaはオブジェクト指向言語と言われるように、オブジェクト指向の概念を理解することがプログラミングを行う上で必須となります。
学習を始めたばかりの方には聞いたこともないような専門用語が多く、概念的な部分でもあるため理解の難しい部分でもありますが、大枠を把握した上で実際のJavaプログラムに触れながら自分なりに理解度を上げていけるよう学習を進めていきましょう。
人によって説明が異なるように、大まかに概念を理解しておけば良いと意識しておきましょう。