オブジェクト指向とはなにか
オブジェクト指向とは、プログラムを構成するための考え方です。 オブジェクト(もの)同士の相互作用とみなします。
- リモコンでテレビを操作するイメージ
- 自動車というオブジェクトを作りたい場合、ガソリンやブレーキなどの要素が必要です。また、具体的にどのタイミングでブレーキをかけるか、どれくらいの速度で構成するのか、などの命令を加えることで、「モノを動かす」ことができます。
関連用語
ここからは、オブジェクト指向の概念を理解する上で重要な用語を紹介していきます。
オブジェクト
前述のとおり、オブジェクトは「もの」という意味で、プログラミングにおいては、データや処理の集まりを指す。
たとえば、車というオブジェクトは、「メーカー」や「色」などのデータのほか、「前進する」「停止する」などといった処理を含む。
クラス
クラスは、オブジェクトを作成するための設計図のこと。
自動車を例に考えてみると、自動車を作る元となる設計図にあたります。
インスタンス
設計図であるクラスから生成した実体のこと。
たとえば「車」というクラスをもとに「トラック」や「パトカー」などのさまざまな種類の車を作るとすると「トラック」や「パトカー」がインスタンスに該当します。
プロパティ
プロパティは、オブジェクトが持つ性質や属性のことを指す。
自動車を例に例えると、メーカーや色、ガソリン量や走行距離などにあたります。
メソッド
オブジェクトが持っている処理を指す。
自動車を例に考えると、「走る」や「ガソリンを入れる」といったものにあたります。
オブジェクト指向の原則
1. カプセル化
クラスをもとに開発された「もの」自体は複雑な仕組みで成り立っていますが、その詳細までを開発に関わる全員が理解するのは困難であるため、機能をひとまとまりにし、直接 使われない処理を隠して簡単に使えるようにすることををカプセル化(=抽象化)という。
前述のとおり、車の内部には複雑な仕組みがありますが、その仕組みを理解していなくとも、「アクセルを踏めば進む」という使い方さえ知っておけば、誰でも簡単に車を動かすことができます。
2. 継承
親の機能を引き継いで子を生成し、さらには子には独自の機能を追加できるという便利なしくみのこと。
似たようなオブジェクトを複数作る際、継承を使うことにより、同じ機能を実装できる。
たとえば、ゲームを作成した際、「車」に「トラック」も追加する場合、基本操作は同じであるため、追加も簡単にできます。
3. ポリモーフィズム
「多態性」などと呼ばれ同じ形式の指示で異なる処理を発生させるしくみのこと。
複数のいろんな種類の対象物に対して同じメッセージを送れば、同じ目的の挙動が行われるようにすること。どの種類の車であっても「アクセルを踏む」と「前進する」ということを決めておくことで、使う側は同一のルールでさまざまな種類の車を操作することができるようになります。
4. 単一責任の原則
オブジェクトは1つの責任のみを果たすように設計するべきという考え方。
オブジェクトが対象Aと対象Bに関して責任を負ってしまっていた場合、それはAの動作のためのコードとBの動作のためのコードが一体になってしまっていることになる。そうすると、Aの動作に関する改修をしたつもりが、その影響がBにも及んでしまいバグが生まれてしまう可能性がある。
複数の対象に対して責任を負っている部品がある場合、その部品を、責任を負う対象の数に分割してあげることで、アンチパターンを回避することができます。
オブジェクト指向を使うことのメリット
- プログラムの再利用性を高めることができる
- 変更に対して柔軟に対応できるようになる
- 理解しやすいプログラムを作ることができる
- ソフトウェアを楽に作ることができる
オブジェクト指向のプログラミング言語
Java
オブジェクト指向言語の代表格で、プラットフォーム開発など幅広く使われています。
特にデスクトップアプリ、Androidアプリの開発で多く使われている言語です。
PHP
PHPは、Webアプリ分野で活躍している言語です。
文法が比較的簡単で、初心者でも習得しやすいのが特徴です。
JavaScript
Webアプリ分野のフロントエンドで活躍している言語で、Webサービスを開発には必要不可欠です。
フロントエンド
サイトの表側のことで、レイアウトや表示後の処理を指します。
Python
プログラミング初心者から上級者まで広く使われている言語です。
シンプルで覚えることが少ない構文で、1行で多くの処理を記述でき、Webアプリやゲームの開発だけでなくAI開発などにも使用されています。
C++
C++は、C言語をオブジェクト指向で書けるようにした言語で、スマホアプリやゲームの開発など、商用のプログラミング言語として重宝されています。
Swift
iOSアプリ開発で使われる言語です。
文法が比較的簡単であるため、初心者でも扱いやすいのが特徴です。
従来はiOS分野の開発にはObjective-Cの使用が主流でしたが、習得難易度や処理速度という点で優れているSwiftが次第に主流になっていきました。
Ruby
日本人によって開発されたプログラミング言語で、コードの量も少ないので初心者にも扱いやすい言語です。
主にWEBアプリの開発に使用されます。