Google

- コピー - - 目次

入門・オブジェクト指向


オブジェクト指向というのは最近の流行り言葉である.なんでも 「オブジェクト指向〜」というとなにか恰好良く聞こえるから不思 議だ.rubyもオブジェクト指向スクリプト言語などという肩書を持っ ている.じゃあ,そもそもオブジェクト指向ってなんだろう?

どうも,この辺の定義の話をはじめるとちょっと詳しい人達の間で も結構議論が起きたりするので,もしかしたら,みんなそれぞれちょっ とずつ定義が違うのかもしれない.けれど,それじゃ説明にならな いので,ちょっと大胆に定義してみよう.「オブジェクト指向」と いうのは結局はものの見方の問題で(こういうのをパラダイムと呼 ぶ人もいる),簡単に言うと

    モノを中心に考える見方

である.モノだから英語でObjectと呼ぶわけだ.これだけだとなん だか良く分からないので,昔ながらの見方と比較してみよう.

コンピュータの世界で昔ながらの見方では,システムが解決すべき 問題問題を「データ」とそれに対する「手続き」としてとらえてき た歴史がある(ようだ).データは変数とか,配列とか構造体とかい うような入れ物に入っていて,それを手続き(関数と呼ぶ場合もあ る)に渡すと,計算結果が別の入れ物に入って出て来ることになる. 正しいデータと手続きの組合せはユーザが保証してあげないといけ ない.

例えば,給与データ(の入れ物)を給与計算という手続きに渡すと僕 の今月の給料の額が結果として出て来る,という感じだ.プログラ ムっぽい表現をしてみよう.

    今月の給料 = 給与計算(松本の給与データ)

僕の今月の給料を計算するのに,間違って部長の給与データを給与 計算の手続きにかけると僕の給料は増えることになる(が,きっと 後で誰かが怒られる).

一方,オブジェクト指向では問題をモノとその相互作用としてとら える.例えばさっきの給料の例だと,給与台帳というモノが基本給 のデータを管理している.オブジェクト指向におけるモノはただの データと違って,インテリジェントなので,いろいろと質問できる. 僕の今月の給料を知りたい時には,給与台帳オブジェクトに対して, 「松本の今月の給料はいくらだ?」と質問することになる.すると 給与台帳オブジェクトは内部のデータから僕の給料を計算して,答 えてくれる.こんな感じだ.

    今月の給料 = 給与台帳.給料(今月, '松本')

このやり方だと,将来給料の計算方法(データの構造とか持ち方と か,松本の契約形態とか)が変わっても,「給与台帳オブジェクト に質問する」という基本的な部分に変更は無い.

なんか分かったような,分からないような説明だが,パラダイムな どという目に見えないものの説明はそういうものかもしれない.

とにかく,こういう「モノ中心の考え方」にはいくつかメリットが ある.

  • 設計者として: 現実世界を反映するモノをモデル化することが できるので,設計が上手にできる(気がする).
  • ユーザとして: 現実世界に近いモデルは理解しやすい(こともあ る).特に現実世界からの連想が有効な場合,ユーザにやさしい.
  • 開発者として: オブジェクト単位でモジュール化が行えるので, システムが変更に強くなる.ということはシステムの面倒を見 るのが楽になる.
  • 開発者として: 既存のオブジェクトを利用して新しいシステム を構築できる.

ただし,これらのメリットはいつでも成立するわけではない.まあ, 上手にやれば,という前提があるのはいつものことだ.オブジェク ト指向は魔法の薬ではないので,下手に使えば苦労が増えることだっ て当然ある.実際,苦労している人は,僕自身を含めて結構多い気 がする.

さて,オブジェクト指向一般に関する説明はここまでだ.これ以上 の説明はたくさん出ている専門の本を参照して欲しい.本当はここ で良い本を紹介したいのだが,あいにく適当な本が思い付かない. なんでもそうなのかもしれないけど,オブジェクト指向に関する本 で,正確な本は難しいし,やさしい本は時々嘘や不適切なことが書 いてある.困ったものだ.

愚痴はこれくらいにして,本題に戻ろう.rubyは「オブジェクト指 向スクリプト言語」という肩書があるだけに,オブジェクト指向に 基づいてプログラムするのに便利な機能をいくつか備えている.今 後しばらくそれらを紹介することにしよう.


- コピー - - 目次