2007年06月30日

基礎 第8回: オブジェクトの関連―依存

 さて、今回はオブジェクトの関連の一つ、依存について考えてみましょう。
依存という言葉は、まぁよく聞くとまでは言えなくとも、そこそこ聞くこともありますよね。
あまり印象の良くない言葉が多いかもしれませんが。
「アルコール依存症」みたいなね。

 依存とは、何かが他の何かに頼ること、または、頼ることで成り立つことです。
では、オブジェクト指向の世界での「依存」とは、どういうことなのか見てみましょう。

コンテンツ

  1. 依存ってこういうこと
  2. いろいろな依存
  3. 依存の網!
  4. あらためてオブジェクト思考って
  5. オススメ

依存ってこういうこと

 オブジェクト指向の世界での依存は、それほど悪い意味ではありません。
(まぁ、悪い意味になっちゃう場合もあるんですが、それはおいおいということで)
あなたがカレーを作るとき、あなたはカレーに依存しています。
はい、なんのこっちゃですね。
これを紐解いてみましょう。

 カレーを作るということは、カレーをインスタンス化するということに他なりません。
で、オブジェクトA(この場合あなた)が他のオブジェクトB(カレー)をインスタンス化する場合、オブジェクトAはオブジェクトBに依存していることになります。

 あなたは、カレーというものを知っているからこそ作れるわけですよね。
カレーについての知識に頼っています。
カレーが食べたいという欲望を満たすために、あなたはカレーの知識に頼ってカレーを作るわけです。
この意味で、あなたはカレーに依存しているわけです。
インスタンス化による依存です。
(ソフトウェア開発者の方向けに言えば、これはちょうどUMLでいう、ステレオタイプcreateの依存です)
このように、何かを作るということは、作り手は作り出すものに依存しているということになります。

 もう一つ、あなたはもちろん、カレーを作ったら食べますよね。
あなたというオブジェクトは、カレーというオブジェクトを使う(食べる)わけです。
ここでいう「使う」とは、何らかの形で利用することをいいます。
文字通り使うのでも、あるいは食べるのでも投げるのでも聞くのでも、利用することは全部これにあたります。
カレーを食べるということは、使うことにより依存することになります。
(ソフトウェア開発者の方向けに言えば、これはUMLのステレオタイプuseの依存です)

いろいろな依存

 こう考えてみると、世の中はオブジェクトがさまざまに依存し合うことで成り立っています。
全ての工場は、自分が作り出す様々な製品に依存しています。
親は子に依存しています。
農業に従事する方は、農作物に依存しているわけです。
これらは、作ることによる依存です。

 また、スターバックスは別にコーヒー豆を生産しているわけではありませんが、コーヒーをいれるのにコーヒー豆を使用しています。
これは使うことによる依存です。

 もう一つ、またちょっと違った例を挙げてみます。
例えば、あなたが組み立て家具を買ったとします。
さあ、組み立てましょう。

作業:
  1. 部品Aと部品Bをつなげます。
  2. 作業1.で組み立てた部品と部品Cをつなげます。
 ここで、作業2.は、作業1.の結果(部品AとBが組合わさったもの)がないと着手できませんね。
つまり、作業2.は作業1.の結果に依存しています。
作業2.は、作業1.の結果を使って成り立っているのです。
第1回で、オブジェクトとは物事であるといいました。
オブジェクトは物とは限りません。
「作業」という事もオブジェクトであると見なすことができます。
作業2というオブジェクトが作業1というオブジェクトに依存しているのです。

 さあさあ、世の中の依存関係の網が、またさらに絡み合いました。
物だけでなく、事も依存し合っているのです。
私たちが2つ以上の手順を踏む何かをするとき、そこにも依存関係があるのです。

依存の網!

 そろそろ、面倒くさくなってきましたか?
依存関係が網の目のように絡み合って、それに覆われてしまった世界を想像しましたか?
その想像は、全く正しいのです!

 でも安心してください。
そのほとんどは、あなた自身の問題を解決するときには無関係か、あってもほとんど無視していいほど小さい関係でしかありません。
落ち着いて考えてみてください。
第1回で言ったように、あなたの問題領域をはっきりと区切って、その中にあるオブジェクトだけに注目するのです。
あなたが注目しなければならない関係は、ほんの少しの限られたオブジェクト同士のものだけなのです。
結局は、ひとつの問題領域の中にある依存関係は、数えるほどにしかならないはずです。

 さあ、クールダウンしてください。
頭の中を、整理しましょう。
ゆっくり深呼吸して、今回の話題を振り返ってみてください。
依存関係というのは、どっちがどっちに依存しているのか?
あなたが今まで思い描いていた世界と、ひょっとしたら逆に見えたかもしれませんね。
それに、いっとき、巨大で複雑な世界が垣間見えて、ぎょっとされたかもしれません。
そう、世界は巨大で複雑なのです。
でも、第1回での話を思い出して、自分の問題領域をきちんと区切れば、世界の巨大さ、複雑さを閉め出すことができます。

あらためてオブジェクト思考って

 これは私個人の考えですが、オブジェクト指向で思考するということは、世界の巨大さ、複雑さを認めることです。
世界は巨大で複雑だなんて、当たり前のことじゃないですか。
「世界」という言葉を使ってますが、これはなにも宇宙とか地球とか国とか、そういう直接私たちに関係しないようなスケールの話じゃありませんよ。
私たちの日常だけで、充分複雑なんです。

 一人の人間の日常が、一人の人間の手に余るほど複雑なんじゃないかと、考えたことはありませんか?
私はそう考えています。
特別困難な仕事をしている人とか、特別困難な人生を歩んでいる人のことではありませんよ。
実は、私たちは自分の手に余る日常を、ほとんど手探りで、あてずっぽうのようにして生きているのだと思うのです。
オブジェクト思考では、それをちゃんと認めた上で、自分が扱える大きさに問題を切り出します。
小さく切り出した問題一つ一つを解決する。
そして、その積み重ねによって、大きな問題も解決していこうというわけです。

 「じゃあ、あんたはオブジェクト思考で全てうまく言ってるのか」って?
もちろん、そんなことはありません。
ほとんどその反対です。
オブジェクト思考は単なる一つの考え方であって、万能薬じゃありませんから。
「これさえやっとけば、人生完璧パラ色」って言われたら、それこそ嘘くさいでしょ。
まして、私だってオブジェクト指向について、隅々まで完全に会得できてるわけではありませんし。
それでも、いくらかの問題はこの考え方でうまくいったり、回避できたりしたと、自分では思ってますよ。

オススメ

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

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

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


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

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

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