オブジェクト指向とは?プログラムを部品で作る考え方を例え話で解説
ねえテツ、オブジェクト指向ってなに?求人サイト見てたら「オブジェクト指向の経験がある方」って書いてあって、意味わかんなすぎてそっ閉じしたんだけど(・_・)?
お、いいとこ気になったじゃん♪ アレな、プログラムの「作り方の流儀」の話なわけ。
流儀?ていうか、オブジェクトって物体じゃん。物体に向かうってどういうこと。日本語でよろ(・_・)?
まあ落ち着けし。ちょうどいい場所があんだわ。ちょっと歩きながら話すわ(・∀・)
オブジェクト指向とは
オブジェクト指向とは、データと、そのデータを扱う手順をひとまとめにした「部品(オブジェクト)」を単位にして、プログラム全体を組み立てる考え方です。部品の中身を外から直接いじらせず、「これをしてほしい」と頼む形でやり取りさせることで、規模が大きくなっても直しやすいプログラムを目指します。
なお、オブジェクト指向という言葉は、説明する人やプログラミング言語によって力点が変わります。「カプセル化・継承・多態性(ポリモーフィズム)の3つ」を柱に説明されることもあれば、「部品どうしが頼み合ってやり取りすること」こそが本質だとする説明もあります。この記事では、どの説明にも共通している土台の部分を扱います。
例えるなら、ゲーセンに並んだゲーム機
オブジェクト指向ってのはさぁ→ゲーセンの店内なわけ☆彡
ゲーセン。まただいぶ平成の匂いすんだけど
うるせえし(≧▽≦) いいか、ゲーセン入ったらデカいゲーム機が何台も並んでんじゃん?あの1台ずつがオブジェクトなわけ。中の基板がどうなってっかなんて誰も知らねーけど、100円入れてボタン押しゃちゃんと遊べるっしょ?アレなわけ。
たしかに、中身がどうなってるかとか考えたことないわ
※ゲーセンはゲームセンターのこと。1台ずつ据え置きになった大きなゲーム機(筐体・きょうたい)が、ずらっと並んでいるお店です。
同じ機種が2台並んでいたら、どうなる?
それってつまり、同じゲームの台が2台並んでるときってどうなんの?中身おんなじじゃん
そこな。2台とも同じ設計図から作られてっから、形もボタンの位置も一緒。でも今映ってるスコアも、中に貯まってる100円玉も、1号機と2号機で別モンなわけ。
あ、それはそうだ。1号機でハイスコア出しても、隣の台には出てこないもんね
そーゆーこと。で、この「設計図」のほうがクラス。実際に床に置いてある1台1台がオブジェクト。インスタンスとも呼ぶな。
ふーん。じゃあ隣の台のスコア、勝手に消したくなったら?
無理っしょ、裏開けて基板いじったら店員に怒られるわ(´∀`) できんのはコイン入れんのとボタン押すことだけ。この決められた触り方がメソッドってやつでな。しかもこの作りだと、1台ぶっ壊れてもその台だけ入れ替えりゃ店は回るっしょ。丸ごと作り直さなくていいのがデカいわけ。
あ゛ー!つまり、設計図から作った1台1台が、自分のデータと自分の操作方法をセットで持ってて、外からは決まったボタン経由でしか触らせない。そういう部品を並べてプログラムを作るのがオブジェクト指向ってコトね!(☆∀☆)
そういうコトなわけ☆彡
この例えの限界
ゲームセンターの筐体は床に据え置かれた決まった台数で、しかも台どうしがやり取りすることはありませんが、プログラムのオブジェクトは必要になったときにいくつでも作られては消え、たがいに仕事を頼み合いながら動く点が異なります。
まとめ
- オブジェクト指向とは、データとその扱い方をひとまとめにした部品(オブジェクト)を単位に、プログラムを組み立てる考え方です。
- 部品の設計図にあたるものがクラス、その設計図から作られた実体がオブジェクト(インスタンス)です。同じクラスから作られていても、持っているデータはそれぞれ別々です。
- 中身を直接いじらせず、決められた手順(メソッド)を通してだけやり取りさせるため、直すときの影響範囲が小さくて済みます。
