オブジェクト指向とは?プログラムを部品で作る考え方を例え話で解説

メモリん

ねえテツ、オブジェクト指向ってなに?求人サイト見てたら「オブジェクト指向の経験がある方」って書いてあって、意味わかんなすぎてそっ閉じしたんだけど(・_・)?

ギガテツ

お、いいとこ気になったじゃん♪ アレな、プログラムの「作り方の流儀」の話なわけ。

メモリん

流儀?ていうか、オブジェクトって物体じゃん。物体に向かうってどういうこと。日本語でよろ(・_・)?

ギガテツ

まあ落ち着けし。ちょうどいい場所があんだわ。ちょっと歩きながら話すわ(・∀・)

ゲームセンターの入口の前で話すギガテツとメモリん

オブジェクト指向とは

オブジェクト指向とは、データと、そのデータを扱う手順をひとまとめにした「部品(オブジェクト)」を単位にして、プログラム全体を組み立てる考え方です。部品の中身を外から直接いじらせず、「これをしてほしい」と頼む形でやり取りさせることで、規模が大きくなっても直しやすいプログラムを目指します。

なお、オブジェクト指向という言葉は、説明する人やプログラミング言語によって力点が変わります。「カプセル化・継承・多態性(ポリモーフィズム)の3つ」を柱に説明されることもあれば、「部品どうしが頼み合ってやり取りすること」こそが本質だとする説明もあります。この記事では、どの説明にも共通している土台の部分を扱います。

例えるなら、ゲーセンに並んだゲーム機

ギガテツ

オブジェクト指向ってのはさぁ→ゲーセンの店内なわけ☆彡

メモリん

ゲーセン。まただいぶ平成の匂いすんだけど

ギガテツ

うるせえし(≧▽≦) いいか、ゲーセン入ったらデカいゲーム機が何台も並んでんじゃん?あの1台ずつがオブジェクトなわけ。中の基板がどうなってっかなんて誰も知らねーけど、100円入れてボタン押しゃちゃんと遊べるっしょ?アレなわけ。

メモリん

たしかに、中身がどうなってるかとか考えたことないわ

※ゲーセンはゲームセンターのこと。1台ずつ据え置きになった大きなゲーム機(筐体・きょうたい)が、ずらっと並んでいるお店です。

並んだゲーム機の前で1台を示して解説するギガテツと、のぞき込むメモリん

同じ機種が2台並んでいたら、どうなる?

メモリん

それってつまり、同じゲームの台が2台並んでるときってどうなんの?中身おんなじじゃん

ギガテツ

そこな。2台とも同じ設計図から作られてっから、形もボタンの位置も一緒。でも今映ってるスコアも、中に貯まってる100円玉も、1号機と2号機で別モンなわけ。

メモリん

あ、それはそうだ。1号機でハイスコア出しても、隣の台には出てこないもんね

ギガテツ

そーゆーこと。で、この「設計図」のほうがクラス実際に床に置いてある1台1台がオブジェクト。インスタンスとも呼ぶな。

メモリん

ふーん。じゃあ隣の台のスコア、勝手に消したくなったら?

ギガテツ

無理っしょ、裏開けて基板いじったら店員に怒られるわ(´∀`) できんのはコイン入れんのとボタン押すことだけ。この決められた触り方がメソッドってやつでな。しかもこの作りだと、1台ぶっ壊れてもその台だけ入れ替えりゃ店は回るっしょ。丸ごと作り直さなくていいのがデカいわけ。

同じ機種のゲーム機2台の間で納得するメモリんと、うなずくギガテツ

あ゛ー!つまり、設計図から作った1台1台が、自分のデータと自分の操作方法をセットで持ってて、外からは決まったボタン経由でしか触らせない。そういう部品を並べてプログラムを作るのがオブジェクト指向ってコトね!(☆∀☆)

ギガテツ

そういうコトなわけ☆彡

この例えの限界

ゲームセンターの筐体は床に据え置かれた決まった台数で、しかも台どうしがやり取りすることはありませんが、プログラムのオブジェクトは必要になったときにいくつでも作られては消え、たがいに仕事を頼み合いながら動く点が異なります。

まとめ

  • オブジェクト指向とは、データとその扱い方をひとまとめにした部品(オブジェクト)を単位に、プログラムを組み立てる考え方です。
  • 部品の設計図にあたるものがクラス、その設計図から作られた実体がオブジェクト(インスタンス)です。同じクラスから作られていても、持っているデータはそれぞれ別々です。
  • 中身を直接いじらせず、決められた手順(メソッド)を通してだけやり取りさせるため、直すときの影響範囲が小さくて済みます。