オブジェクトとは何か
2007/03/30 (Fri) 22:07:46 JST
オブジェクト指向プログラミングとは何か
何か、と言われてここでわかるなら誰も苦労しませんよね。かといってとにかく試せ試せというのも何なので、まずは字面でも追ってみましょう。
「オブジェクト指向プログラミング」は "Object-Oriented Programming" の訳語です。ここでの "orient" は "orientate" と同じ意味なので、それを英英辞典で引いてみますと、
- to direct the interest of sb to sth
- to direct or aim sth at sb/sth; to design sth specially for sb/sth
と載っています。強引に意訳するならば、オブジェクト指向プログラミングとは「オブジェクトあってこそのプログラミング」といったところでしょうか。そうすると「オブジェクト」が最重要のキーワードになります。
オブジェクトを見てみる
それではさっそくSqueakを動かしてオブジェクトを見てみましょう。イメージはLearnOOP.imageを読み込んでください。LearnOOPイメージを読み込むと、下にいくつかのラベルが並んだまっさらさらの画面 (oop_screen.png) が表示されます。「標準システムフォント」「開く...」はメニューウィンドウを固定したものです。上にドラッグするとウィンドウがでてきます。
「標準システムフォント」メニュー
「開く」メニュー
フォントはデフォルトのものから変更してありますので、フォントやフォントサイズを変更したい場合はフォントメニューで調節してください。開くメニューは今後使うツールを表示するのに使います。
では、開くメニューから「ワークスぺース」をクリックしてください。"Workspace" ウィンドウが表示されます。
ワークスぺースは名前の通りの簡単な作業場です。ここにソースコードを書いて、すぐに実行することができます。まずは次の式を入力してみましょう。
1 @ 5
この式全体をマウスで選択し、altキーを押しながら左クリックすると実行に関するメニューが表示されます。この中から「式をインスペクト」を選択してください。
こんなウィンドウが表示されます。
このウィンドウはインスペクタと言って、オブジェクトの覗き窓です。左上のウィンドウに並んでいる名前を選択すると、右上のウィンドウに何やらいろいろと表示されます。"x" を選択すると "1" が、 "y" を選択すると "5" が右上のウィンドウに表示されます。
だいたい察しはつくと思いますが、これはx座標とy座標の組み合わせを持つ、二次元の座標を表すオブジェクトです。このようにオブジェクトは構造を持っており、一つのオブジェクトは複数の要素から構成されています。その要素もまたオブジェクトなのですがそれはさておき、要素名をリストにしたのが左上のウィンドウです。この例ではそのまんま "x" がx座標、 "y" がy座標です。
今度は今のインスペクタウィンドウを表示したまま、
2 @ 3
をインスペクトしてみましょう。当然ながら "x", "y" に異なる数値が入ったウィンドウが並びます。
どちらも同じ座標オブジェクトですが、"x", "y" 要素が指し示す座標は異なっています。当然ですね。このオブジェクトを構成する要素のことを、巷では「インスタンス変数」とか「フィールド」とか「属性」などと呼びます。ここでは以降「インスタンス変数」と呼ぶことにします。
インスタンス
「インスタンス (instance) 」とは聞き慣れない単語ですから、また気取って英英辞典で意味を調べてみますと、
- a particular occurrence of sth that happens often
- an example
- a case
とのことです。簡単に言えば「例」なんでしょうが、なんだかわかったようなわからないような気がします。先頭の意味が一番わかりやすそうなので直訳してみましょう。「◯◯から発生した、ある『もの』」とでもすればいいでしょうか。
「ある『もの』」は個々のオブジェクトのことを指します。つまり「インスタンス変数」とは「個々のオブジェクトが持つ変数」です。上記の座標オブジェクトであれば "x", "y" がこれにあたります。"x", "y" は個々の座標オブジェクトごとに異なりますね。
では「オブジェクトを発生させる◯◯」とは何ぞや、と思われると思いますが、これはひとまず保留にしておきます。インスタンス変数は「インスペクタウィンドウの左上に表示されているリスト」とだけ覚えておいて、先に進みましょう。
オブジェクト=ハッシュ?
PerlやPHPを知っている人なら、インスペクタのインスタンス変数を見て「オブジェクト=ハッシュ?」と思うかと思います。Cを知っている人なら「オブジェクト=構造体?」と思うかと思います。
そうです、ほとんど同じです。オブジェクトもキーと値でできています。ハッシュと異なるのは
- オブジェクトには関数もセットすることができる
- その関数を呼び出す方法が用意されている
ことです。これについては次のステップで説明します。
まとめ
- オブジェクト指向プログラミングの最重要キーワードは「オブジェクト」。
- オブジェクトはインスペクトすると目に見えるようになる。
- オブジェクトを構成する要素をインスタンス変数と言う。インスタンス変数はインスペクタの左上に表示される。
- オブジェクトはキーと値でできている。
メッセージ送信に続きます。
Inverse Pages: Squeakによるオブジェクト指向プログラミング入門