こんにちは!侍エンジニアブログ編集部です。
プログラミングに興味のある方はオブジェクト指向プログラミングという言葉を聞いたことがあるのではないでしょうか。
ただ、聞いたことがあっても、なんとなくしか理解していないという方も多いかと思います。実際、色んな専門用語のカタカナ言葉も出てきますし、難しいプログラムで説明されていることが多いので、混乱するのも無理はないでしょう。
侍エンジニアの受講生からも、
なんのためにあるの?
どういうものなの?
といった質問をされることがあります。そこでステップバイステップのシリーズ構成で、順番にできるだけ専門用語を丁寧に噛み砕いて解説をしていきます。
今回は、まずオブジェクト指向の概念をざっくりつかむということを目指しましょう!多くの生徒さんの指導を通してウケが良かった例えも踏まえて説明していきます!
また、オブジェクト思考についてはこちらの動画でも解説しているので、ぜひ見てみてください!
この記事の目次
オブジェクト指向プログラミングとは?
プログラミングはそもそもプログラムを作ることです。プログラムを作ることはコンピュータが理解できる言葉を並べて、プログラマの意図したとおりの順番でコンピュータが動作するようにすることです。
このとき、プログラムをどうやって表現するかということにも様々な種類があり、代表的なものは以下のとおりです。
- オブジェクト指向プログラミング
- 「モノ」を組み立てるように表現して、コンピュータに動作をさせる
- 手続き型プログラミング
- 上から下まで単調なルールで文章を読むように動作する
- 関数型プログラミング
- 数学の関数のイメージでデータに何かしらの処理をして答えを取得するように動作する
現在ではオブジェクト指向言語が主流になっていますので、プログラミングをする上でオブジェクト指向の概念を押さえておくことは非常に重要です。たとえば、以下のプログラミング言語はすべてオブジェクト指向言語です。
- さまざまなプラットフォームで動作するJava
- Webページに動きを与えるRubyやPHPやJavaScript
- Mac OSやiOSのアプリ開発で使われるSwift
- 商用のプログラミング言語として定評のあるC++
- WordやExcelのマクロとして使用されているVBA
JavaやPHPにおけるオブジェクト指向について説明した記事がありますので、JavaとかPHPは分かる!という方には、こちらの記事をお勧めします。
オブジェクト指向のメリット
オブジェクト指向をどのように使うのか、そのイメージを簡単に見てみましょう。オブジェクト指向は、主にモノと、そのモノができること(役割)を決めます。プログラムの中では、「モノA」、「モノB」のように何種類もの「モノ」を用意します。
そして、「モノA」が、「モノB」に対して「モノBができること」をお願いする形で、コンピュータを動作させます。抽象的で少し分かりづらいと思いますので、例を出して説明しましょう。例えば、オブジェクト指向プログラミングで「すごろく」を作る場合、
- ゲームマスター
- プレイヤー
- すごろく(プレイヤーコマ、サイコロ、すごろく盤を含む)
というように何種類もの「モノ」を用意して、それぞれの「モノ」や「モノができること(役割)」を表現していきます。
まず、「ゲームマスター」は、「プレイヤーに、(何か)指示できる」ことにします。「プレイヤー」は、「すごろくに、サイコロを振るように指示できる」ことにします。オブジェクト指向プログラミングでは、「モノ」の中に「モノ」を入れておいてもよいので、「すごろく」の中に、
- プレイヤーコマ
- サイコロ
- すごろく盤
を作るという表現もできます。「すごろく盤」は、(プレイヤーに)「サイコロ」を振るように指示されたら「コマ」を移動させることにします。(高度なすごろく盤で、プレイヤーがサイコロを振るボタンを押したら自動的にコマが移動するイメージです。)
このように、それぞれの「モノ」に意味を与え、「モノができること(役割)」を作っていく考え方が、オブジェクト指向プログラミングです。意味を与えた「モノ」(ゲームマスターやプレイヤー)という単位で、役割(動作)を決定していければ、わかりやすく開発が進められそうな気がしますね。
オブジェクト指向プログラミングにはさまざまなメリットが有りますが「分かりやすくプログラムを表現できる」というのが最大のメリットです。
オブジェクト指向の原則とは
せっかくですので、少し難しい話も書いておきましょう。オブジェクト指向には原則と呼ばれるものがあります。
- カプセル化
- できるだけ他のプログラムから干渉されないように/他のプログラムに干渉しないようにする仕組み
- 継承
- 再利用性を高める考え方
- ポリモーフィズム
- 振る舞いを様々に変えられる仕組み
原則については、ここで説明するとボリュームが大きくなってしまいますので、別の記事になっています。ぜひご覧ください!
オブジェクト指向を理解していないことへのデメリットとは
前述したようにオブジェクト指向のプログラミング言語が主流となっている現在、オブジェクト指向を理解することは非常に重要です。概念を理解せず、なんとなくわかったつもりでは、オブジェクト指向プログラミングをするときに苦しくなります。
簡単なプログラムの改修程度なら、わかったつもりでも対応できるかもしれません。
しかし、自分でクラスやメソッドを追加したり、機能を追加する場合は、オブジェクト指向を理解していなかったら曖昧なままプログラミングをすることになり、うまくいきません。
もし、正常に動作しなかったら、その原因を探し出すことに苦労するでしょう。そのため、オブジェクト指向については、概念や仕組みをしっかりと把握しておきましょう。
オブジェクト指向を理解しておけば、どんなオブジェクト指向言語でも応用できるようになりますので、少し頑張ってみてくださいね!
オブジェクト指向プログラミングをマスターしよう!
オブジェクト指向言語プログラミングでは、「クラス」「メソッド」「インスタンス」を活用することは必須となります。オブジェクト指向言語を本格的に活用するためには、それぞれの役割を知り、正しく設計することが非常に大切です。
詳しくは、以下の記事で説明していますので、ぜひご覧ください。
オブジェクト指向データベース
オブジェクト指向プログラミングに近い考え方を取り入れたデータベースも開発が進められています。そのようなデータベースを管理するシステムは、オブジェクト指向データベース管理システム(OODBMS)やオブジェクトデータベース管理システム(ODBMS)と呼ばれています。
オブジェクト指向プログラミング言語のデータ構造を採用することで、アプリケーションとデータベースのとの間でオブジェクトを共有できるという仕組みです。
オブジェクト指向プログラミングで大きなデータ(オブジェクト)を取り扱うことになった場合は、オブジェクト指向データベースの採用を検討することになるでしょう。
オブジェクト指向エクササイズ(9つのルール)
オブジェクト指向エクササイズという考え方があります。詳細を説明すると長くなってしまいますので、9つのルールだけ紹介しますね。
- 1つのメソッドにつきインデントは1段階までにすること
- else句を使用しないこと
- すべてのプリミティブ型と文字列型をラップすること
- 1行につきドットは1つまでにすること
- 名前を省略しないこと
- すべてのエンティティを小さくすること
- 1つのクラスにつきインスタンス変数は2つまでにすること
- ファーストクラスコレクションを使用すること
- Getter, Setter, プロパティを使用しないこと
オブジェクト指向プログラミングを始めてみようという今はまだピンと来ないと思いますが、しばらく開発を進めてから振り返ってみると、このルールは大切!と思えるでしょう
オブジェクト指向言語をより深く学ぶなら
オブジェクト指向言語についてある程度ご理解いただけたと思います。
しかし、オブジェクト指向言語はJava、Ruby、PHP、JavaScript、Swift、C++、VBAなど数多くあり、
という方も多いですよね。プログラミング言語選びは今後のエンジニアとしてのキャリアも、決めかねない大切な選択の1つです。人気や他者から薦められたといった理由で選んでしまうと、本当に自分の作りたいものが作れないといったことになりかねません。
そこであなたに最適なプログラミング言語を選ぶために、プログラミング言語診断アプリを用意しました。この診断アプリを使えば、あなたの目的にあった最適なプログラミング言語がわかりますよ。
まとめ
なんとなくオブジェクト指向のメリットはおわかり頂けましたでしょうか?オブジェクト指向は『モノの関係性を作っていく考え方』ということが分かればスムーズに理解できます。
ぜひオブジェクト指向言語の考え方を理解していただいて、プログラミングができるようになりましょう!