2014年9月30日火曜日

- オブジェクト指向って?? - Java

今日から、ついに「オブジェクト指向」について学習する。
ここで、挫折する人が多いようです。
(わたしは「メソッド」で数回、挫折したので、なんとも言えないですが……)


オブジェクト指向って??

「オブジェクト指向」と初めて聞いたとしたら、「それは、なに?」と思うはずです。
わからないことを、すぐに検索して調べる人は、まずwikipediaを見るでしょう。

http://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91

「オブジェクト同士の相互作用として、システムの振る舞いをとらえる考え方。」

と書いてある。

「オブジェクト指向プログラミング」も見てみる。

http://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0

「相互にメッセージを送りあう、オブジェクトの集まりとしてプログラムを構成する技法」



これで理解出来るなら問題はないですね。
わたしは、出来ませんでした。

「オブジェクト同士の相互作用として、システムの振る舞いをとらえる考え方。」

wikipedia に書いてあるように、オブジェクト指向とは、考え方。
これ!!という完璧な定義はない。

登場人物の気持ちを考えなさい、という国語の問題に似ていますね。
正解は、おそらく作者しか決められないけれど、大まかな正解が存在していて
限りなく正解に近づくための勉強方法がある。


視点を変えて、「オブジェクト指向」じゃなくて困ることって??と考えてみる。

昔は、計算機の性能が現代とは比べ物にならないくらい低かった。
そのため、大規模なソフトウェア開発は行われていなかった。
 今まで学習してきた、手続き型(逐一、指示を出して上から順に実行)で問題がなかった。

年々、計算機の性能が上がっていき、大規模なソフトウェア開発が必要になった。
そうなると、ソースコードの量が膨大になり、どんどん複雑化して
人間が把握出来なくなった。(あくまでも、人間が!!)

人間が、自分たちで書いたコードに対処しきれなくなってしまったわけです。

(さきほどの、wikipediaの「オブジェクト指向プログラミング」のページに背景が書いてあるので、読んでみるといいかもしれない。)

人間が対処するために生まれたのが 「オブジェクト指向プログラミング」 なのです。
(コンピュータは適切な指示さえ与えれば、どんなに汚いコードでも困ったりせずに、こなしてくれますよね)


これだけだと、よくわからないですね。
どうやって対処するの??結局、どうなるの?メリットは??
疑問が尽きない。

少しずつ、さらっと説明。

オブジェクト指向 メリット

・柔軟性があがる
・再利用性があがる
・保守性がよくなる

以上の三つが一般的によく言われているメリット。
ただ、この時点では、メリットを享受していない。
なにも書いていないし、概要を学んでいるだけだから。

最低限、理解しなくてはいけないことは、
人間が、コードを把握して、対処出来る!!(逆に、出来なくては意味がない)
ということ。



メリットは、わかったけれど、具体的にどうしたらメリットを受けられるかというと。
三大要素というものが存在する。

オブジェクト指向 三大要素

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

ここは、今後、学習していくから、こういう3つの要素があるんだな、とさらっと流す。


オブジェクトって??

ここまで、何度も出てきた「オブジェクト」ってなんだろう??












オブジェクトは、「属性」と「操作」をもったもの。
具体的にどういうことか、
下の絵を参考にして、オブジェクトを作ってみる。





















まず、この絵が何を表現しているかというと
「うちの近所の争い」(の一部)です。

野良猫がいて、餌やりのおばさんがいて、隣のおばちゃんがいて……。
野良猫は、餌をねだります。
餌やりおばさんは、野良猫に餌をあげます。
それを、ときどき、隣のおばちゃんが怒ります。
怒られた餌やりおばさんと猫は逃げていきます。

それを、わたしは見ています。

















3個のオブジェクトが作られました。
「野良猫」、「餌やりおばちゃん」、「隣のおばちゃん」。
属性は、「種族」のみ。これが、全員、知っている登場人物だったら「名前」、「年齢」があったかもしれない。
操作は、行動。他にも様々な行動をするけど、少しだけ書きました。
(実際には、隣のおばちゃんは「世間話をする」などがあります)

絵には、「自分」が登場しているのに、オブジェクトは作られていませんね。
ここでは「自分」は「近所の争い」の観測者であり、創造主、神様です!!

わたしが、現実世界を見て、設計しています。
(オブジェクト指向は設計がとっても大事です。)

野良猫と餌やりおばちゃんの操作である「逃げる」、は
隣のおばちゃんの「怒る」があって発生する。

野良猫が「餌をねだって」、餌やりおばさんが「餌をあげて」、野良猫が「食べる」。

このように、オブジェクトが互いに操作を呼び出しあっている。

また、餌やりおばちゃんは野良猫に「属性-名前 : タマちゃん」をつけているかもしれない。
野良猫は、餌やりおばちゃんを「属性 - タイプ : 善」、隣のおばちゃんを「属性 - タイプ : 悪」としているかもしれない。

オブジェクトは、互いに属性を読み書き出来る。

そして、互いに呼び出しあったり、読み書きして、1つのプログラムとなる。


今日はここまで。
おおまかな概念を理解したから、次回は、具体的に学んでいく。

0 件のコメント:

コメントを投稿