
現在、Javaを勉強しています。しかし、オブジェクト指向の部分がよくわかりません。プログラミング初心者の方でもわかるように教えていただけませんか。
今回の記事では、このような疑問に答えていきます。
本記事の信頼性

僕は、現在システムエンジニア(SE)として某大手メーカーのシステム担当を行っています。
また、Javaを主に使っているため、オブジェクト指向とは何かについても熟知しています。
Javaは、プログラミング初心者にとっては難しい類の言語なので、挫折率が高いです。
僕も挫折しかけたものの、今では立派なエンジニアとして働けています。
その理由として、このオブジェクト指向をしっかりと理解したからといっても過言ではないので、本記事を通して、あなたにオブジェクト指向の解釈の仕方を届けられたらなと思います。
本記事を読むことで、下記のことがわかるでしょう。
本記事でわかること
- 【Java】オブジェクト指向とは
- 【Java】オブジェクト指向を実現する上で重要な3つのこと
- 【Java】オブジェクト指向を行うメリット
- 【Java】オブジェクト指向の書き方【基本用語もセットで】
それでは、記事の最後までお付き合いください。
【Java】オブジェクト指向とは!?

結論から言うと、プログラムの機能や役割を一つのオブジェクト(物)として考える思考法のことを表します。
プログラムは、もちろんソースコードで書かれていますよね。
しかし、1行ごと考えてしまうと、何がなんだかわからないと思います。
そこで、ソースコード群をある一定の基準でまとめて、それをオブジェクトとして考えることで、スムーズな開発を実現することができるようになりました。
それが、オブジェクト指向になります。
【Java】オブジェクト指向は概念的な意味合いが強い
先ほど、オブジェクト指向について解説しましたが、これはあくまで概念的な意味としてのものです。
つまり、どう言うことかというと、これといった正確な定義がありません。
そのため、先ほどのようにふわっとした解説になってしまいます。
現役エンジニアの立場から言うと、開発現場においてオブジェクト指向を知らなくてもなんとかやっていくことはできます。
しかし、結構苦しいと思います。
なぜなら、開発がスムーズに行えないからです。
無駄な工数ばかりがかかってしまい、必要のない労力まで使ってしまいます。
なので、そうならないためにも、オブジェクト指向は覚えておくべきですね。
知っておくだけで効率は良くなるし、プログラミングそのものを根本理解することにつながるので、いいことづくしです。
【Java】オブジェクト指向を実現する上で重要な3つのこと【図解で解説】
結論から言うと、大きく3つあります。
具体的には、下記の通り。
- 独立性
- 再利用性
- 拡張性
それでは、上記の3つを深掘りしていきます。
①:独立性
独立性とは、別名クラス化といい、外部のオブジェクトに影響されることなく、自身のクラスで処理を完結することです。
図解で見てみましょう。
イメージとしては、下記の通り。

A、B、Cという3つのクラスがそれぞれ独立性を保持していますよね。
では、なぜ相互依存してはいけないのでしょうか。
理由としては、改修が大変になるからです。
例えば、Aクラスの改修をしたとしましょう。
その時、独立性を保持していたら、Aクラスのみの改修でいいです。
しかし、相互依存している場合は、他のBクラスとCクラスにも影響が出てくるため、そちらの方も改修する必要があります。
したがって、独立性という考え方は開発においてとても重要であることが言えます。
②:再利用性
再利用性とは、一部の処理、または全ての処理を別のプログラムで使用することを言います。
イメージとしては、下記の通り。

Aというクラスの処理内容を他のクラスにも使用していることがわかりますね。
これが再利用という考え方になります。
開発現場では、ソースコードを再利用することが頻繁にあります。
なぜなら、工数を削減することができるからです。
自分自身で1から作るよりも過去に同じような処理を書いたのであれば、それをコピペした方が早いですよね。
エンジニアの世界では、このような流れが好まれるので、覚えておくといいでしょう。
③:拡張性
拡張性は、元機能に何かの処理を加えたい時や親クラスに影響を与えたくない時に使う考え方になります。
具体的にどのような場面で使われているかというと、継承ですね。
イメージとしては、下記の通り。

車というクラスでは、走る、止まるなどの処理が行われています。
また、色やメーカー名といったプロパティも設定されています。
上記の図は、それらが他のクラスで継承されているイメージです。
このように継承することで、親クラス(車クラス)の処理を受け継いだり、カスタマイズすることができます。
現場の開発でもよく使う手法になります。
【Java】オブジェクト指向を行うメリット

結論から言うと、大きく4つあります。
具体的には、下記の通り。
- カスタマイズがしやすい
- メンテナンスがしやすい
- 処理速度が上げられる
- 分担して開発業務が行える
それでは、上記の4つを深掘りしていきます。
カスタマイズがしやすい
これは、先ほど解説した拡張性につながる話です。
と言うのも、オブジェクト指向プログラミングを行うことで、親クラスの処理内容を引き継ぐことができます。
また、引き継ぐだけではなく、親クラスの処理内容にサブクラスを通して処理を追加することもできたりします。
このように、カスタマイズが効くと言うのも、メリットの1つですね。
メンテナンスがしやすい
開発現場において、メンテナンスがしやすいと言うのは非常に大きいです。
なぜなら、オブジェクト指向プログラミングを行うことで、どこに何の処理が行われているかがわかりやすくなるからです。
オブジェクト指向プログラミングは、1つ1つのプログラムを小さな塊として考えるため、ソースコードを大きな枠として捉えることができます。
これができると、ソースコードの並びとしては非常にわかりやすくなります。
改修業務を行う際、全て同じ人が担当することはほとんどないです。
そのため、ソースコードは誰がみてもわかるようにする必要があります。
その際、オブジェクト指向プログラミングを心がけることで、誰がみてもわかるソースコードを書くことができ、メンテナンス性も向上していきます。
処理速度が上げられる
オブジェクト指向プログラミングを心がけるか否かでソースコードの量は変わります。
当たり前の話ですが、ソースコードの量が増えれば増えるほど処理速度は下がります。
なぜなら、プログラムは上から下に1行ずつ推移していくからです。
ですが、同じ処理でもソースコードの量を削減することができれば、処理速度をあげることができます。
開発現場において、処理速度をあげていくことは非常に重要な考え方になります。
最初は、プログラムを書くことに重きを置きがちですが、ある程度慣れてきたら処理速度にも気をつけるといいでしょう。
その際、オブジェクト指向を意識するのがいいですね。
分担して開発業務が行える
これは、2つ目の「メンテナンスがしやすい」と言うメリットにつながることですが、分担して行えるのもメリットの1つです。
先ほども書いたように、開発現場では分担して行うことが多いです。
特に、プロジェクトが大きくなればなるほど、クラスごとに開発工程を分担したりします。
その際、誰がみてもわかるようなソースコードを記述していかなければなりません。
何度も言う通り、オブジェクト指向プログラミングはソースコードのわかりやすさを実現できるので、分担で開発業務を行うのであれば、もってこいの思考方法になります。
ちなみにデメリットはほとんどない
逆にデメリットはあるのかというと、ほとんどないかと思います。
といっても、全くないわけではないです。
思いつく限りで言うと、「身につけるのに時間がかかる」といったところ。
また、企業側からしたら、教育コストがかかってしまうこともデメリットかもしれません。
しかし、プログラミングを行う上で、知っておくべき考え方なので、ぜひ覚えましょう。
【Java】オブジェクト指向の書き方【基本用語もセットで】

ここでは、オブジェクト指向の書き方とセットで覚えておくべき用語も合わせて解説していきます。
ここで解説する用語は、下記の通り。
- クラス
- メソッド
- プロパティ
- インスタンス化
- 継承
- カプセル化
- ポリモーフィズム
それでは、上記を深掘りしていきます。
クラス
クラスとは、よくエンジニア界隈では設計書のようなものとして捉えられます。
例えば、犬クラスというものを作ったとしましょう。
その際、犬は走ったり、鳴いたりしますよね。
そのような処理を書いた一連のものをクラスとして捉えていただくといいかもです。
具体例としては、下記の通り。

上記は、犬クラスにcall()と言うメソッドを追加してます。
その赤枠で囲った部分がクラスになります。
また、クラスは親クラスとサブクラスに分けることができ、継承を行う際に重要な考え方になってきます。
メソッド
メソッドは、クラスの部分で解説した通り、犬クラスなら走るだったり、鳴くだったりの部分にあたります。
専門的な用語で言うと、オブジェクトが持っている処理のことを指します。
具体的に見てみましょう。

上記の赤枠で囲った部分がメソッドになります。
ここでは、呼び出し元から引数を受け取り、それを表示するメソッドになっています。
プロパティ
プロパティは、属性と日本語で訳すことができます。
具体的には、オブジェクトが持つデータのことです。
例えば、人間なら名前、性別、年齢といった部分がプロパティとしてあげられます。

上記で言うと、赤枠で囲った部分がプロパティになります。
speakが変数になるのですが、変数についての解説は下記で行っているので、わからない方は合わせて読んでみてください。
【java】変数とは!?変数宣言の方法や代入の仕方等を徹底解説!!
>>【java】変数とは!?変数宣言の方法や代入の仕方等を徹底解説!!
インスタンス化
インスタンス化は、クラスを実体化させることです。
これだけだと、よくわからないと思うので、実際の例で見てみましょう。

この赤枠で囲った部分がインスタンス化と言われる処理です。
クラスは、そのまま使うことができないため、一度インスタンス化させなければなりません。
インスタンス化する際は、下記の要領で行っていきます。
クラス型 変数名 = new クラス名()
よく使う処理なので、ぜひ覚えておきましょう。
継承
継承は、スーパークラスと呼ばれる親クラスからサブクラスが処理を引き継ぐことを言います。
また、引き継ぐだけではなく、サブクラス内でスーパークラスの処理内容をカスタマイズすることもできます。
継承がされている処理は、下記のような書き方がされています。
class AAA extends BBB
{
// 何かの処理を書く
}
上記は、BBBクラス(親)からAAAクラス(サブ)に処理が継承されていると言うことです。
こんな感じで、書かれているときは継承を疑いましょう。
カプセル化
カプセル化は、外部からアクセスを制限することを言います。
アクセスを制限する場合は、アクセス修飾子を書き換えなければいけません。
アクセスを自由に行いたい場合は、publicを。
アクセスを制限する場合は、privateにしていきます。
最初は、何をどう変えたら良いのかわからないと思います。
なので、フィールドは「private」、メソッドは「public」と言う感じで覚えておくといいでしょう。
ポリモーフィズム
ポリモーフィズムは、多様性であったり、多態性と訳されます。
例えば、犬クラスと猫クラスがあったとしましょう。
その際、両クラスとも鳴くメソッドがあったとします。
同じ鳴くメソッドでも、犬なら「ワンワン」猫なら「にゃー」と処理を記述すると思います。
このように、鳴くメソッドでも処理内容が違うことをポリモーフィズムと呼びます。
覚えておきましょう。
【Java】オブジェクト指向とは!?基本やメリット、書き方まで全て解説!!:まとめ
オブジェクト指向は、Javaを理解する中で非常に重要な考え方になります。
しかし、Javaを挫折する人の多くはこのオブジェクト指向をうまく理解できないといった人が多いです。
僕も最初は理解するのに非常に苦しみましたが、しっかりと段階を踏んでいけば、理解することもできます。
今回の記事では、オブジェクト指向の基礎の部分を解説できたと思うので、あとは実際に手を動かしてソースコードを書いてみてください。
Javaは習得できると、世間の需要も非常に高いので、スキルアップが図れますよ。
ぜひ、頑張ってみてください。
それでは、今回の記事はここまでにしたいと思います。
最後までありがとうございました。
関連記事も合わせてどうぞ。
コメント