オブジェクト? クラス? インスタンス? なんだかよくわからない人のために
オブジェクトについて話します!
オブジェクト指向のオブジェクトですねっ!
そうです。ある意味、最初の壁になっているかもしれませんね。
ここで、なにやらたとえ話とか高尚な概念を持ち出して初心者をびびらすかのような説明はしないわよ!
あら!さすが汁!
たとえ話がいいな!
えーーw
オブジェクトをうんことするとインスタンスはハエみたいなものみたいな。
それは違うような…
…。
所詮はコンピュータ、ビビることはない!ということで、ひとことでいうと、
ひとことでいうと!?
オブジェクト=「変数と関数をひとまとめにしたもの」
わかりづらーいw
むぅ!
もっとこう日用品に例えてくださいよっ!
「オブジェクトは、専用の変数と関数を持っている」
うーーん
和田ならこう例えますよ
オブジェクトは家族みたいなものとね!
どういうことですかw
アプリが国家でOSが地球というとこでしょうか
ようは最小規模の自治体が家族じゃないですか
そして、それらの小規模自治体を統括するのがまぁアプリってことで…
あ、わかりづらいかしら…
はい、とても…
くぅ!
わかった!いきなりオブジェクトに行くから駄目なんですよっ!
まず変数と関数を説明してからオブジェクトに行きましょう!
やはりまずコンピュータ寄りの理解がいいのではないかと思います!
コンピュータより!
変数と関数は、Cとかでなじみのアレですよ
ざっくり説明はぶいたー!w
変数は、値を格納できる入れ物で、
ダンボール?
コンピュータの中だから、RAMですね
RAM!
Randam Access Memory?
そうだっちゃ
関数は、引数をもとに何か処理をして、値を返すしくみ、だっちゃ
(引数がない場合とか、値を返さない場合もあるっちゃ)
それちょっと説明が難しく無いですか…
むぅ!
よし、関数の説明はあとまわしにする!
あとまわしぅ!
そしてたとえ話をしますw
テレビというオブジェクトを考えましょう。
テレビは、内部に変数をたくさん持っています。
おおぉ!それっぽい!
電源オン・オフとか、チャンネルの同調周波数とか、音量とか、いろいろ。
おお
はしょった
テレビの中身はよく知らないもので…
うそん…
え、ちなみに電源のON/OFFは変数じゃなくて関数じゃないの?
ON/OFFの状態を、変数に格納しとくということですね。
そのうえで、ON/OFFの操作をする関数も用意する。
なるほど
ほかに、チャンネルの変え方とか、音量の変え方とか、いろいろ。
ON/OFF変数ってことですね
ということは実際の各機能が持っている値は変数に格納されて
その機能を使う場合は関数を経由して値に変更を加えるということでしょうか
そんな感じです
で、テレビの取扱説明書には、関数の使い方が載っているわけです。
変数のほうは、企業秘密です。
ほほほぅ!
興味深い!
その取扱説明書にあたるのが…
素人がテレビの内部をいじってはいけないのです。
素人はテレビの内部を知る必要もない。
ふむふむ
関数の使い方さえ変えなければ、こっそり内部の仕組みを変えても、利用者には影響がないんです。
ほう!以前てくさんにきいたことがあるな!
調子にのって、もう1つたとえ話をします。
市役所。
利用者は市役所の窓口に行きますよね。
窓口で、いろいろたずねたり、聞いたり。
ほほう
窓口が、利用者とのインターフェースになっています
これが、市役所オブジェクトの関数にあたります
一方で、市役所には内部資料がありますね。
こいつらが変数。
あれですか。住基ネットみたいなやつですか。
利用者は、内部資料の処理の仕方など、意識する必要がないし、知る術もありません。
ふむふむ!
そうですね、住基ネットとか、戸籍とか。
とまあ、こういう仕掛けをプログラミングに利用しているわけです。
一般社会とおんなじってことですか先生
んーー、責任の所在を明確にするということかな。
プログラミングの中でも責任問題なんですか先生…orz
そうですよ
画像を描画するオブジェクトの責任とか。
そうすると、なにか問題があったときに、誰が悪いのか、わかりやすいし
そういう意味では日本の政治もオブジェクト指向であるべきなんでしょうねぇ
まあそうですね
政治の仕組みもある程度はオブジェクト化されていると言えるのでしょうか?
で、コンピュータの話に戻りますと
あ、もどっちゃった…
まあお役所仕事は、ある意味しっかりしたオブジェクト構造ですよねえ。
脱線させてしまいました…。
Xcode上で、しこしこソースを書いていくわけなんですが、
しこしこハァハァ
オブジェクトの設計図を書いているわけなんです。
変数と関数の。
変数と関数の!
この設計図を、クラスといいます。
設計図をクラスと!
それが昨日やったAppController.mと.hですか!?
そうですねー
クラス名=AppController
なんか見えてきた気がします先生!
クラスで決められた設計に基づいて、実際にメモリ上に変数を格納する領域を確保するんです。
クラスは設計図ですから、1つあれば、同じ種類のオブジェクトをいくつでも量産できます。
ちょっとまってください
クラスはオブジェクトの設計図。
その設計図をもとに生成されるのがオブジェクト?
早まりました。
はやまった!!?
設計図をもとに生成された、メモリ上の実体を、インスタンスと呼びます。
メモリ上の実体!ここらへんからなんだか難しくなりますね…
うーん、一番具体的だと思いますが…
インスタンス…。IN 酢 タンス…。
で、さっき私が早まったのはですね、
へい
オブジェクトという用語が、場合によってはクラスの意味にも、インスタンスの意味にも使われちゃってるんですよねー
!
概念があやふやな人は、混乱するでしょうね
すでに混乱してますw
うーん、じゃあ、、
ソースコードでしこしこ書いたのが、クラス
実行時にメモリ上に割り当てられたのが、インスタンス
じゃぁ和田がインスタンスを意識することってあんまない?
いや、一番意識しますよー
生成したあと、いらなくなったら捨てないとダメでしょ
捨てるの忘れると、メモリの無駄遣いになるし。
openとcloseみたいなもんかしら
まあそんな感じかも
で、以上の考え方をひっくるめて、オブジェクト。
これでどうだ!
クラス=設計図
設計図をもとに展開された実体をインスタンス
クラス(設計図)の中には変数や関数が入ってて
で、それらをまとめたのがオブジェクトと!
だいたいそんな感じ!
インターフェースビルダーでobjectを追加したじゃないですか先日
ええ
あれはあくまで可視化するためのワンクッションであって
実際のオブジェクトはAppControllerオブジェクトとのひもづけのためのプロセスってことですか?
えっとですね、実行時に、AppControllerが1つ、インスタンスになるんです
つまり、メモリ上に割り当てられる。
へい!
それはなんとなくわかります!
次に、そのインスタンスが「初期化」されます
初期化については次回以降に!
乞うご期待!
で、次に、インターフェースビルダー上で設定してあった接続が、できるんですよ
ほほぅ
あのpushとかあれですよね
ええ
fieldとかsenderとか
そのへんです
ふむふむ
最後に、用語を2つばかり追加しますです。
へい
クラス専用の変数と関数といっておりましたが、ほんとは、
インスタンス変数と、メソッドと呼んでいます。
最後にそう締めるか!!
わかりやすい!
関数的なものがメソッドですね
そうです
市役所の窓口です
先生、インスタンス化って言葉ありましたっけ?
はい、インスタンスを生成するという意味ですね。
そしてメモリ上に展開されるってことですね
ええ。
アプリケーションを作るときには、どんなクラスをどのように組み合わせるかを考えてるんですよ。
インタプリタ言語と大きく違う点は、いかに効率的にクラスを組み合わせるかってことでしょうか
まあRubyとかはオブジェクト大好きですけどね・・
先生はrubyも行けるんですか!?
いけませんw
つい入門書買っちゃっただけですw
てくさんに画像を送っているんですが…
お笑い芸人オブジェクトを定義してみたんですが…
oo
おお
あってますか?w
打合わせでネタをつくって(クラス)、舞台で漫才やって(インスタンス)、
ツッコミがメソッドですねー
まあこんな感じですねw
えがったw
前回は、NSButton、NSTextFieldが出てきましたが
これ以外のクラスについて、おいおい紹介していきますよー
了解ダス!
おつかれさまでしたっ!
おつかれさまでしたー