2009年02月15日

「オブジェクト」ってなーに?

ドリトルについて」シリーズ番外編です。

このブログにも何度かオブジェクト指向が分からんとか、少し分かったとか書いてきました(オブジェクト指向が何となく解ってきたオブジェクト指向−クラスとオブジェクトの例え話。)

じゃあ「オブジェクト」とは何なのさ、という話になります。また「指向」ってどういうこと?となります。

よくある話が、オブジェクトのことを「もの」などと訳して「ものを中心に考えるのだ」などという説明がありますが、それだと全く分かりません。そうではなく、英語文法に出てくる「S-V-O」の「O」がオブジェクトなんですね。目的語とか対象ということです。

それまでのプログラミング(たとえば BASIC とか)では、「PRINT」や「GOTO」などが中心でした。つまり「V(=動詞)」中心のプログラミングです。

ちなみに「S」の主語は「コンピュータ」でいいでしょう。

(コンピュータに向かって)
ああしろ
こうしろ

というのがプログラミングでした。いえ、それはもちろんオブジェクト指向でも変わらないのですが、扱うデータは、「する(動詞)」の付属物だったんですね。コンピュータに何かを「させよう」というのですから、これは自然なことだったと思います。

しかしこれは扱うデータの種類が少なかった頃の話。扱うデータの量と種類が膨大に増えていったときにいろいろ問題が起きてきます。「する」を並べて作ったプログラム上で、「このデータはこの「する」に当てはまるのだろうか?当てはまらないのだろうか?」という判断が難しくなってくるのです。

一つの解決方法はカプセル化といって、一つの処理をまとめてブラックボックスにしてしまい、入れるデータはこういう形、出てくる結果はこういう形というものだけ見せるようにするプログラミングのスタイル。

その後、出てきたのは、さらにそれを発展させて、データ……というか、「変数」を中心に据えたプログラミングです。まず対象物ありき。この対象物には性質(プロパティ)や動作(メソッド)が決まっている。このいろいろな性質や動作をする変数を「オブジェクト」という抽象概念で括ったのです。その変数に対して命令をする(メッセージを送信する)。すると中身が変質することもあるししないこともあるけど、新しいオブジェクトを返す。またそれに対して……というプログラミングです。

これによって、今現在扱っているものは何か、そしてそれをどうしたいのか、という細かい処理を組み合わせていく考え方に変わりました。

これがオブジェクト指向の考え方だと思います。

2006年の終わり頃から悩み始めてようやくここまでたどり着きました。

ちなみに、ドリトルでプロパティとメソッドは見た目で分かります。

例えばタートルオブジェクトについては、

メソッド:作る、歩く、戻る、移動する、閉じる、変身する、拡大する
プロパティ:右回り、左回り、位置、向き、ペンなし、ペンあり、線の色、線の太さ、衝突


メソッド(動作)は「する」など(日本語文法でいう用言)
プロパティ(性質)は名詞など(日本語文法でいう体言)

という言葉になっているんですね。そんなことは考えなくてもいいぐらいごく自然な感覚に作られているわけです。
posted by n_shimizu at 00:54| Comment(2) | TrackBack(0) | ドリトル
この記事へのコメント
今日も地味にRuby勉強していたんですが、わかりやすいですね。ちょっとすっきりしました。がんばります。
Posted by yori at 2009年02月15日 17:36
Ruby はきわめてオブジェクト指向を徹底した言語ですからねぇ。

頑張って下さい!
Posted by n_shimizu at 2009年02月16日 07:40
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/26741404
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック