本格的にObjective-cでiosアプリを作ろうぜ!
ということになりまして、Titaniumから飛び出してxcodeを触っているのですが
真剣にオブジェクト指向の言語を触るのは実は初めてで
なんとなーくのコピペでjavaを使っていてはなんともなりません(でした)。
自分で調べたり、人に聞いたりして結構理解が深まったので
参考になった例えとかを備忘録的に纏めました。
エンタープライズ様が出しているこの記事が苦なく読めるようになれば、かなり理解が深まっていると思います。
5分で絶対に分かるオブジェクト指向
僕も最近学び始めて思い違いや、この解釈違うでしょってのがあると思います。
そんな時はバンバンコメントで指摘して頂けますと助かります。
宜しくお願い致しますm(_ _)m
注:文字ばっかり記事です。
##オブジェクト指向をとりあえず感覚値で理解してみよう。
html例え
divタグの中に、divタグがあって、その中にimgタグがある。
んで、cssがそれぞれに効果を及ぼすみたいな感覚値でいいと思います。
親のタグ部分を子も引き継いで使っていける。
それがもっと大規模になったような物。
既成品での例え。>リモコン
結構な物がオブジェクト指向的な見方をすることが出来ます。
objectとは物ですから、何でもオブジェクトと言い表すことが出来ますって聞きません?
あれって、分かりやすい反面ややこしい記述だと僕は思います...。
それを解決できるかどうかはわかりませんが、
例えばリモコンを一つのプログラムの完成品としてみてみましょう。
リモコン本体がブレインです。(親)
そして、それぞれのボタンが手足です。(子)
リモコンは本当に多彩な機能が有りますよね。
ボタンの数的には30個くらいですかね。
この数を一つの頭がやたらめったら処理していたら、大変です。
プログラム的には、全てをif文で処理している感じです。ソースも汚くて大変です。
でも、似たような機能もありますよね。
チャンネルボタン。4色ボタン。メニューを開いて選択肢を出す系のボタン。
この辺りはちょっと内容変えたもののコピーで実装できてしまいそうですよね?
ブレインとそれぞれのボタンの間に、小さなブレインを設けてそこで処理して、大元のブレインが処理する量が少なくて助かります。
プログラム的には関数を設けている感じですね。
##オブジェクト指向ってなんだろう。ざっくり編。
オブジェクト指向入門時3大意味不明用語
- クラス
- クラスのインスタンス化
- 継承
ここの理解が出来るかどうかが勝負だと思います。
後々出てくる単語なんて全部この辺の動きにもっと柔軟性を持たせたいってだけの話なんです。
クラスは設計図。
クラスをインスタンス化すると完成品。
継承は設計図を引き継いで新しい設計図を作る。
そんなニュアンスで説明されます。
どゆこと?って方のために例を複数用意しました。
どうぞ。
###ロボットの例え
壱号機の設計書があるとします。(壱号機のクラス)
この設計書にはロボットの概観とか、重量とか、身長とかの情報が入っています。
これを元に物を作ると
それは壱号機になります。(インスタンス化)
でもこのままだと動きません。
そこで、弐号機を作るために、壱号機の設計図を引き継いで
加えて動作を記述する必要があります。
そこで、壱号機の設計書を受け継いで、弐号機設計書には「歩く、掴む、殴る」の動作が記述します。
弐号機設計書には壱号機の概観情報が直接記述されていませんが、
壱号機の情報を引っ張ってきている状態です(継承)
###細胞の例え
DNA1には、人間の設計書があるとします。(人間のクラス)
人間というのは、手があって、脚があって、頭があって....
しかし、どんな形なのかは記述されていません。
そんな時、DNA2が手、DNA3が足の形状の情報を持っていれば、人間を形作ることが出来ます。
DNA1が、2と3を継承することで人間を形成(インスタンス化)することが出来ます。
###哺乳類での例え
生物学的に色んなのがいますよね。
例えば
脊椎動物 - 哺乳類 - 人間
的な感じです。
背骨がある - 胎生 - 手足のある生物
のような解釈ですね。
これらは全て繋がって(継承されて)います。
プログラム的
「人間」=「手2本、足2本のある生物」
という認識ですが、じゃあ猿も人間なの?って話になってしまいます。
そんな時、
人間は背骨があって、胎生の生物ですという情報が引き継げていれば、より人間というものに近くなります。
脊椎動物という設計書から哺乳類という細かな設計書を作って
仕上げに人間という設計を書き加えてあげれば出来上がり☆
###まとめ
結構色んな例えば見聞きすると
なんとなくですが分かってきます。
色んな例が出てきましたが
1,基板がある。
2,基板を引き継いで新たな基板を作る。
3,基板を元に形を作る。
というのが多いですね。
##インスタンス化したやつの例
実体化とか言いますけど、結局実体化したって何?
つまりインスタンス化ってなに?っていう話です。
###re:リモコン例え
優れた機能のボタン、綺麗なリモコンの形状。
そんな物の設計を作りました。じゃあ使うためには物にしなきゃ(実体化)。
実体化したものに命令を送ると、その通りに動く!
###re:細胞の例え
優れたDNAを用いて(クラス)
手足を作って体も作って素晴らしい体を生み出しました!(実体化)
しかし実体化しても脳からの命令(例えばmainからの指示)がないと体は動きません。
###re:ロボットの例え
歩くということと、ロボットの概観の設計図(クラス)を用いて作り上げたロボット(実体化)。
勿論設計図通りなので設計図の書いてあることは出来ます!
クラスに歩けと言う命令が書いて有れば歩くロボットが出来ます。
しかし、このままだと歩くだけのロボットです。
歩くという機能を持ったロボットの設計図を引き継いだ、
走るという機能のみが記述された設計図(クラスの継承)。
走るという機能のみが記述された設計図にはどんなロボットを作るかは記述されていませんが、
継承を行うことで、その設計図は継承元のロボットの概観を用いてロボットを作ることが出来ます(実体化)
もちろんこのロボットに歩く、走る、どちらの命令をしてもきちんと動かすことが出来ます。
##全体まとめ
これだけ書いといてあれなんですが、
お時間が有れば下記の例えがとても参考になります。これを熟読すると
かなり理解が深まると思います。
Javaのオブジェクト指向をエヴァで例えると超わかりやすい
個人的には色んな例えの話を聞いた後で
このスレを見るとより理解が深まりました。
この記事で同じくオブジェクト指向初心者様の勉学が捗れば幸いです。