プログラミングをしていく中で必ず耳にする単語「オブジェクト指向」について、この記事ではみていきます。特にC#はJavaの流れを汲んでいるプログラミング言語であるため、オブジェクト指向の考え方を体現しやすいプログラミング言語になります。
この記事ではオブジェクト指向の全体像を見渡して、その概念や考え方を解説していきます。オブジェクト指向を学ぶことで、ソースコードがより構造化されていくのがわかります。現代プログラミングではオブジェクト指向を基本としてアプリケーションを開発していきます。それくらい必須な知識です。
Contents
オブジェクト指向とは
プログラミングでよく聞く「オブジェクト指向」とはなんなのでしょうか。「オブジェクト指向(Object Oriented Programming、 OOP)」とは「オブジェクト」を中心として、アプリケーションを構築していく考え方です。「オブジェクト」と聞いてもよくわからないと思いますので、ここでは単純に「機能」や「物」程度として思っておけばOKとします。
「オブジェクト指向」の真髄は、様々な処理を専門的に行う「機能(オブジェクト)」をアプリケーションの使用に合わせて作成」していき、必要な時に呼び出して使用することができるようにすることです。
「必要になったときに呼び出せる」というのは、「部品の再利用」という考え方でも知られています。このように「部品」が相互に作用しながら、アプリケーションの処理を行っていくことを「オブジェクト指向」とよんでいます。
現実世界の仕事のイメージ
現実の世界でも、それぞれ専門の知識を持った人が分業して仕事を行っていきますよね。例えば営業は契約を取るために営業し、経理の人は経費や給料など数字を相手に会社のお金を管理し、社長は企業という組織の方向性を決めています。
このように現実の世界では「機能(処理・仕事)」ごとに専門的な仕事をする人々が集まって、特定の分野の問題解決を行っています。こうした考え方がオブジェクト指向に近いといえるかもしれません。
こうした仕事のやり方では「依頼と解決」を行っています。営業の人は移動にかかるお金や接待費用など、「経費の精算」という問題を経理係に「依頼」して精算してもらっています。
オブジェクト指向でも、それぞれの「オブジェクト」が互いに「依頼と解決」を行いながら、アプリケーションで達成したい目標にむけて処理を実行していくのです。このイメージがオブジェクト指向のイメージに近いと思っています。
オブジェクト指向の4つの概念
オブジェクト指向なプログラミングでは、いくつか根底にある概念を基本としてアプリケーションの構築を行っていきます。そのキーワードは以下の4つのキーワードとなります。
- クラス・インスタンス
- カプセル化(実装の隠蔽)
- 継承(インヘリタンス)
- ポリモーフィズム(多相性)
それぞれについて簡単に説明をしながら、オブジェクト指向の全体像を把握していきましょう。
クラス・インスタンス化
これは以前からやっているクラスに関する知識、およびインスタンス化して使用するということになりますね。クラスをインスタンス化して使う、という考え方は「部品化する」という側面と「使いたいときに使う」というオブジェクト指向の基本を体現します。
カプセル化(実体の隠蔽)
カプセル化とは「実装の隠蔽」とも呼ばれている考え方です。「隠蔽」とは「隠す」という意味であり、「実装」とは処理の内容のことを指しています。細かい処理の内容は処理を呼び出す側の外部からは知る必要がないという意味です。
外側には理解できる形式で処理を実行する「窓口」を提供し、処理の内部を「見せない」ように実装するのが「カプセル化」です。publicとprivateを駆使することで、実装の呼出は公開して処理内部は隠蔽するようにします。
継承
継承とはクラスの特性を受け継ぎながら新しいクラスを作成することです。継承を利用することで基底と派生クラスを活用することができ、それを上手くグルーピング化してアプリケーションに必要な「部品」を揃えていくことが「オブジェクト指向」で必要な考え方になります。
ポリモーフィズム(多相性)
ポリモーフィズムは「特定の動作の要求に対して、オブジェクトごとに異なる処理をする」という意味です。「多様性」や「多相性」と呼ばれます。よく例えにあげられるのは「動物の鳴く」という動作が、犬や猫、人間などの種類によって鳴き声が異なる、というものです。
まだ当連載では、まだ扱ってはいませんが、C#ではインターフェースや抽象クラスを駆使して、このような「多様性」を表すことができます。今の段階では言葉だけ覚えておいてもらえれば十分な知識です。
オブジェクト指向を学習しよう
オブジェクト指向の基礎知識について解説しました。オブジェクト指向は「オブジェクト」を中心とした考え方であり、「部品の再利用」を根底として「専門的な問題解決」を行う部品を相互に作用させてアプリケーションの動作を実現していく実装方法です。
クラスや継承、カプセル化、ポリモーフィズムといった考え方を利用して「部品」を構築していきます。現代プログラミングでは、アプリケーションの開発において当たり前となっている考え方ですので、きちっと学ぶ必要がありますが、オブジェクト指向は専門処理をする部品を作ってアプリケーションを構築する」と覚えておけば基本的な意味合いとしては十分です。
熟練したエンジニアでもオブジェクト指向の考え方を苦手としている人がいるので、まずは基本だけでも知っておきましょう。少なくともクラス・継承・カプセル化のイメージを付けておかないといけないと思っています。