プログラミング言語にはJava以外にもC++やPython等の様々な種類があります。
言語ごとに記述方法や利用分野※などが異なりますが、現在のプログラミング言語は大別して「手続き型」と「オブジェクト指向型」という型に分けることができます。
※Webや組み込み系やデータ分析などの、プログラムを利用する分野
手続き型でもオブジェクト指向に寄せたり、オブジェクト指向を手続き型に寄せた記述方法もできます。
この記事はJavaのオブジェクト指向の記述方法を説明するわけではないので、記述から入りたい人は次の記事からでもOKです。
オブジェクト指向の概念は結構大事
オブジェクト指向というものは概念を言語の記述に落とし込んだものです。例えば、Javaではクラスという部品を作る必要がありますが、他の言語ではクラスを作る必要がないものもあります。(クラスが必要であれば作る、もしくはクラスを作らない言語もある)
オブジェクト指向そのものの概念を理解することで、記述自体の理解も深まります。
オブジェクト指向型言語の特徴
オブジェクトは「モノ」という訳ができます。オブジェクト指向型言語は、その「モノ」をプログラムで作成していくことがポイントとなります。
オブジェクト指向では、犬などの動物、さくらなどの植物から、パソコンやペン、強風や雨などの自然現象もすべて「モノ」としてプログラムを作成することになります。
オブジェクト指向ではこの「モノ」に「状態」と「操作」を持たせます。
操作と状態
状態はそのモノに付属する情報を担当する部分になります。
よく例で挙げられるのは「車」で、車の状態には「スピード」や「エンジンがかかっているかどうか」「ライトが点灯しているかどうか」といったものがあります。
操作はそのモノの動き(操作)を担当し、状態を変更する役目も担います。
先ほどの「車」では、車の操作として「エンジンをかける、止める」「アクセル」「ブレーキ」「ライトをつける、消す」などがあります。
エンジンをかけると「エンジンがかかっている」状態になります。アクセルを踏むと「スピード」が上がった状態になり、ブレーキを踏むと「スピード」が下がった状態になります。この仕組みが「操作が状態を変更する」部分になります。
人工物以外での例が以下のイラストです。
※台風も猫もモノを作成後は自動的に動くという視点から、操作の部分で変わるや食べるという(自発的)表現を使っています。
操作という用語は少しわかりにくいですが、プログラミングはプログラマーが指示したことを動作させるので、自然物や動物(というオブジェクト)の動き(もしくは状態)はプログラマーが操作すると表現されます。
クラスとオブジェクト
Javaではクラスという設計図を作成し、クラスからオブジェクトという実体を生成します。
設計図であるクラスからオブジェクトという実体を作成するメリットとしては、以下のようなメリットがあります。
- 同じ設計図(クラス)から実体(オブジェクト)をたくさん作成できる
- 同じクラスから作成したオブジェクトでも、オブジェクト毎の状態を変えることにより似たようなオブジェクトを作成できる
例えば、「たい焼き」クラスを作成し、以下のようなオブジェクトを作成する
- オブジェクト「普通のたい焼き」を作成し、中身を「あんこ」にする
- オブジェクト「チョコのたい焼き」を作成し、中身を「チョコレート」にする
- オブジェクト「クリームのたい焼き」を作成し、中身を「カスタードクリーム」にする
オブジェクト指向のメリットとデメリット
オブジェクト指向はプログラミング手法のひとつであり、なんでもオブジェクト指向にすればよいということでもありません。
オブジェクト指向では手続き型にはない「継承」「カプセル化」「ポリモーフィズム」などが可能で、再利用しやすいプログラミングを行うことができます。
逆にクラスからオブジェクトを作成する為、「わざわざクラスを作成する必要がある」「用語が多い」「概念が複雑」などのデメリットも存在します。
オブジェクト指向は奥が深く、より深く学習しようとすると様々な用語や概念があります。オブジェクト指向の記述に慣れてきたら、どのような記述を行うことが効率的なプログラムにつながるか学習してみるといいと思います。
まとめ
- オブジェクトは”モノ”をプログラムとして扱う
- オブジェクトは状態と操作を持つ
- クラスからオブジェクトを作成する
- クラスは設計図
- クラスからオブジェクトは複数作成できる
- オブジェクト指向はメリットもあればデメリットもある