多くのプログラミング言語には「オブジェクト指向」の考え方が採用されています。オブジェクト指向の言語で用いられるクラス・メソッド・インスタンスの意味を図解します。まとめオブジェクト指向とは?オブジェクト指向は、プログラムを設計するときの考え方のひとつ。プロパティとメソッドをひとまとめにしてクラスを作り、それを元にオブジェクト(インスタンス)を作成する手法です。詳しく解説していきます。メモオブジェクト指向という考え方自体は、ルールのように明確に定められているわけではありません。プログラムを設計するときのベースとなる考え方として覚えておくと良いでしょう。オブジェクト指向の用語と使い方ここからは、オブジェクト指向で出てくる用語と、自動車を例にあげながら使い方を解説していきます。クラスとは?クラスは、オブジェクトを作成するための設計図です。自動車を例に考えてみると、自動車を作る元となる設計図にあたります。クラスの中は、「プロパティ」と「メソッド」(詳しくは後述します)で構成します。プログラムで表してみます。以下は「Car」というクラスを作成した例です。間に、クラスに含めたいプロパティやメソッドを書いていきます。ここにプロパティやメソッドを書いていくendメモプログラム上での詳しいクラスの使い方はこちら。プロパティとは?プロパティは、オブジェクト(後述します)が持つ性質や属性のことです。自動車を例に例えてみると、メーカーや色、ガソリン量や走行距離などにあたります。プログラムで表してみます。プログラム上では、クラスの中にプロパティの変数をあらかじめ設けておきます。mileage(走行距離)を設けてみました。endendメモプログラム上での詳しい書き方はこちら。メソッドとは?メソッドは、オブジェクト(後述します)内のデータを操作するためのふるまいをまとめたものです。自動車を例に考えてみると、「走る」や「ガソリンを入れる」といったものにあたります。プログラムで表してみます。プログラム上では、クラスの中にメソッドをあらかじめ設けておきます。refuel(給油する動作)を追加してみました。mileage(走行距離)の値を操作しています。endendメモプログラム上での詳しいメソッドの使い方はこちら。オブジェクト(インスタンス)とは?オブジェクト(インスタンス)は、設計図であるクラスから作成した実体を表します。ひとつのクラスをもとに、複数のオブジェクトを作成することができます。自動車を例に考えてみると、設計図であるクラスから作成した「青いトヨタの車」「赤いホンダの車」などの実物を指します。オブジェクトを作成するときに、例えばクラスで定義してあった「メーカー」プロパティに「トヨタ」、「色」プロパティに「青」を入れることで、クラスから「青いトヨタの車」のオブジェクトを作成することができるというイメージ。このように、クラスの中であらかじめ設計してあった「プロパティ」や「メソッド」は、オブジェクト(インスタンス)を作成することによって活きてきます。プログラムで表してみます。それを「car1」と「car2」の変数に代入しています。これでひとつのクラスから複数のオブジェクトを作成できたことになります。Car.newメモプログラム上での詳しいオブジェクト(インスタンス)の使い方はこちら。まとめて図にすると、以下のようになります。具体的にコードを書いていないと完全に理解するのは難しいですが、イメージをつかんでおきましょう。オブジェクト指向のメリット多くのプログラミング言語でオブジェクト指向の考え方が採用されているのには、以下のようなメリットがあるからです。プログラムの変更に柔軟に対応できる。同様の機能はコードが使い回せるので、コードの記述量が減り、開発工数が削減できる。改修時の影響範囲が限定され、不用意なバグが減らせる。大規模な開発において、複数人で分担して開発しやすい。具体的に自動車の燃料タンクを2倍にする変更を行うとしましょう。プログラム上では「Car」クラスから「青いトヨタの車」と「赤いホンダの車」の2つのオブジェクトを作成したとします。このとき、通常であればプログラム上で「青いトヨタの車」か「赤いホンダの車」が出てきているコードを探して、ひとつずつコードを修正していく必要があります。オブジェクト指向で開発をしていれば、元となる「Car」クラスの燃料タンクのコードを修正するだけで、「Car」クラスから作成された「青いトヨタの車」と「赤いホンダの車」オブジェクトの仕様がまとめて変更できます。「Car」クラスさえあれば、その中の詳しいコードを知らなくても誰でも簡単に自動車のオブジェクトを作成することができます。これによって複数人で分担して開発にあたることができるようになります。不用意に「Car」クラスをいじらない限り、他の車のオブジェクトに影響が出ないので、修正の影響範囲を限定することができ、開発時の予期しないバグを防ぐことができるようになります。小さなプログラムであれば問題ありませんが、商用で大規模なプログラムになると、コードをすべて追いきれなくなったり、複数人で開発することがあったり、開発に時間がかかったりします。オブジェクト思考の言語を取り入れることで、それらをカバーし、安全かつ安心、そして便利に開発を進めやすくなるということです。デメリットとしては、プログラム設計時により高いスキルを要することや、設計に時間がかかる、ということが挙げられます。オブジェクト指向の特徴ここからはさらに理解を深めたい方向け。オブジェクト指向の特徴として、よく挙げられる原則を1つずつ解説していきます。使われない処理を隠してカンタンに使えるようにすることを「カプセル化」と言います。自動車を例に考えてみましょう。アクセルを踏んだときに車体の中で起こっているしくみは見えないようになっていますね。内部の処理は理解していなくても、「アクセルを踏めば進む」という使い方さえ知っておけば、誰でもカンタンに車を操作できます。プログラム上でも同じように、対象物を操作するために必要な情報だけを外部から見えるようにして、残りをカプセルに包んで内部の処理を隠してしまうことをカプセル化と言います。しておくことで、誰でもカンタンにその機能を使えるようにできるだけでなく、カプセルの内部にあるデータを勝手に書き換えたり参照できないようにして、他のプログラムから干渉できないようにすることができます。上位の機能を引き継いで使うことを「継承」と言います。自動車を例に考えてみましょう。自動車の設計図を引き継いで、「赤いトラック」や「青いダンプカー」を作るイメージです。アクセルやブレーキ、ミラー、ハンドルといった機能はすべての自動車において共通です。さまざまな種類の車を作成する、という考え方になります。これで似たようなコードをひとまとめにすることができたり、一度作成したコードを再利用できるようになったりします。結果的にコード量が減って冗長しないようにすることができます。ポリモーフィズム複数のいろんな種類の対象物に対して同じメッセージを送れば、同じ目的の挙動が行われるようにすることをポリモーフィズムと言います。それぞれに対して「クラクションを押す」という動作を与えたとします。するとメーカーによって音は違いますが、「大きな音が鳴る」という目的は同じです。このようにどのような種類の車であっても「クラクションを押す」と「大きな音が鳴る」ということを決めておくことで、使う側は同一のルールでさまざまな対象物を利用することができるようになるというわけです。具体的なプログラム上の話で言うと、複数のクラスで同じ名前のメソッドを使えるようにしておくことです。どのクラスであっても同じ名前のメソッドを呼び出せば、処理は違えど同じ目的の動作が行われるようになっているイメージになります。いう解説でした!ここまでの内容をまとめておきます。「オブジェクト指向」は、プログラムを設計するときの考え方のひとつで、「プロパティ」と「メソッド」をひとまとめにして「クラス」を作り、それを元に「オブジェクト」を作成する手法。「クラス」は、オブジェクトを作成するための設計図。「プロパティ」は、オブジェクトが持つ性質や属性のこと。プログラム上では、クラスの中にプロパティの変数をあらかじめ設けておく。「メソッド」は、オブジェクト内のデータを操作するためのふるまいをまとめたもの。プログラム上では、クラスの中にメソッドをあらかじめ設けておく。「オブジェクト(インスタンス)」は、設計図であるクラスから作成した実体。ひとつのクラスをもとに、複数のオブジェクトを作成できる。冗長なコードがなくなるので、開発工数が削減できたり、複数人で開発するときに分担しやすくなったり、予期しないバグを防ぐことができる。フリーランスエンジニア。複数のスタートアップ企業でウェブサービス開発に参画。その後、会社創業期の開発マネージャーの経験を経てフリーランスに。プログラムや文章を書いて暮らしています。