オブジェクト指向とは?初心者向けに分かりやすく解説

  • 2022.04.21
       
オブジェクト指向とは?初心者向けに分かりやすく解説

オブジェクト指向とは?

オブジェクト指向は、プログラミングに関する考え方で、「ある共通点を持ったもの」をひとまとまりにして、さらにその「もの」と「もの」との関係性を定義していくことでシステムを作り上げるシステム構成の概念を指します。
しかし、あくまで概念であるため、オブジェクト指向に明確な答えがあるわけではありません。
そもそも、「オブジェクト」とは、直訳すると「もの」、「対象」という意味ですが、プログラミングにおいてはデータと処理の集まりを意味しています。
例えば、ゲームのシステムを作るうえで、ゲームの登場人物をそれぞれ一つの「もの」として定義し、一つひとつがどのように動作するかをプログラミングしていきます。
オブジェクト指向を使わない手法もありますが、1から全てを作ろうとすると大変です。
しかし、一度「もの」を作り、ルール付けをすれば後で簡単に変更や追加ができるため、オブジェクト指向のプログラミングが主流になっています。

オブジェクト指向は例えるとわかりやすくい

具体的なものに例えることで、オブジェクト指向が理解しやすくなるでしょう。
オブジェクト指向は、たびたび「車」で例えられます。

「車」でオブジェクト指向を理解しよう

運転免許を持っている人なら、車の基本的な操作方法を知っていて、実際に運転できるでしょう。
しかし、車の免許を持っている人全員が車の動く仕組みを知っているわけではなく、むしろ、車の構造などに関する知識は持っていない人のほうが多いでしょう。
これはどういうことかというと、車を運転するうえで、車の仕組みや構造の知識は必要ないということです。
つまり、車という「もの」と、車の操作という「役割」を切り分けて考えており、まさにオブジェクト指向の考え方だと言えます。

オブジェクト指向と手続き型の違い

「手続き型プログラミング」とは、上から順番にコンピューターが実行すべき命令や手続きを記述していくプログラミングのことです。

車のゲームを例に考えてみましょう。
「プリウスはAボタンを押すと前進し、Bボタンで停止する」といったプログラムを手続き型で記述したとします。
ジムニーもアルファードもテスラも同じ挙動をする場合、一つひとつを同じように手続き型プログラミングで記述していっても構いません。
ですが、これが100車種、1000車種になると、一つひとつプログラムを書いていると作業に膨大な時間がかかってしまいます。
また、もし、Bボタンを停止から後進への仕様変更があった場合は、一つずつ書き直す必要が出てきます。

こういった非効率な作業を解消するのが、オブジェクト指向のプログラミングです。
オブジェクト指向では、あらかじめ車という「もの」を、「Aボタンを押すと前進し、Bボタンで停止する」と定義しておきます。
これによって「Bボタンで後進する」という仕様変更があっても「車」のプログラムの書き換えのみで済むのです。
ジムニーやアルファード、テスラのプログラムを記述するにも、「車」のプログラムを利用し、デザインや色を変えるだけで済みます。

大規模な開発向き

前述したような特徴から、オブジェクト指向は大人数が携わる大規模な開発向きだと言われます。
手続き型プログラミングだと、そのプロジェクトに関わっているエンジニア全員がプログラムの内容をわかっていなければなりませんが、オブジェクト指向であれば、「車のプログラム」を作成したエンジニアがその内容を理解していればいいので、他のエンジニアは「Aボタンで前進し、Bボタンで停止する」ことを知ってさえいれば問題ないのです。

複雑化への対応

オブジェクト指向への理解を深めるため、スマホ用のオセロゲームを例にあげて説明します。
これは、ユーザーとコンピュータが操作する石や時間を計るタイマーといった付随コンテンツも含めると多くのパーツで構成されています。
手続き型プログラミングで作る場合、これらを一括りにしてコーディングしていきますが、オブジェクト指向では、ゲームを構成するパーツごとに1つの「もの」とみなして開発します。
個々に開発されたパーツは単独でも動作しますが、連携も可能なので、より複雑な演出や操作を追加していくこともできます。
このことからオブジェクト指向という概念は、ゲームの開発以外のプログラミングやプログラミング以外にも応用できる考え方だといえます。

関連用語

ここからは、オブジェクト指向の概念を理解する上で重要な用語を紹介していきます。

オブジェクト
前述のとおり、オブジェクトは「もの」という意味で、プログラミングにおいては、データや処理の集まりを指します。
たとえば、サッカー選手というオブジェクトは、「名前」「年齢」「身長」「体重」などのデータのほか、「蹴る」「走る」などといった処理を含みます。

クラス

データと処理をひとつにまとめる機能で、オブジェクトの設計書のようなものです。

作りたいものの共通点を探すとわかりやすいです。

インスタンス
設計図であるクラスから生成した実体のことです。
たとえば「車」というクラスをもとに「トラック」や「パトカー」などのさまざまな種類の車を作るとすると「トラック」や「パトカー」がインスタンスに該当します。

プロパティ

オブジェクトが持つデータのことです。

プロパティは日本語で「属性」という意味で、サッカー選手というオブジェクトには「名前」「年齢」「身長」「体重」「所属チーム」などのプロパティが含まれていることがわかります。

メソッド
オブジェクトが持っている処理を指します。
サッカー選手というオブジェクトで言うと、「蹴る」「走る」など、オブジェクトが行う処理のことです。

オブジェクト指向の三原則

継承
同じようなプログラムをまとめることでコードを再利用しやすくする仕組みです。
似たようなオブジェクトを複数作る際、継承を使うことにより、同じ機能を実装できます。
たとえば、ゲームを作成した際、「車」に「トラック」も追加する場合、基本操作は同じであるため、追加も簡単にできます。

カプセル化
クラスをもとに開発された「もの」自体は複雑な仕組みで成り立っていますが、その詳細までを開発に関わる全員が理解するのは困難であるため、複雑な仕組みを持った「もの」を抽象化する必要がありますが、その作業を「カプセル化」です。
前述のとおり、車の内部には複雑な仕組みがありますが、抽象的に捉えることで、車に関する専門知識を持たない人でも運転できます。

ポリモーフィズム
個々のパーツごとに開発された「もの」を組み合わせて連動させる必要があります。
全てのパーツが一つの指示で、定められた動きをする仕組みを作ることを「ポリモーフィズム」と言います。

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

プログラミングの全体像を把握しやすい
プログラム全体の構造を明確に把握してプログラムを設計でき、全体イメージを練ってから細部を練っていくという企画の進め方ができます。

エンジニア同士で情報を共有しやすい
オブジェクト指向での開発では、多くのパーツで構成されるものでも細部まで作業者が理解しながら作業を進められるため、作業者同士で認識の共有をしやすくなり、スムーズな作業につながります。

再利用しやすい
オブジェクト指向で開発された製品やクラスは、再利用しやすく、新しく同じような仕組みの製品を作る場合、開発作業の効率化が図れます。

オブジェクト指向のプログラミング言語

ここからは、代表的なオブジェクト指向言語を紹介します。

Java
オブジェクト指向言語の代表格で、プラットフォーム開発など幅広く使われています。
特にデスクトップアプリ、Androidアプリの開発で多く使われている言語です。

PHP
PHPは、Webアプリ分野で活躍している言語です。
文法が比較的簡単で、初心者でも習得しやすいのが特徴です。

JavaScript
Webアプリ分野のフロントエンドで活躍している言語で、Webサービスを開発には必要不可欠です。

フロントエンド

サイトの表側のことで、レイアウトや表示後の処理を指します。

Python
プログラミング初心者から上級者まで広く使われている言語です。
シンプルで覚えることが少ない構文で、1行で多くの処理を記述でき、Webアプリやゲームの開発だけでなくAI開発などにも使用されています。

C++
C++は、C言語をオブジェクト指向で書けるようにした言語で、スマホアプリやゲームの開発など、商用のプログラミング言語として重宝されています。

Swift
iOSアプリ開発で使われる言語です。
文法が比較的簡単であるため、初心者でも扱いやすいのが特徴です。
従来はiOS分野の開発にはObjective-Cの使用が主流でしたが、習得難易度や処理速度という点で優れているSwiftが次第に主流になっていきました。

Ruby
日本人によって開発されたプログラミング言語で、コードの量も少ないので初心者にも扱いやすい言語です。
主にWEBアプリの開発に使用されます。

終わりに

ここまで、オブジェクト指向について、その考え方やメリットについて解説してきましたがいかがでしたか?
オブジェクト指向は特に大規模な開発では活用するメリットが大きく、今ではプログラミングを用いる開発現場において、欠かせない存在になっています
本記事を通してオブジェクト指向に興味を持った方は、ぜひ勉強してみてください。

     

Otherカテゴリの最新記事