オブジェクトとは何か

2007/03/30 (Fri) 22:07:46 JST

オブジェクト指向プログラミングとは何か

何か、と言われてここでわかるなら誰も苦労しませんよね。かといってとにかく試せ試せというのも何なので、まずは字面でも追ってみましょう。

「オブジェクト指向プログラミング」は "Object-Oriented Programming" の訳語です。ここでの "orient" は "orientate" と同じ意味なので、それを英英辞典で引いてみますと、

  1. to direct the interest of sb to sth
  2. 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) 」とは聞き慣れない単語ですから、また気取って英英辞典で意味を調べてみますと、

とのことです。簡単に言えば「例」なんでしょうが、なんだかわかったようなわからないような気がします。先頭の意味が一番わかりやすそうなので直訳してみましょう。「◯◯から発生した、ある『もの』」とでもすればいいでしょうか。

「ある『もの』」は個々のオブジェクトのことを指します。つまり「インスタンス変数」とは「個々のオブジェクトが持つ変数」です。上記の座標オブジェクトであれば "x", "y" がこれにあたります。"x", "y" は個々の座標オブジェクトごとに異なりますね。

では「オブジェクトを発生させる◯◯」とは何ぞや、と思われると思いますが、これはひとまず保留にしておきます。インスタンス変数は「インスペクタウィンドウの左上に表示されているリスト」とだけ覚えておいて、先に進みましょう。

オブジェクト=ハッシュ?

PerlやPHPを知っている人なら、インスペクタのインスタンス変数を見て「オブジェクト=ハッシュ?」と思うかと思います。Cを知っている人なら「オブジェクト=構造体?」と思うかと思います。

そうです、ほとんど同じです。オブジェクトもキーと値でできています。ハッシュと異なるのは

ことです。これについては次のステップで説明します。

まとめ

メッセージ送信に続きます。


Inverse Pages: Squeakによるオブジェクト指向プログラミング入門