プログラミング初心者の方がぶつかる壁の一つは「オブジェクト指向とは?」という問いに明確な答えを得られないことでしょう。私も当時は?マークがつきっぱなしで、オブジェクト指向に対する理解に混乱してました。
オブジェクト指向を学ぶべき理由も踏まえて、本記事ではオブジェクト指向についてわかりやすく解説していきたいと思います。
目次
オブジェクト指向とは?わかりやすく解説
オブジェクト指向とは、ソフトウェアを開発するときに用いる”部品化”の考え方です。
オブジェクト指向では(※)手続き型プログラミングと異なり、確固たる根拠に基づいてプログラムの部品化を行います。
(※)手続き型プログラミングとは、コンピューターが実行すべき命令や手続きを上から順番に実行していくもの。
オブジェクト指向でなぜつくるのか?
前章でオブジェクト指向とは部品化の考え方ということは理解できたことでしょう。
本章ではそんなオブジェクト指向で開発する理由についてお伝えするために、オブジェクト指向という部品化の考え方が誕生した経緯を簡単におさらいできればと思います。
オブジェクト指向が誕生するまでは手続き型プログラミングで開発が行われていました。
これでも理論上はどんなに大きなプログラムでも記述できるのですが、ソースコードが長く複雑になるにつれて開発者自身が把握しきれなくなるという問題が出てきてしまいます。
つまり、人間がプログラム開発のボトルネックになってしまったという訳です。
そこで誕生したのがオブジェクト指向という考え方になります。
オブジェクト指向という部品化の仕組みに従ってプログラムを書くことで、大規模なシステムも比較的簡単に開発できるようになりました。
オブジェクト指向の考え方
ではどうしてオブジェクト指向という部品化の考え方を用いるだけでどうして複雑さを克服できるのでしょうか?それはオブジェクト指向の考え方を知れば理解できます。
私たちが開発するプログラムは現実世界における活動を自動化するためのものです。
言ってみれば現実世界とは無関係に単独で存在しているプログラムはほとんどありません。
オブジェクト指向プログラミングではいきなりコードを書くことはせず、まずは現実世界の観察を行い設計図を描きます。
そこに登場する人や物、つまりオブジェクト単位でプログラムを分割するのです。
現実世界に出てくる人や物を一つの単位としてプログラムを分割する。
ここでプログラマが考えなければならないのは、オブジェクトをどのように作りどのように連携させるかということです。(現実世界の振る舞いを模倣すれば良い)
要するに、我々がよく把握している現実世界を模倣して作られたプログラムもまた我々にとって把握しやすいので、オブジェクト思考を用いることで複雑さを克服できるのです。
今後のオブジェクト指向学習について
ここまで「オブジェクト指向とは?」という基礎の基礎について初学者でもわかるようなるべくわかりやすく解説してきました。
しかし、これまでの内容を理解できたところでオブジェクト指向を用いた開発ができるようになるといったらそうではありません。今後のオブジェクト指向学習が大切です。
オブジェクト指向について効率的に学べるよう、重要項目それぞれについて記事を書いたので参考にしてみてください。
- クラスとインスタンス
- カプセル化
- 継承
- 多態性/ポリモーフィズム
オブジェクト指向のクラス/インスタンス
”クラス”とは、いわばインスタンス(オブジェクト)の設計図になります。
「オブジェクト」という言葉は曖昧で、クラスのことを指す場合もあるが、基本的にはクラスから生み出されるインスタンスのことだと思ってもらえればOK。
そして、このクラスという設計図に対して具体的な属性値を与え、メモリ上に生成してポコリと実態化させたものを”インスタンス”と呼びます。
オブジェクト指向では、クラスという設計図を基に実体であるインスタンスが生成されるという関係をまずは押さえておきましょう。
クラスとインスタンスの詳しい内容につきましては上の記事を参考にしてみてください。
オブジェクト指向のカプセル化
”カプセル化”とは、データの読み書きやメソッドの呼び出しを制御する機能です。
大切なデータを外から簡単に書き換えられるプログラムだと恐ろしいですよね?そんな恐ろしい事態を防ぐための機能がカプセル化になります。
カプセル化の詳しい内容につきましては上の記事を参考にしてみてください。
オブジェクト指向の継承
”継承”とは既存のクラス(親)に基づき新たなクラス(子)を定義するための機能です。
継承という機能を使うことで、親クラスのメンバ(データ・メソッド)は自動的に引き継がれるため、子クラスでは差分だけを記述すればOK。
継承の詳しい内容につきましては上の記事を参考にしてみてください。
オブジェクト指向の多態性
”多態性/ポリモーフィズム”とは、同じ命令を送ったにも関わらずそれぞれが独立した固有の処理を行う特性を指します。
例えば以下のような図形クラスから継承によって作られた子クラス群があるとしましょう。
各子クラスは親クラスから継承したWriteメソッドをオーバーライドしているとします。
そして、これらの子クラス群に同じ命令を送ると・・・以下の図のように動作するのです。
このように同じ呼び出し方なのに異なる動作をするという特性から多態性/ポリモーフィズムという名前がつけられています。
多態性/ポリモーフィズムにつきましては上の記事を参考にしてみてください。
オブジェクト指向とは?【まとめ】
- オブジェクト指向とは、現実世界の振る舞いをプログラム上で再現するための部品化の考え方を指す。
- オブジェクト指向のメリットは人間にとって把握しやすい現実世界の振る舞いを模倣することによるプログラムの複雑さを克服できること。
- オブジェクト指向とは?という基本が理解できた後はオブジェクト指向の重要機能であるカプセル化・継承・多態性について学んでいこう。
オブジェクト指向はとにかく理解することが大切なので、本記事を何回も読み返すなり参考書籍を読むなりして理解を深めていきましょう。
以下の記事でオブジェクト指向について学べる両所を紹介しているので、気になる方は併せて読んでみてください(^^)
オブジェクト指向で躓く人は多いですが、理解さえできれば大きなメリットを享受することができるので頑張ってください!
本記事がオブジェクト指向の理解促進に少しでもお役に立てたのなら幸いです。ではっ!