神の相方が「パソコン」な事です。相方が「美少女」とか「イケメン」だったらなんとなーく察してくれて、融通の効いたことをしてくれるはずです。超硬派(文字通り)です。指示しない限りは動いてくれませんし、言外を察するなんてしてくれません。以上のことを念頭に置いて、読み進めて頂けると幸いです。最初にオブジェクト指向と言ったら、3つの特徴が挙げられます。二年次以降だと様々な授業で登場します。多様性(ポリモーフィズム)けどこれ、全部忘れて下さい。初心者にこれを言うのは逆効果なのでは無いかと考えます。いうと、上記の3つの考え方はオブジェクト指向の「ある機能」から派生しているに過ぎないからです。その根幹を知らずに利点だけたらたら述べられても、理解出来ません。オブジェクト指向の「ある機能」では、その「ある機能」について考えてみます。オブジェクトとは「モノ」のことです。モノというよりかは「キャラクター(登場人物)」と考えると良いかもしれません。オブジェクト指向のプログラミングでは、このキャラクター達を使ってプログラミングを行っていきます。今までのプログラミングは、神である自分が「わざわざ」一個一個キャラクターを作り上げて、必要なら操作を行う必要がありました。箱を積み上げていくようなイメージです。神である自分が「わざわざ」動き、箱を一個一個丁寧に積み上げていく。いやめんどくさいじゃんこれが事の発端です。「もーマジだりい箱に足生えて勝手に移動してくれねーかなー」みたいな事を考える訳です。勝手にやってくれれば神的には超オーケーです。みんなに「うごけ~」って言うだけで動いてくれるんです。「箱」という登場人物を作り、足を生やし(?)、動けと言ったら動くようにする。この一連のある意味の設計図みたいなものが「クラス」です。クラスという設計図と使い方あえてソースコードを書くとしたらこんな感じでしょうか。}}C言語しか触れたことない人からすると「え?箱だけでこんななんかこう偉そうじゃね?」って感じの書き方です。贅沢な書き方な気がしますよね。設計図みたいなものを用意出来ました。これでオブジェクト指向の半分はクリアです。「登場人物」として箱を用意することが出来ました。これは設計図の段階です。神といえど、設計図という概念をコネコネすることは出来ません。神が処理を書いていく「舞台」に登場させる必要があります。それが「new」演算子です。設計図として書いた「クラス」をC言語でいう変数の「型」として扱える訳です。Javaなどを扱う上で、ここを少し取り違えて覚えている人がいるので気をつけましょう。MyBox();//上2つを同時にこなした時々「舞台にxxx来るってさー」って言っときながら、実際に舞台にはxxxを召喚しないホラ吹きが居ます。いう事をしているとNullPointerException*2さんが来てめちゃくちゃ怒ってきます。ここまで分かってしまえば、オブジェクト指向の9割を理解したようなものです。パソコンに「ザックリ」捉えさせるさて、この一見便利そうなクラス。実は少し不便な点があります。このような状況を考えてみて下さい。}}ArrayListという、決められた型の名簿みたいなものを使う時を考えてみます。ArrayList<Cat>(10);のように<>の中にその型を書いてあげる必要が出てきます。今回は動物園(?)に召喚した亀と猫を名簿に登録したいのです。猫だけ、亀だけという風に登録したいのではありません。相方がイケメンなら「亀?あぁ動物の名簿に加えておくね」「数字?そりゃ動物じゃないだろ」みたいな感じで気を利かせてくれます。パソコンは「亀」と「猫」の共通点を知らないのです。それをパソコンに教えてやる必要があるわけです。ここで出てくる継承では、どうやったら「亀」と「猫」は「動物」だよと示すことが出来るのでしょうか。ここで「extends」という言葉が出てきます。「亀」のもとを辿れば「動物」。「猫」も、もとを辿れば「動物」。オブジェクト指向風に言い換えると「猫クラスは動物クラスを継承している」「亀クラスは動物クラスを継承している」。ソースコードだとこのように書けます。}}継承という機能の表面だけを教わる事が多いかもしれませんが、本質はここにあります。登場人物達を「ザックリとらえる」ことを「多様性」といいます。その「多様性」を実現するために「継承」を使いました。ここで一気に伏線回収した感じです。SDなどの授業とうまくやるために今回ここで考えてみた「オブジェクト指向」はかなり一部分で、しかも僕が勝手に「まずここを知らないと」みたいなポイントをおさえただけなので、この記事を読んだからと言ってSDの課題がスラスラ進んだり、自動的にオブジェクト指向技術の授業の単位が降ってきたりする訳ではありません。僕としても、オブジェクト指向に対する理解はまだまだ未熟なので、今後もこの記事はシリーズとして続けて、色々と考えていきたいと思います。(カプセル化の説明も残してしまいましたので!)今までなんとなく書かされていたコード達も、このような知識を得ることで「意味がある」ものになると考えます。僕自身も、Minecraftの追加要素開発からプログラミングを始めましたが(もう一年経ちますね)、最初はチュートリアルのコピペでした。なんとなーく予測しながらプログラミングすることも大切ですが、知らないモノを扱うのは大変気が滅入ります。猫は可愛い*1:今回はJavaベースで考えます*2:通称ヌルポ。(10)月別アーカイブ検索はてなブログをはじめよう!ne5okuさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。