オブジェクト指向とは?
オブジェクト指向とは、データや処理手順を1つのまとまりがあるモノと見なし、それらを組み合わせてシステムを構築する考え方のことです。このまとまりがあるモノをオブジェクトと呼びます。
オブジェクト指向の考え方をプログラミングに適用したものを、オブジェクト指向プログラミング(OOP)といいます。単にオブジェクト指向と言った場合も、OOPを指すことが多いです。
特定の機能を持ったオブジェクトをプログラミングで作成し、それを操作することで円滑な開発を実現します。オブジェクト指向とは、「モノを操作する」ことによるプログラミング方式とも言えます。
ただし、オブジェクト指向には明確な定義がなく、熟練のエンジニア間でも認識が別れることがあります。具体的な手法を指す用語ではなく、おおまかな概念を指す言葉だと考えましょう。
オブジェクト指向の関連用語
オブジェクト指向を理解するうえで必要となる関連用語を3つ紹介します。
クラス
クラスはオブジェクトの定義で、オブジェクトを作成するための設計図として用いられます。クラスには以下の要素が記述されます。
- プロパティ
- 属性
- メソッド
- 振る舞い
プロパティはオブジェクトが持つ性質のことです。たとえば、オブジェクトがスマホであれば、サイズやメモリ容量などがプロパティに該当します。一方、メソッドはオブジェクトの機能のことです。スマホであれば、通話や文章入力がメソッドに該当します。
インスタンス
インスタンスとはクラスをもとに作られるものです。スマホの例でいえば、実際に作成したスマホ自体がインスタンスです。クラスからインスタンスを作る工程をインスタンス化と呼びます。
オブジェクトとインスタンスに明確な違いはなく、同じ意味で用いられることもあります。ただし、インスタンスという用語はクラスを実体化する文脈上で用いられるのが一般的です。
メソッド
メソッドはオブジェクトが実行する一連の処理のことです。クラスに記述され、インスタンスとして実現されます。スマホのメソッドが通話であるのは身近な例ですが、プログラミングにおいてメソッドは関数として表現されます。
また、メソッドにはオブジェクトが自発的に行う「privateメソッド」と、ほかのオブジェクトでも実現可能な「publicメソッド」があります。スマホの例でいえば通話はprivateですが、スマホ本体を持ち運ぶ行為はほかのオブジェクトでも可能なためpublicに該当します。
オブジェクト指向のメリット
オブジェクト指向にはどのようなメリットがあるのでしょうか。
記述するコードの量が少なく変更に対応しやすい
オブジェクト指向では、プログラム変更時の工数が少なく済みます。なぜなら、オブジェクト指向は頻繁に変更される部分をクラスに抽出してプログラミングする方法であるためです。
オブジェクト指向ではクラスとして設計図を起こし、それを基にオブジェクトを作成します。クラスを記述する際には、変更が想定される部分を抽出します。その結果、将来プログラムに変更が必要になった際、クラスの一部に変更を加えるだけで済むのです。
また、継承によって記述コード量が少なく済むのも特徴です。継承とは、ほかのオブジェクトの機能を引用することです。一度記述したコードは継承によってほかのオブジェクトでも使えます。
大きな案件では開発工数が削減できる
オブジェクト指向は設計が大変で時間がかかり、工数が増えることがあります。しかし、大規模な案件であれば逆に工数の削減が可能です。
なぜなら、オブジェクト指向は手続き型の開発に比べ、設計思想やシステムの構成を他者に伝えやすいためです。手続き型とは複数の処理をひとまとめにして扱う考え方のことです。
手続き型では一連の処理の流れを把握する必要がありますが、オブジェクト指向であれば各オブジェクトで実現する機能だけを理解すれば済みます。
大勢で開発を行う案件では意思疎通が円滑になり、開発工数が削減するでしょう。特に、開発終盤で多発しがちな不具合の発生を抑えられます。
オブジェクト指向のデメリット
続いて、オブジェクト指向のデメリットを2つ解説します。
設計が難しく、知識や経験が必要になる
上述したように、オブジェクト指向は設計思想を他者に伝えやすいのが特長です。しかし、逆に言えば伝わりやすく設計しなければならないということです。
そのためには綿密に設計を考える必要があり、工数が増大します。開発するソフトウェアの規模が小さく、設計思想を伝えやすい場合はオブジェクト指向は不向きです。
また、設計には知識や経験が求められるため、オブジェクト指向に熟練した人材を確保する必要があります。オブジェクト指向の考え方に精通していないと、かえってコードが複雑になるでしょう。
特に難しい技術を採用する場合は、開発スタッフ間で考え方や知識をよく共有することが大切です。
処理速度が落ちる場合がある
オブジェクト指向でプログラミングした場合、インスタンスの生成に時間がかかるため処理速度が低下するのが難点です。
クラスの中には不要なプロパティが含まれることもあります。それらを含めてインスタンスを生成しなければならないため、無駄に時間がかかり、メモリの消費も大きくなります。
さらに、メソッドの多重呼び出しによって処理速度が低下することもあります。1度呼び出せばよいメソッドを複数回呼び出さないように、プログラムを工夫しましょう。
メリットとデメリットを理解してオブジェクト指向を使おう!
オブジェクト指向とは、データや処理手順を1つのまとまりのあるモノ(オブジェクト)と見なし、複数のオブジェクトを組み合わせることでシステムを構築する方法です。
オブジェクト指向のメリット・デメリットは以下のとおりです。
- 【メリット】
-
- ■変更への対応が容易
- ■大規模案件では開発工数を削減可能
- 【デメリット】
-
- ■設計が難しく人員確保が困難
- ■処理速度が低下するおそれがある
以上を踏まえ、適切にオブジェクト指向を活用しましょう。