プログラミング

【初心者向け】オブジェクト指向とは?わかりやすく解説してみた

オブジェクト指向とは?

プログラミング初心者の方がぶつかる壁の一つは「オブジェクト指向とは?」という問いに明確な答えを得られないことでしょう。

ハニ太郎
ハニ太郎
私も当時は「?」マークがつきっぱなしで混乱してました。
Aさん
Aさん
そもそもオブジェクト指向でつくると何が良いのですか?

オブジェクト指向を学ぶべき理由も踏まえて、本記事ではオブジェクト指向についてわかりやすく解説していきたいと思います。

オブジェクト指向とは?

オブジェクト指向とは、ソフトウェアを開発するときに用いる”部品化”の考え方。

オブジェクト指向では(※)手続き型プログラミングと異なり、確固たる根拠に基づいてプログラムの部品化を行います。

(※)手続き型プログラミングとは、コンピューターが実行すべき命令や手続きを上から順番に実行していくもの。

オブジェクト指向とは、ソフトウェアを開発するときに用いる”部品化”の考え方。

オブジェクト指向でなぜつくるのか?

前章でオブジェクト指向とは部品化の考え方ということは理解できたかと思います。

Aさん
Aさん
でも、オブジェクト指向で部品化を行うメリットがわかりません。
ハニ太郎
ハニ太郎
それはオブジェクト指向という部品化の考え方が誕生した経緯を知れば理解できるよ♪

オブジェクト指向が誕生するまでは手続き型プログラミングで開発が行われていました。

これでも理論上はどんなに大きなプログラムでも記述できるのですが、ソースコードが長く複雑になるにつれて開発者自身が把握しきれなくなるという問題が出てきたのです。

ハニ太郎
ハニ太郎
つまり、人間がプログラム開発のボトルネックになってしまったんだ。

そこで誕生したのがオブジェクト指向という考え方になります。

オブジェクト指向という部品化の仕組みに従ってプログラムを書くことで、大規模なシステムも比較的簡単に開発できるようになりました。

オブジェクト指向で開発する理由は、人間が把握しきれない複雑さを克服するため。

オブジェクト指向の考え方

Bさん
Bさん
でもオブジェクト指向という部品化の考え方を用いるだけでどうして複雑さを克服できるのですか?
ハニ太郎
ハニ太郎
それはオブジェクト指向の考え方を知れば理解できるよ♪

私たちが開発するプログラムは現実世界における活動を自動化するためのものです。

言ってみれば現実世界とは無関係に単独で存在しているプログラムはほとんどありません。

Aさん
Aさん
ATMとかも昔人間がやっていたことを自動化したものですもんね。

オブジェクト指向プログラミングではいきなりコードを書くことはせず、まずは現実世界の観察を行い設計図を描きます。

そこに登場する人や物、つまりオブジェクト単位でプログラムを分割するのです。

部品化の考え方

現実世界に出てくる人や物を一つの単位としてプログラムを分割する。

ここでプログラマが考えなければならないのは、オブジェクトをどのように作りどのように連携させるかということです。

Aさん
Aさん
なるほど!現実世界の振る舞いを模倣すれば良いのですね!
ハニ太郎
ハニ太郎
そういうことになります♪

要するに、我々がよく把握している現実世界を模倣して作られたプログラムもまた我々にとって把握しやすいので、オブジェクト思考を用いることで複雑さを克服できるのです。

オブジェクト指向の考え方として、現実世界の振る舞いをプログラム上で再現することが挙げられる。それによって複雑さを克服できる。

今後のオブジェクト指向学習について

ここまで「オブジェクト指向とは?」という基礎の基礎について解説してきました。

しかし、これまでの内容を理解できたところでオブジェクト指向を用いた開発ができるようになるといったらそうではありません。

ハニ太郎
ハニ太郎
今後のオブジェクト指向学習が大切♪

オブジェクト指向について効率的に学べるよう、重要項目それぞれについて記事を書いたので参考にしてみてください。

  • クラスとインスタンス
  • カプセル化
  • 継承
  • 多態性/ポリモーフィズム

オブジェクト指向のクラス/インスタンス

”クラス”とは、いわばインスタンス(オブジェクト)の設計図になります。

「オブジェクト」という言葉は曖昧で、クラスのことを指す場合もあるが、基本的にはクラスから生み出されるインスタンスのことだと思ってもらえればOK。

そして、このクラスという設計図に対して具体的な属性値を与え、メモリ上に生成してポコリと実態化させたものを”インスタンス”と呼びます。

クラスとインスタンス

オブジェクト指向では、クラスという設計図を基に実体であるインスタンスが生成されるという関係をまずは押さえておきましょう。

オブジェクト指向のクラスとインスタンスについてわかりやすく解説
オブジェクト指向のクラスとインスタンスについてわかりやすく解説オブジェクト指向のクラスとインスタンスについて初心者向けにわかりやすく解説。クラスは設計図。設計図であるクラスから生み出せれた実体がインスタンス。...

クラスとインスタンスの詳しい内容につきましては上の記事を参考にしてみてください。

オブジェクト指向のカプセル化

”カプセル化”とは、データの読み書きやメソッドの呼び出しを制御する機能です。

カプセル化とは

大切なデータを外から簡単に書き換えられるプログラムだと恐ろしいですよね?そんな恐ろしい事態を防ぐための機能がカプセル化になります。

オブジェクト指向のカプセル化についてわかりやすく解説
オブジェクト指向のカプセル化についてわかりやすく解説オブジェクト指向のカプセル化について初心者向けにわかりやすく解説。カプセル化とはデータの読み書きやメソッドの呼び出しを制御する機能で、想定しないクラスの利用防止や問題が発生した際に原因の特定を容易化できる。...

カプセル化の詳しい内容につきましては上の記事を参考にしてみてください。

オブジェクト指向の継承

”継承”とは既存のクラス(親)に基づき新たなクラス(子)を定義するための機能です。

継承とは?

継承という機能を使うことで、親クラスのメンバ(データ・メソッド)は自動的に引き継がれるため、子クラスでは差分だけを記述すればOK。

オブジェクト指向の継承についてわかりやすく解説
オブジェクト指向の継承についてわかりやすく解説オブジェクト指向の継承について初心者向けにわかりやすく解説。継承とは、既存のクラスに基づき新たなクラスを定義するための機能で、継承の目的はis-aの関係を明示的に表すことになります。...

継承の詳しい内容につきましては上の記事を参考にしてみてください。

オブジェクト指向の多態性

”多態性/ポリモーフィズム”とは、同じ命令を送ったにも関わらずそれぞれが独立した固有の処理を行う特性を指します。

例えば以下のような図形クラスから継承によって作られた子クラス群があるとしましょう。

多態性/ポリモーフィズム

各子クラスは親クラスから継承したWriteメソッドをオーバーライドしているとします。

そして、これらの子クラス群に同じ命令を送ると・・・以下の図のように動作するのです。

多態性/ポリモーフィズム

このように同じ呼び出し方なのに異なる動作をするという特性から多態性/ポリモーフィズムという名前がつけられています。

オブジェクト指向の多態性(ポリモーフィズム)についてわかりやすく解説
オブジェクト指向の多態性(ポリモーフィズム)についてわかりやすく解説オブジェクト指向の多態性(ポリモーフィズム)について初心者向けにわかりやすく解説。多態性/ポリモーフィズムとは、同じ命令を送ったにも関わらずそれぞれが独立した固有の処理を行うという特性を指します。...

多態性/ポリモーフィズムにつきましては上の記事を参考にしてみてください。

オブジェクト指向【まとめ】

まとめ
  • オブジェクト指向とは、現実世界の振る舞いをプログラム上で再現するための部品化の考え方を指す。
  • オブジェクト指向のメリットは人間にとって把握しやすい現実世界の振る舞いを模倣することによるプログラムの複雑さを克服できること。
  • オブジェクト指向とは?という基本が理解できた後はオブジェクト指向の重要機能であるカプセル化・継承・多態性について学んでいこう。

オブジェクト指向はとにかく理解することが大切なので、本記事を何回も読み返すなり参考書籍を読むなりして理解を深めていきましょう。

オブジェクト指向を学ぶのにおすすめの本5選
【初心者向け】オブジェクト指向を学ぶのにおすすめの本5選オブジェクト指向を学ぶのにおすすめの本を初心者向けに紹介。どの本も良書なので一冊を繰り返し読み返すことでオブジェクト指向をマスターすることができるでしょう。...

オブジェクト指向で躓く人は多いですが、理解さえできれば大きなメリットを享受することができるので頑張ってください!

本記事がオブジェクト指向の理解促進に少しでもお役に立てたのなら幸いです。ではっ♪

▼Javaおすすめスクールはこちら▼

Javaおすすめプログラミングスクール
【初心者向け】Java学習におすすめのプログラミングスクール5選Javaを学習するのにおすすめのプログラミングスクールを5つ紹介。プログラミングスクールはJava学習に必須ではありませんが、学習のショートカットに役立ちます。...
こちらの記事もおすすめ!

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です