はじめに
オブジェクト指向は、多くのプログラミング言語で採用されている考え方です。
ただ、「オブジェクト指向とは何か」と聞かれると意外と説明が難しい言葉でもあります。
この記事では、オブジェクト指向が何を解決するための考え方なのかを整理します。
プログラムは複雑になる
小さなプログラムであれば、
$userName = "Taro";
echo $userName;
のように、データと処理が分かれていても特に困りません。
しかし機能が増えてくると、
- ユーザー情報
- 注文情報
- 決済情報
など様々なデータが登場します。
そして、それぞれに対して処理も増えていきます。
すると、
「このデータはどこで変更されるのか」
「この処理は何に関係しているのか」
が分かりにくくなります。
関係するものをまとめる
そこで出てくるのがオブジェクトという考え方です。
例えばユーザーであれば、
ユーザー
├ 名前
├ メールアドレス
├ 名前を変更する
└ メールアドレスを変更する
のように、
ユーザーに関係するデータと処理をひとまとめにします。
注文であれば、
注文
├ 商品
├ 金額
├ 注文する
└ キャンセルする
のようになります。
オブジェクト指向がやろうとしていること
オブジェクト指向は、
データと、そのデータを扱う処理をひとまとまりとして扱う考え方
です。
そして、そのオブジェクト同士を組み合わせながらプログラムを作ります。
例えば、
ユーザー
↓
注文を作る
注文
↓
決済を行う
決済
↓
結果を返す
のような形です。
システム全体をひとつの巨大な処理として考えるのではなく、それぞれの役割を持ったオブジェクトの集まりとして考えます。
なぜ扱いやすくなるのか
ユーザーに関する処理はユーザーの中に置く。
注文に関する処理は注文の中に置く。
そうすると、
「この処理はどこにあるのか」
を追いやすくなります。
また、変更の影響範囲も把握しやすくなります。
プログラムが大きくなるほど、この整理が重要になります。
クラスは設計図
オブジェクト指向の話になると、クラスという言葉も出てきます。
クラスはオブジェクトを作るための設計図です。
例えば、
class User
{
public string $name;
}
というクラスがあると、
$user = new User();
のようにオブジェクトを作れます。
ただし、
クラスそのものがオブジェクト指向の本質ではありません。
オブジェクト指向の中心にあるのは、
「関係するデータと処理をまとめる」
という考え方です。
おわりに
オブジェクト指向は、クラスや継承のテクニックではなく、プログラムを整理するための考え方です。
データと処理をひとまとまりとして扱い、それぞれの役割を明確にしながらシステムを組み立てていきます。
そのため、オブジェクト指向を理解するときは、
「継承とは何か」
より先に、
「何をひとまとまりとして扱うべきか」
を見る方が理解しやすいと思います。