2007年06月28日

基礎 第6回: オブジェクトの関連―汎化

 「汎化」…。
耳慣れないコトバですねぇ。
字面を見ると…見慣れないですねぇ。
これは、なんなんでしょう。

コンテンツ

  1. 国語辞典で調べてみた
  2. 英和辞典で調べてみた
  3. つまりこういうこと
  4. クラスって実は「概念」なんです
  5. 次回予告
  6. オススメ

国語辞典で調べてみた

 とりあえず「汎化」を国語辞典で調べたら、こんな説明でした。
はんか【汎化/般化】〔generalization〕
ある特定の刺激と結びついた反応が、類似した別の刺激に対しても生ずる現象。また、同一の刺激に対して、類似した種々の反応が生じる場合もいう。
(三省堂「大辞林 第二版」より抜粋)

…わけわかりません。刺激と反応が…はぁ?
でも、ちょっと待ってください。
【汎化/般化】…化?
この字面なら、それほど見慣れないわけではありませんね。
これはひょっとして…ということで、

英和辞典で調べてみた

 今度は英和辞典で「generalization」をひいてみます。
すると…。
gen・er・al・i・za・tion
━━n. 一般化; 帰納; 概括, 総合; 一般論; 概括論, 帰納的結論.
(三省堂「エクシード英和辞典」より抜粋)

 なるほど。
要するに一般化なわけです。
最初からそう言って欲しいですね。
んーと、ではでは、オブジェクトで一般化するってどういうことでしょう?
はい、オブジェクトにおける一般化というやつを見てみましょう。

つまりこういうこと

 またまた、カレーの話です。
第4回で、クラスとインスタンスの話をしましたね。
あなたの作ったカレーは、カレークラスのインスタンスなのでした。
さて、誰もが認めるところだと思いますが、カレーは料理の一種です。
だいじょぶですか?異議、ないですよね?
はい、「カレー」クラスを汎化すると、「料理」クラスになります。

 汎化って、つまりそういうことです。
何かを汎化するということは、その何かを含む、もっとおおざっぱなくくりにするということです。
つまり、「料理」クラスをさらに汎化すると、「食べ物」クラスになります。
単純な話ですね。

 では、汎化の反対、つまりおおざっぱなくくりを、その中にあるもっと具体的なものにすることを何と言うかというと…。
特化と言います。
もうお分かりかと思いますが、念のため言いますと、「食べ物」クラスから「料理」クラスに特化することができ、「料理」クラスから「カレー」クラスに特化することができます。
もちろん、「カレー」クラスからいきなり「食べ物」クラスに汎化したり、「食べ物」クラスからいきなり「カレー」クラスに特化しても、誰も文句は言いませんよ。
1段階づつ汎化/特化していくとかいうことに意味はないんです。
とにかく、より一般的なもの、より具体的なものを探し出すことが肝心なんです。

 当たり前のことに、難しげな名前を付けてるだけじゃないかとお思いでしょう。
まったくその通りですね。
オブジェクト指向なんて、何も難しいことないんです。
ただ、一応なにかしら名前を付けて置かないと、このことについて誰かと話すとき、不便ですよね。

 お互い、このことはわかってるのに、伝えるコトバがないものだから、いちいち説明を繰り返さなきゃならない―なんてことになると、もううんざりしてこのことを話したくなくなっちゃいます。
なので、いちいち名前が付けてあります。

 じゃあ、なんでわざわざ難しいコトバを選んで付けるんだ(化じゃなくて化とかね)ってことについては…私には、偉い学者さんの考えることはわかりません。

クラスって実は「概念」なんです

 ここまで、カレークラス、料理クラス、食べ物クラスってかんじで、しつこくクラス、クラスって付けて呼んでたことにお気づきでしょうか?
今回の記事も含めて、これから先の説明は、特に断らない限り、たいていクラスについてのことだと思ってください。

 私たちは、普段しゃべったりするとき、実はオブジェクトとクラスをごっちゃにしてます。
例えば「カレー」というとき、自分で作ったものを指さして「カレー」というときもありますし、世間一般にあるカレー全体をさして「カレー」と言ったりもします。
「さあできた。カレー食おうか」は、たぶん前者。
これは、現にそこにあるもの、インスタンス。そしてオブジェクトです。
「カレー大好き」は、普通後者ですよね。
これは、特に具体的なものを指してるわけではない、ただの概念です。これはクラスです。

 あなたが作った現物のカレーは、これはもう汎化も特化も出来ないでしょ。
げんにそこにあるんだから、それを料理と呼ぼうが食べ物と呼ぼうが、何も事態は変わらないですよね。
つまり、オブジェクトってものは、もうなんとも手のつけようがないわけです。

 私たちは、何かしらの問題を解決するためにオブジェクト指向で思考したいわけです。
そして、概念こそが思考の道具です。
私たちは、これからクラス(概念)を駆使することで、インスタンス(現実)を操ることによって、問題を解決する手段を模索していきます。

次回予告

 さてさて、汎化や特化には、実はとてもとても重要な性質があります。
継承というんですが、今回は既に充分長文になってます。
この上継承についてまで書くと、とんでもないことになりそうです。
ただでさえ、毎回長ったらしくてうんざりされていることと思いますので、この話は次回にまわしたいと思います。

オススメ

 開発者の方向けのオブジェクト指向入門には、オブジェクト脳のつくり方がオススメです。
オブジェクト指向でソフトウェアを考えるためのコツがわかります。
基本的なことをひととおり、比較的楽に理解することができるでしょう。
posted by craftsman at 23:41 | 東京 ☀ | Comment(0) | TrackBack(0) | 基礎編
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/46023453
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。