Ruby Users' Guide - 入門・オブジェクト指向

前 - コピー - 次 - 目次

### 入門・オブジェクト指向

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

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

        モノを中心に考える見方

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

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

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

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

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

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

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

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

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

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

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

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

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

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

前 - コピー - 次 - 目次