プログラマー初心者必読!オブジェクト指向とは

RubyやJava、Pythonをはじめとするオブジェクト指向のプログラミング言語は、今や当たり前の存在となってきました。
これらは業務で使われる機会も多いプログラミング言語ですが、言語の特徴や機能は理解していても、オブジェクト指向そのものの考え方を学んでいる人はそう多くありません。
しかし、オブジェクト指向を理解していないと技術書が読みづらく、あいまいな理解でしか知識が身につかなくなってしまう可能性があります。
そこで今回は、プログラマー初心者のためにオブジェクト指向の特徴について解説します。

目次

オブジェクト指向は明確な説明が難しいもの

pixta_37443585_M

まず大前提として理解しておきたいのが、オブジェクト指向は明確な説明が難しい「概念」であるということです。例えば「愛」という概念は、大まかな共通理解はあっても、時代や国、価値観、人によって答えが異なるものです。
オブジェクト指向も、愛のようにある種あいまいな概念であり、人によっても説明の仕方が異なってくるものなのです。

そのため、オブジェクト指向の説明をしている技術書やサイトは、それぞれ説明が微妙に異なっています。
色々と調べる中で理解できたと思ったとしても、別の解説を読むと説明が異なり、何が正しい情報か分からず混乱してしまうこともあるでしょう。
しかし、明確な答えがない概念であるからこそ、大まかな雰囲気を理解するだけでも十分なのです。
そして、オブジェクト指向のプログラミング言語を駆使する中で、自分なりの答えを見つけ出せば問題ありません。

オブジェクト指向の特徴

オブジェクト指向のプログラミングとは、プログラミングを手順ではなく、モノの作成と操作として考える方法です。
例えば飛行機のゲームを作成する場合、「飛行機」というモノをプログラミングで作成して、Aボタンで走行、Bボタンで停止という仕組みを定義しておきます。そして、赤い飛行機を作る際は「飛行機」をコピーして外装を赤にプログラミングし、青の場合は「飛行機」をコピーして外装を青くする、というイメージです。
通常のプログラミングでは「赤い飛行機はAボタンで走行、Bボタンで停止」「青い飛行機はAボタンで走行、Bボタンで停止」…と一つひとつプログラミングしていきます。しかし、何十、何百もの飛行機の種類がある場合、一つひとつプログラミングしていくのは大変な労力が必要です。さらに、途中で仕様変更があれば全てのプログラミングを見直さなければならず、効率的ではありません。オブジェクト指向は、大人数で同じようなモノを開発する時に便利なプログラミングの考え方なのです。
このオブジェクト指向は古いプログラミング言語だと思われている方も多いですが、現在でも開発現場のメインストリームとして活躍しています。オブジェクト言語は初期の関数型言語のLispの影響を大きく受けています。そして、現在注目を集めている並列処理に優れる関数型言語は、オブジェクト指向の影響を受けているのです。そのため、関数型言語を学ぶ際にもオブジェクト指向の理解が役立ちます。
オブジェクト指向の理解を深める上では、「オブジェクト」と「クラス」の考え方をおさえておく必要があります。それぞれについて具体的に見ていきましょう。

オブジェクトとクラスとは

Developing programming and coding technologies. Website design. Cyber space concept.
オブジェクトとは「モノ」のことです。
飛行機や車といった実体のあるものから、天気や温度など実体のないものまで、辺りにある全てのモノを指します。
このオブジェクトは、プログラミングを行う上での単位として扱われます。
オブジェクト指向では、共有する性質を持つ仲間を抽出し、分類するという特徴があります。
その分類をクラスと言い、名前、属性、動作という3つの要素を持ち合わせます。
オブジェクト指向には「継承」「カプセル化」「ポリモーフィズム」という三大要素があります。
オブジェクトは具体的なモノから抽象的なモノまで、様々に分類されます。

例えば「生き物→哺乳類→犬→チワワ」といったように、オブジェクトが抽象化から具体化されているとします。
それぞれのクラスの「生きている」「動く」「食べる」といった同じ特徴を共有する関係を「継承」と言います。
オブジェクト指向では、抽象クラスから具体クラスに特徴や機能を継承することができます。
「カプセル化」は、オブジェクトの機能とデータの範囲を明確にすることです。
別のオブジェクトから直接利用される必要のないモノを隠し、利用する場合は外部から操作するために作られた処理を設けます。
これにより、プログラムが壊れにくくなります。
「ポリモーフィズム」は多態性という意味です。例えば犬が吠えるという場合では、犬種や個体の性格によって吠える動作の結果が異なることがあります。

吠えるという指示を出した場合、犬によって吠え方を変えたり、吠え方が違う犬を用意したりすることで、多様なあり方に対応することができます。
つまり、クラスによって、同一の操作で異なる処理が行える性質をポリフォーリズムと言います。

オブジェクト指向のメリット

オブジェクト指向の一番のメリットは、メンバーと認識を共有しやすいという点です。
モノ単位でプログラムを組むため、仕様を追加したり変更したりする際にも、具体的に何を変更すべきか伝えやすくなります。
そのため、大人数が関わるプロジェクトではオブジェクト指向で情報を共有することで効率化を図れます。
また、プログラミングの書き換えが簡単という点もメリットです。
後々に変更が発生する可能性のあるプログラムの場合、オブジェクト指向で作ると開発が楽になります。

オブジェクト指向をマスターしよう

オブジェクト指向の概要を解説しましたが、何となくイメージはつきましたでしょうか。
まずはざっくりとしたイメージをつかみ、実際にオブジェクト指向のプログラミングを組んでみてください。
そうすると、徐々にオブジェクト指向への理解が深まっていくと思います。
そして、技術書なども参考にして知識を身につけ、スキルアップにつなげてみてください。

コラム著者情報

moveIT運営事務局

moveIT!は機械的なマッチングだけでなく、人との繋がりを重視したIT専門の求人紹介サポートサービスです。
フリーランスの他、正社員・契約社員・派遣・アルバイト・インターン、またはIT業界への就職転職希望者、IT業界での将来独立・起業を目指している方々など、働き方や経験者/未経験者を問わず幅広く総合的に支援するサービスをご提供しております。