[ruby-list:161] TUTORIAL - object-orientation

From: matz@... (Yukihiro Matsumoto)
Date: 1996-02-16 01:00:52 UTC
List: ruby-list #161
まつもと ゆきひろ@トヨタケーラムです.

今日の御題は「オブジェクト指向」です.rubyのことがほとんど触
れられていないという….
--
* 入門・オブジェクト指向

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

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

  モノを中心に考える見方

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

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

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

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

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

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

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

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

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

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

 * 設計者として: 現実世界を反映するモノをモデル化することが
   できるので,設計が上手にできる(気がする).

 * ユーザとして: 現実世界に近いモデルは理解しやすい(こともあ
   る).特に現実世界からの連想が有効な場合,ユーザにやさしい.

 * 開発者として: オブジェクト単位でモジュール化が行えるので,
   システムが変更に強くなる.ということはシステムの面倒を見
   るのが楽になる.

 * 開発者として: 既存のオブジェクトを利用して新しいシステム
   を構築できる.

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

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

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

In This Thread

Prev Next