4

プログラムの基本!オブジェクト指向を理解する

出典:http://www.shokugyou.net/shoku-it/se.html

こんにちは!!
見た目は大人、中身はおっさんな今年入社のエンジニア、トゲアリトゲナシトゲトゲです。
今回が初投稿となります。

今年ももう半分が過ぎようとしてますねー。早い・・・早すぎる!!

光陰矢の如しなんて言いますが、矢どころじゃないですよねー

まあ、そんなこと言ったって時間は待ってくれないので
今を大事にしなきゃと思う今日この頃です。

世間話も程々に、今回は私がプログラムを書こうと思った当初、
つまづいたことを紹介させていただこうと思います。

それというのはオブジェクト指向です。

こんなの簡単じゃんと思う方もいるかもしれませんが、
ここをしっかり理解できないと後々にかなり困ることもあるかもしれません。

初めての方もそうでない方もこれを読んで少しでも理解が深まっていただければ幸いです。

オブジェクト指向とは何ぞ?

みなさん、人が書いたソースコード見てこんな経験ありませんか?
「なるほ・・・は?全くわからん」なんてこと。
こうなる原因の一つとして考えられるのがそのソースコードがオブジェクト指向をちゃんとできてないということです。

では、オブジェクト指向とは何かということですが簡単にいうなら、
「作成(構築)する対象のもの・事柄をすべてモノとしてとらえて表現する考え方」です。

例えば、「自動販売機」というモノ(オブジェクト)を作ることにしましょう。皆さんが始めに考えをめぐらせるのは「どんな商品を売っているのか」「商品の価格はいくらか」「どんな機能を持っているのか」などになると思います。この考え方もオブジェクト指向の一つとなります。

でも、作り方がないと何もできませんよね?そこで登場するのがクラスです。

クラスとは何ぞ?

とりあえずWikipediaで調べてみました!

“クラスベースのオブジェクト指向においてオブジェクトの設計図にあたるもの。抽象データ型の一つ。クラスから生成したオブジェクトのことをインスタンスという。クラスには、インスタンスの保持するデータ(メンバ変数、フィールド(UMLでは「属性」ともいう))と操作(メソッド、メンバ関数)が記述される。アクセス範囲(public、private、protectedなど)や可変かどうか(final、 constantなど)等についても記述されている。クラスは、継承・ポリモーフィズム・カプセル化などの、オブジェクト指向プログラミングにおける重要な概念を実現する強力な手段である。”

出典:https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%A9%E3%82%B9

お、おう・・・さっぱりわからん

この一節を理解するためだけに、たくさんの単語を調べないといけません。

そして、その単語を理解するために、また新たな単語を調べて・・・と繰り返しているうちにめんどくさくなってきそうです。

それでも何とかがんばって読み解いていきますと、どうやら「クラス」、「メソッド」、「インスタンス」、「継承」この4つ(「ポリモーフィズム」と「カプセル化」も大事ですが今回は触れません。4つを理解した方はこの2つも調べてみてください。)を理解することがオブジェクト指向の基本を理解するためのキーワードではないかと考えることができます。

それらについて難しい言葉で書かれた本やサイトを見ていてもわからない人には全くわかりません。
そこで、人気漫画ドラゴンボールも交えて考えてみることにしました。

「クラス」,「インスタンス(オブジェクト)」

我々は「線路の上を電気の力で走る箱型の乗り物」を「電車」として認識していますよね。
実際に乗り込む車両は毎日違っているはずですが、とにかくそれを電車として認識できているのは細かい部分を無視して本質的なポイントを抽出する抽象化を無意識のうちに行っているからです。
オブジェクト指向では抽象化によって名前を与えられた概念をクラスと呼びます。
一方、毎日通勤時に乗車している一台一台の電車そのものはクラスのインスタンス(オブジェクト)と呼びます

(ドラゴンボールの世界では・・・)
「クラス」地球人武道家、サイヤ人、戦闘型ナメック星人など
「インスタンス」悟空、ベジータ、クリリン、ピッコロなど

「メソッド」

「電車」というオブジェクトは、自身を動作させる手続きを知っており、それを利用するためには、(例えばマスターコントローラーで)適切なメッセージを与えるだけでよいはずです。
このように動作をするようにプログラムを書くことができます。これをメソッドと呼びます。

(ドラゴンボールの世界では・・・)
「メソッド」かめはめ波、どどん波、舞空術など

「継承」

違うクラスだけど同じ機能使いたいなーなんてことよくありますよね。オブジェクト指向にはそんな時のための方法が用意されています。
すでに定義されたクラスの機能を引き継いで、新しいクラスを定義することができます。これを継承と呼びます。

(ドラゴンボールの世界では・・・)
「親クラス」戦士 「子クラス」地球人武道家、サイヤ人、戦闘型ナメック星人など

最後に

ドラゴンボールの例えいらないんじゃないかと思う方もいるかと思われるのですが、
いいんです!!好きなので!!

総括しますと結局、オブジェクト指向は「うまくモノを作る(構築する)為の考え方」みたいなものですね。

厳密な視点で見ると、このたとえ方が全て正しいとは言えないですが、そんなことはどうでもよくて、
何か新しいことを学ぶにはまず自分自身が理解しやすい方法で全体像を把握することがいいと思います。

あとは実際に人のソースを眺めたり、ソースの一部をいじったりしながら、勘違いがあれば少しずつ修正していきます。
それを繰り返しているうちにいつの間にか全体を理解できるようになるんだと思います。これを読んでよかったと思える人がいたら幸いです。

CONTACT US

株式会社プロフェッサはWEB制作会社です。
ウェブサイト制作やシステム開発など、ウェブに関するご相談は下記よりお気軽にどうぞ


Previous Post

Next Post