オブジェクト指向

PHPとオブジェクト指向

PHPは修得が容易であるとよく言われます。構文も比較的分かりやすく、また型を意識しなくても実装が可能なために初心者にもとっつきやすい事が一つの理由です。標準関数もたくさん存在し、コンパイルも必要ない。そしてWEBアプリ開発に特化している。Javaなどと比べると、WEBアプリの構築で同じ事をするのに遥かにコーディング量も少なくなります。なので開発にかかる時間がはるかに短くできる。そんなことでWEB言語としては一気に普及したのです。

PHP自体はオブジェクト指向言語ではありません。しかし世の主流言語がオブジェクト指向へ向かう流れがあり、そんな中でPHPもバージョン3でオブジェクト指向に対応しました。PHPのオブジェクト指向は後付のものなのです。

なのでJavaなどに代表されるオブジェクト指向言語には到底及ばず、かなり中途半端なものでした。
その後、PHP4、PHP5とバージョンアップのたびにオブジェクト指向部分の強化が図られ、現在のバージョンではかなり本格的にオブジェクト指向実装が可能なところまで来ています。この先もどんどんとオブジェクト指向化が進んでいくと思われます。

オブジェクト指向を習得するか否か

オブジェクト指向は大規模開発向けというイメージがあると思います。正直、小さいプログラムほどオブジェクト指向のメリットは現れにくいと思います。わからないうちは難しそうでとっつきにくいイメージを持つかもしれません。覚えることが増えるのも事実です。

ではオブジェクト指向のメリットはなんでしょうか。
本質的なことはオブジェクト指向によるプログラミングを実践し、肌で感じることでわかってきますが、一般的な表現でいうと、保守性が上がる、変更に強くなる、再利用性が上がるというような事になります。
抽象的でわかりにくいですよね。なので今はそれは置いておいて言うと、単に「楽しい」要素があるということが言える思います。
何が楽しいか?
オブジェクト指向というのは人間世界により近いプログラミングアプローチと言えます。かなり大雑把に言うと、オブジェクト指向では登場人物がたくさん登場します。登場人物達は性格やできることが異なり、それぞれ異なる性質を持ちます。そしてそれぞれの登場人物に命令したり、登場人物同士が会話したりしながら処理が進んでいく、というようなイメージです。

どのような登場人物を登場させるか、たくさん登場させてひとりひとりのできることは小さくするのか、それとも多くのことができる人を作るのか、そのへんは実装者の好みとか方針が表れます。そして、上記のようなメリットを享受できるかどうかは実装者の腕とセンスが問われるわけです。っていうとオブジェクト指向難しそうってなるかもしれませんが、そこが楽しいわけです。

逆に言えば、多少頭を使う必要があり、従来のような上から順を追って逐次実装していくような形のプログラミングからすると、先に「考える」というプロセスが入ることになり、難しいというイメージにつながっているかもしれません。これを楽しいと感じられない場合はオブジェクト指向は向かないかもしれません。でも、とりあえず形だけでもやるのは難しくないので、とりあえずの取っ付きは決して難しいものではありません。
一度はまればオブジェクト指向は奥が深く、やればやるほど、こだわればこだわるほど質の高いものができるし、自分がレベルアップしている事を実感出来ます。
そのへんが楽しいわけです。

今の話に少しでも興味がわいたらやって見る価値はあります。

オブジェクト指向の基本概念

上では変な例えをしましたが、オブジェクト指向においては「クラス」というものが基本になります。
クラスについては後で詳しく説明しますが、プログラミング的に見ると、ある関連性のある処理のかたまりと考えてください。この表現をすると実は本質からは少しずれるのですが、今はそういう理解でも良いです。この関連性とは、ある「処理対象」または「物事」についての処理という括りです。

クラスは「変数」と「関数」を持ちます。

従来のプログラミングの場合、当然「変数」を使用し、処理の流れを上から下に向かって流れるように書いていくと思います。そして同じような処理が複数個所で発生する場合、「関数」として定義して処理の流れから切り出し、それを呼び出したりします。対してオブジェクト指向では、クラスと呼ばれる枠組みの中に、「変数」や「関数」を閉じ込めるような形になります。そしてクラスはある物事に特化した処理単位と考えます。

例えばショッピングサイトで考えてみましょう。ショッピングサイトにはどんな「物事」が存在するでしょうか。商品、会員、カート、購入履歴・・・いろいろ考えられると思います。このそれぞれについてクラスを作ります。
例えば「商品クラス」です。商品クラスには、「商品」として必要な性質や処理を持たせます。例えば商品に必要な性質といえば「名前」、「価格」、「品番」・・・など。そして商品に必要な処理といえば「商品名を変更する」、「値下げを適用する」・・・などです。
次に「カートクラス」です。カートクラスは性質として、現在の合計金額や商品点数などが必要です。処理としてはカートに商品を追加する、などが考えられます。
この、カートに商品を追加すると言うのは、「カート」と「商品」それぞれのクラスが関連しあう事になります。これがオブジェクト同士が対話するということの具体的なイメージです。まさにプログラミングはそのようなイメージのものとなり、「人間世界に近い」というわけです。