コラム
2020/09/08

新入社員の技術勉強日記-オブジェクト指向プログラミングの優れた3つの仕組み-

  • その他

オブジェクト指向プログラミングの優れた3つの仕組み皆さんは「オブジェクト指向」と聞くと、どんなイメージをお持ちでしょうか。
私は、「難しそう」「とっつきづらそう」といったイメージを持ち、長年、敬遠しておりました。しかし、オブジェクト指向は使いこなせれば、システム開発の際にとても役に立つ技術です。今回のコラムは、私と同じようなイメージを持つ方が少しでもそのイメージを払拭してもらえればと思い、まとめました。

リーフレットダウンロード  「CMS(Drupal)」をもっと知りたい方はこちらへ

オブジェクト指向プログラミングの概要

オブジェクト指向とは、ソフトウェアの保守や再利用をしやすくすることを目的とした技術で、最大の特徴は、「部品の独立性を高める」です。

この特徴は、「修正時の影響範囲が小さい」「他のシステムにも再利用可能」といったメリットがあり、オブジェクト指向を理解する上で重要な特徴です。今回は、「部品の独立性を高める」ために導入された「クラス」「ポリモーフィズム」「継承」の3つの仕組みの役割や意味について紹介します。この3つの仕組みはオブジェクト指向の三大要素とも言われており、理解することで、「難しそう」「とっつきづらそう」といったイメージの払拭につながればと思います。
一般的な仕組みの説明をしますので、コードの書き方等、詳しい仕組みは各言語の仕様を確認してください。

仕組み①「クラス」

クラスはオブジェクト指向の最も基本的な仕組みです。 クラスには、対となる「インスタンス」という要素があり、両要素を覚えていただけると良いと思います。クラスは「種類」、インスタンスは「具体的なモノ」を意味し、下記の例では、国が「クラス」、日本やアメリカなどが「インスタンス」に相当します。

例)国:日本、アメリカ、中国・・・

クラスには3つの役割があります。
1つ目は、変数とメソッドを「まとめる」ことです。
たくさんの変数やメソッドを分類し、クラスごとにまとめることで、変数やメソッドが整理されます。整理されることで、変数やメソッドが探しやすくなります。

2つ目は、クラス外部から変数やメソッドにアクセスできないように「隠せる」ことです。指定することでクラス内部でのみ変数やメソッドを使用できるようにすることで、アクセスできる範囲を制限し、修正時の影響範囲を限定できます。

3つ目は、1つのクラスからインスタンスを「たくさん作れる」ことです。
この機能は従来のプログラミング言語では実現の難しいオブジェクト指向特有の機能です。一度、クラスで定義することで、その定義に基づいたデータを複数同時に作成・処理できます。先ほど例としてあげた国を使用して説明しますと、「国」というクラスが定義されており、「日本」の次に「アメリカ」のデータを追加したいとき、必要な分だけ新しいインスタンス作ることを宣言するだけで、プログラムを修正せずに「アメリカ」を追加できるのです。配列だと要素数を変更する必要があるなどプログラムの修正が必要になりますが、クラスとインスタンスは、そのような修正が必要ありません。これは実際にプログラミングをしてみるとわかりますが、とても便利な機能です。

仕組み②「ポリモーフィズム」

ポリモーフィズムは「いろいろな形に変化する」という意味を持ち、呼び出す側は1つで、呼び出される側が複数ある仕組みです。この仕組みは、呼び出される側が増えても、呼び出す側の修正の必要がないことが特徴です。例えば、文字数をカウントするプログラムがあり、最初、入力元はファイルだけであったが、コンソールからも入力できるようにしたい場合、文字数をカウントするプログラム(呼び出す側)内を修正せず、文字を読み込む処理(呼び出される側)の処理を追加するだけで良いという仕組みです。このポリモーフィズムの利用によって、プログラムの拡張性が確保できます。反対に呼び出される側が1つで、呼び出す側が複数ある「共通サブルーチン」という仕組みもあります。プログラムの内容により使い分けて下さい。

仕組み③「継承」

継承は、似た者同士のクラスの共通点と相違点を整理する仕組みです。
複数クラス内で共通する部分を全クラスで記載してもコードの行数が増えるだけです。その共通部分を1つのクラスにまとめることで、コードの重複を排除し、整理できます。共通部分のクラスを「スーパークラス」、そのクラスを利用したクラスを「サブクラス」と呼びます。サブクラスは、利用(継承)するスーパークラスを宣言することで、スーパークラスで定義されている変数やメソッドを定義したことになります。

まとめ

最初、私は実際のコードを読みながらオブジェクト指向を理解しようとし、「どこを見たらいいのか」「何を意味しているのか」という状況に陥りました。この経験からオブジェクト指向に対し、難しいイメージを持っていました。しかし、コードを読む前に各仕組みに対して理解すると、以前よりコードが読めるようになり、「難しそう」というイメージの払拭につながりました。

今回紹介した内容は、オブジェクト指向の技術のほんの一部です。 オブジェクト指向の各仕組みの特徴・役割・利点などを理解することで、様々な言語のプログラミングのコード理解にも対応できます。オブジェクト指向の考え方をきちんと理解し、実はオブジェクト指向は「使いやす」「便利だ」というイメージにつなげてもらえるきっかけになれば嬉しいです。