投稿日:

オブジェクト指向について学んだこと

CakePHPで実務をやり始めて約5ヶ月、まだまだ分からない事は沢山ありますが、少しずつイメージできる部分も出てきました。今回はCakeを身に付けていくにあたり学んだオブジェクト指向について書きたいと思います。
昔プログラミングを勉強した時にはオブジェクト指向の概念もなく、今までほとんどオブジェクト指向を意識することなく過ごしてきました。そんな僕にとっては、オブジェクト指向とはどういうものか、オブジェクト指向を使うとどう便利になるのか、ほとんどイメージできませんでした。それを会社の技術リーダーに伝えたところ、1冊の参考書を持ってきてくれました。
その中で、「なるほど!そういうことか!!」と思えたのが、「ポリモーフィズム」についての解説の例えです。

そこでは、「社長が社員に対して起立を命令すれば、どんな役職の社員でも起立する」という性質をポリモーフィズムに例えていました。
standup_up.png「ついたて」を挟んで、2つの椅子があり、社長と社員が座っています。社員側には「担当」「部長」「主任」の誰が座っているかわかりません。その社員に向かって、「起立しなさい」と声をかけます。社長は、「誰かわからないが、ついたての向こうにいる人、起立しなさい!」と命令を出すだけで、「誰かが起立する」という結果を得ることができます。どんな立ち方をしても、社長はそれを意識することはありません。このような性質が、プログラミングする上で非常に便利に働いてくれるのです。
業務に直結した例えをもう一つ。
kakaku_up.pngこの会社で扱ってる商品には、「一般商品」「特売品」「新商品」の3種類があります。この3種類の商品の価格計算方法は、
 一般商品 : 通常価格
 特売品 : 通常価格 × 0.7
 新製品 : 通常価格 × 1.2
とバラバラです。でも、「商品担当」クラスは「商品」の具体的なクラスがなんであろうと、「商品」クラスに対して「価格を取得しろ!」と命令するだけで価格が取得できてしまいます。例え「特売品」の計算方法が変わったとしても、「商品担当」は「商品」に対して命令しているので、なんら影響を受けることはありません。また、「商品」の具体的なクラスに新たに「処分品」というクラスが追加されても、命令に変更を加える必要は全くありません。
非オブジェクト指向でプログラミングをしていた僕にとっては、全く考えなかった画期的な概念です。
実は初めてこの本を読んだ時は、イメージは分かってもその意味する所・便利さまでは理解できていませんでした。実務を重ねていき、もう一度この本を読み返した時に、「そういう意味だったのか!なるほど!」とその意味を理解することができるようになったのです。僕の中にもオブジェクト脳が芽生えてくれているのでしょうか。そう願いたいものです。
オブジェクト指向がよくわからないという方に、この本を紹介しておきます。上記内容は第2章になります。
 ・オブジェクト脳のつくり方
  https://www.shoeisha.co.jp/book/detail/9784798104188
以上、オブジェクト指向について学んだことでした。