初心者のJavaプログラミング

プログラミングガチ初心者がIT業界を目指して頑張ります。

【第6回】初心者のJavaプログラミング【オブジェクト指向】

Javaオブジェクト指向言語と呼ばれています。
なんじゃそりゃって感じです。だいたいいわんとしていることは分かってきたのですが、
ふーんそれで?状態です。
だいたい理解できたことだけ書いてきます。

クラスとオブジェクト

オブジェクト指向には、クラスとオブジェクトという概念があります。
まずオブジェクトからです。オブジェクトとは、属性(状態と表現して方が分かりやすいかも)と機能(動作、操作)の両方が定義されている実体のことです。こういうのは例をだすと分かりやすいです。ドラえもんを例にとりましょう。ドラえもんでいうと、属性が「青い」、「鼻が赤い」とかです。機能は「歩く」、「走る」、「のびたくんを助ける」とかです。この両方を併せ持つという意味で、ドラえもんはオブジェクトであると言えます。従来までは、属性と機能を別々にして考えていたらしく、それはなんか分かりづらいよねってことでオブジェクト指向が出てきたらしいです。
f:id:fightingneetkun:20140718163944p:plain

次にクラスです。クラスはオブジェクトの作成の基盤となるテンプレートのことです。ドラえもんの設計図のことです。
f:id:fightingneetkun:20140718164144p:plain
ドラえもんの設計図をもとにドラえもんという実体が作られます。このように、クラスからオブジェクトを作成することをインスタンスといいます。
f:id:fightingneetkun:20140718164407p:plain

カプセル化、継承、ポリモーフィズム

オブジェクト指向の特徴というか利点です。この3つが大きな特徴です。

1.カプセル化

データとデータを操作するコードとを関連づけるメカニズムです。コードでオブジェクトの属性と機能を守っているイメージです。コーティングされているみたいな。そうすることによって外部から直接オブジェクトの値をいじられないようにします。内部隠蔽ですね。

2.継承

あるクラスの属性や機能を別なクラスにそっくりそのまま受け継がせるメカニズムのことです。
ミニドラの設計図を作るときに、元々あるドラえもんの設計図を受け継ぐことにします。この受け継がせることが継承です。ちなみにこの時のドラえもんの設計図をスーパークラス、ミニドラの設計図をサブクラスと呼びます。これは絶対的なものではなく、相対的なものです。ドラえもんクラスからみてミニドラクラスはサブで、ミニドラクラスからみるとドラえもんクラスはスーパーです。
どういうときに継承をするといいのか。ズバリ共通するものが多いときに継承をするのがいいと思います。そもそもドラえもんを小さくしたようなものがミニドラなので、同じような属性や機能を持っている訳です。それをまた1からちまちま定義していくとめんどくさいですよね。継承を使えば負担が軽くなりますし、拡張しやすいのはなんとなく分かると思います。

3.ポリモーフィズム

1つのインターフェイス複数の実装と言われているメカニズムです。は?って感じです。
これは図形クラスで考えるとすごく分かりやすいです。図形クラスを継承したサブクラスとして、三角クラス、四角クラス、円クラスがあるとします。スーパークラスである図形クラスには、「面積を求める」という「getArea()」機能があるとします。このとき、スーパークラスに具体的な面積の求め方を書くのではなく、各サブクラスにそれぞれの面積の求め方を書くようにします。そうすることによって、スーパークラスに「getAreaSankaku()」、「getAreaShikaku()」、「getAreaCircle()」と、全ての機能を書かなくてよくなります。別に3つくらいならいいかもしれませんが、台形、楕円、五角形、六角形...など多くなってくるとその分だけ、機能(メソッド)を増やさなければいけなくなります。それはめんどいだろうということで、このようなメカニズムがあるのです。

以上がオブジェクト指向のおおざっぱな説明です。

文章だけだとかなり分かりにくいですね。今日もマウスで図を描こうと思ったのですが、だんだんストレスが溜まってきて断念しました。今度安いペンタブでも買おうかなと思います。調べたらだいたい安いやつで4000円くらいなんですね。絵は描けないし、簡単な図がストレス無く描ければいいと思っているので、明日あたり安いの探してきます!
図を追加したのをまた後日アップします。


てことで今日はこのくらいで。

おわり

追記)
2014/07/18 図アップしました。