入門

第13章 オブジェクト指向

  • このエントリーをはてなブックマークに追加

この章では、プログラミングにおけるアプローチの1つである「オブジェクト指向」について学びます。PHPのみならず、他のプログラミング言語でも使われている重要な考え方です。「考え方」というと難しそうな感じがしますが、ビジュアルで見てみると意外に簡単です。

目次

オブジェクト指向って?

もしかしたら、「オブジェクト指向」という言葉は聞いたことがあるかもしれません。
簡単にまとめてしまうと、関連した変数や関数を1つにまとめて「オブジェクト」を作り、これをベースにして類似したオブジェクトを効率良く複製する仕組みです。
工場での大量生産みたいなイメージです。

言葉だけだとイマイチしっくりこないかと思いますので、図を交えて解説します。よりイメージし易くするため、これまでの章と同様にECサイト上の商品を想定し、「オブジェクト」として表現していきます。

まずは、全商品のベースとなるオブジェクトを作成します。

図1:ベースオブジェクトのイメージ

ベースオブジェクトのイメージ

全商品の金型となるので、共通して必要となりそうな4つの要素を考えてみました。

  • ジャンル・・・商品のジャンル。本、映画DVD、CD、電化製品、靴など。
  • 商品名・・・商品名。本なら書名、映画DVDだったらタイトル。
  • 値段・・・販売する価格
  • 商品説明・・・商品の特徴をお客様に伝えるための説明

このようなオブジェクトの持つ要素を「プロパティ」と呼びます。

全てのオブジェクト(商品)がこの4つのプロパティを必ず持っているとしたら、そのプロパティの値を取得するための関数を用意していきます。各プロパティに対応する4つの関数を作成します。

  • getName・・・商品名を取得
  • getPrice・・・値段を取得
  • getGenre・・・ジャンルを取得
  • getDescription・・・商品説明を取得

このようなオブジェクトが持つ関数のことを「メソッド」と呼びます。

ポリモーフィズム

必要となる「プロパティ」と「メソッド」が出てきたところで、ベースとなるオブジェクトの形が見えてきました。

図2:ベースオブジェクトのプロパティとメソッド

ベースオブジェクトのプロパティとメソッド

では、このオブジェクトから色々な商品を作っていきましょう。
まずは映画DVDのオブジェクトを作り、プロパティを設定して1つの商品の形にします。

図3:映画DVDオブジェクトの作成

映画DVDオブジェクトの作成

この流れで、別タイトルの商品を作っていくことができます。

図4:色々な映画DVDオブジェクトを作成

色々な映画DVDオブジェクトを作成

さらに同じ容量で、ジャンルの異なる「本」「洋服」「パソコン」などのオブジェクトを作ることができます。

図5:様々な商品オブジェクトを作成

様々な商品オブジェクトを作成

ベースのオブジェクトから、様々な商品のオブジェクトを作る様子をイメージできたでしょうか。
このように色々な商品を簡単に複製して作れると便利ですし、コードの無駄を省くことにも繋がります。

上記で作成した商品のオブジェクトは、「映画DVD」や「本」であれ、「洋服」、「パソコン」であっても同じメソッドを使って商品名や値段を取得することができます。
このように複数のオブジェクト間でメソッドを統一しておくと、どのようなオブジェクトでも「名前を取得するにはgetNameメソッドを呼べば良いんだ」という共通のルールを作ることができます。
このオブジェクト間で共通の名前を持たせて、共通ルールをつくる考え方をオブジェクト指向では「ポリモーフィズム」と呼びます。

継承

ベースのオブジェクトは必要に応じて、拡張することができます。
例えば「本」であれば、「著者」「出版社」「出版日」などの独自の属性があります。
この属性に対応するためには、ベースオブジェクトを「親」として、「本」のために新しく「子」となるオブジェクトを作ります。図6のようなイメージです。

図6:継承のイメージ

継承のイメージ

継承した「子」オブジェクトは、「親」オブジェクトのプロパティとメソッドを自動的に引き継ぐことができるので、改めて宣言する必要はありません。
したがって、図6のように追加したいプロパティ、メソッドのみを宣言すればOKです。

新しく作った「本」のベースオブジェクトから商品を作ると、次のようなイメージになります。

図7:「本」のベースオブジェクトから商品を作成

「本」のベースオブジェクトから商品を作成

まとめ

この章では「オブジェクト指向」の考え方を解説してきましたが、ここまでは「こういうものか」という大体のイメージが掴めていれば大丈夫です。次章で、コードの形へ落とし込んでいきます。

この章で学んだこと

  • オブジェクト指向の考え方
  • メソッド名を統一して共通のルールをつくる「ポリモーフィズム」
  • オブジェクトを必要に応じて拡張できる「継承」
  • このエントリーをはてなブックマークに追加
前のページへ 一覧ページへ一覧 次のページへ