2007-07-03

基礎 第10回: まとめ

 前回の「包含」までで、オブジェクト思考の基礎は終わりです。
そこで、今回は、これまでの内容のまとめをしたいと思います。
各項のタイトルには、それぞれ今までに詳しく説明した回へのリンクを張りますので、必要であればそちらも参照してみてください。

コンテンツ

  1. オブジェクトとは物事
  2. 問題領域
  3. オブジェクトには属性と振る舞いがある
  4. オブジェクトはクラスのインスタンス
  5. 汎化(特化)という関係
  6. 依存という関係
  7. 包含という関係
  8. 少し具体的な例
  9. 最後に
  10. オススメ

オブジェクトとは物事

オブジェクトとは、あなたの身の回りにある(身の回りになくても)全ての物事のことです。
時計、本、本棚、家、パソコン、ピアノなど、全てがそれぞれオブジェクトです。

問題領域

あなたがこれから解決したい問題と、その影響範囲の領域のことです。
これをはっきりさせることが大事です。
でないと、無数のオブジェクトと、網の目のようなオブジェクト同士の関連に飲み込まれて、問題を解決することができません。
自分の手に負える範囲に、問題を限定することが大事なのです。
問題領域には、いくつかのオブジェクトが含まれているはずです。
問題領域を区切ったら、オブジェクトを探し出すことができます。

オブジェクトには属性と振る舞いがある

オブジェクトには、そのオブジェクトを特徴付けるものとして、属性と振る舞いがあります。
属性は色や形など、そのオブジェクトの性質です。
振る舞いは、そのオブジェクトがとる行動です。
赤インクは、色という属性が赤ですね。
そして、紙を染めます。
色が赤いから「赤」、染めるるからこそ「インク」。
だから「赤インク」なのです。
属性と振る舞いは、そのオブジェクトのアイデンティティなのです。

オブジェクトはクラスのインスタンス

これは、第3回第4回の話題です。
クラスとは、オブジェクトの本質です。
オブジェクトは、クラスがインスタンス(実体)化したものなのです。
そして実は、属性と振る舞いというのはオブジェクトでなく、クラスが持っているものです。
ただし、属性については持ち方がちょっと違います。
例えば「インク」クラスは「色」という属性を持ち、そのインスタンスである「赤インク」は、色という属性が「赤」という性質になります。

汎化(特化)という関係

これは、第6回第7回の話題です。
クラスはオブジェクトの本質であると言いました。
つまり、クラスとは現実に存在するものではなく、「概念」です。
この概念は、実は木のような幹から枝、枝から枝に段階的に枝分かれしていくツリー構造を持っています。
モノ→生物→動物→脊椎動物→哺乳類→霊長類→人間
のような具合です。
この各段階で、他にも"枝"があることがお分かりですね?
生物に対して無生物、動物に対して植物というかんじです。
左にあるものは右にあるものを含んでいます。
左にいくほど大きなくくりに、右に行くほど小さな(具体的な)くくりになっているわけです。
左(大きなくくり)にいくことを汎化、右(具体的なもの)にいくことを特化と言います。
また、左のものは右のもののスーパークラス、右のものは左のもののサブクラスです。
サブクラスは、スーパークラスから属性や振る舞いを継承します。

依存という関係

あるオブジェクトが、それが成り立つために他のオブジェクトに頼ることを依存と言います。
人は皆誰かに依存して生きているといいますが、オブジェクトもそうです。
オブジェクトの場合、全てのものが依存しているわけではありませんが、多くのものが他のオブジェクトに依存しています。

包含という関係

包含は依存の一種で、あるオブジェクトが他のオブジェクトを含んでいることを言います。
プリンタがインクカートリッジを含んでいるのも包含です。
インクカートリッジがインクを含んでいるのも包含です。
身の回りを見てみると、かなりの物が中に何か他の物を含んでいます。
非常に多く見られる依存関係なのです。

少し具体的な例

これまでの内容を早足で振り返ってみましたが、いかがでしたか?
最初の頃のことなんて特に、忘れてしまっていたかもしれませんね。
かく言う私も、今までの記事を読み返しながら書きました。
さて、これで基礎は終了なわけですから、今までの知識は充分に役立つはずですよね。
それを確認するために、今までのカレーの例よりももうちょっと具体的な例をあげてみましょう。
乳幼児を持つ、ある母親の悩み:
最近、子供のグズリが激しくなって、すごくストレスが溜まっています。
夫の帰りも遅いですし…。
はい、いかがでしょう。
よくあるシチュエーションではないでしょうか?
実はこれ、テレビのチャンネルを回してるときにふと目に付いたフレーズで、今思い出して書いてみました。
ですので、私もこれから分析します。
もちろん、読みやすいようにある程度編集を加えますが、オブジェクト思考で考える過程をけっこう生でお伝えできるのではないでしょうか。
問題領域
このフレーズ自体が問題領域を決めてますね。
みなさんも、問題領域を区切るときには自分自身の不満の声や感想を参考にしてください。
ごく短いフレーズで、紙に書いてみるとか、声に出してみてもいいかもしれません。
名づけて「子育てのストレス」問題です。
オブジェクト
まず、何はなくともこのフレーズに登場する名詞です。
名詞は有力なオブジェクト候補です。
  • 子供
  • ストレス
「グズリ」というのは子供の行動ですので、名詞ですがはずしました。
そういう意味では、「帰り」というのも、あとで「遅い」という言い方からすると、属性に思えますので、これもはずしました。
これらを図にしてみましょう。
stress-opt.png
先ほどの悩みをさらっと聞いていると、子供がグズることがストレスの原因で、ついでに言えば夫の帰りも遅いなぁぐらいにしか感じませんでした。
しかしこうしてみると、ストレスは子供と夫の2つに依存して存在していることがわかりますね。

言葉で聞くと、本人の主観の影響が大きいですので、本人が感じたこと以上のことを汲み取ることが難しくなります。
しかし、こうして客観的に分析することで、主観が薄れ、事実が浮かび上がってくるのです。
自分で自分の問題を分析する場合にも、こうして分析することで客観的に見ることができるでしょう。
分析
さて、改めて見てみると、少し違和感を感じます。
「子供に依存するストレス」という図式が「子育てのストレス」問題領域にあるのは問題ないですね。
でも、「夫に依存するストレス」の方はどうなんでしょう。
どちらかと言うと、子育て問題と言うよりは、夫婦間の問題のような気がしますね。
すると、この問題領域には問題が2つあることになりますね。
最初はひとつの問題だと思ってはじめましたが、実は2つの問題が潜んでいたのです。
この母親のストレスの原因は2つあったということになります。
ということは、解決策も2つそれぞれに必要になりますね。
解決策
夫婦間問題は、まず話し合いからのスタートですね。
自分がストレスを感じていること、そしてその主な原因が2つあること。
ひとつは、子供のグズリによる育児の大変さ。
ひとつは、夫の帰りが遅いこと。
そこで、育児を助けるために早めに帰ってほしいと。
そういったことをちゃんと伝えて話し合うことが必要です。
で、子供のグズリのほうは、これは話し合って解決することはできませんね。
相手は乳幼児なんですから。
しかし、悩みのお話にあったようにこれが「最近」のことであれば、これは一過性である可能性も高いので、しばらくのしんぼうかもしれません。
まず子供の体調を見て、食べ物や温度、環境などにも不都合がないのなら、あとは時間が解決してくれる可能性が高いです。
また、時間が解決してくれるのであれば、夫婦問題のほうで夫に早く帰ってきてもらうのも、その間だけで済みますね。
それなら、無期限と言うよりは、説得しやすいかもしれません。
どうでしょうか?
今回の例で、オブジェクト思考の過程と雰囲気をなんとなくでも感じ取っていただけたでしょうか。
ただし、これはもちろん、あくまで一つの例です。
これと似たような悩みをお持ちの方でも、実際にはもっといろいろな事情があって、この分析をそのまま当てはめることはできない場合が多いでしょう。
それぞれの状況をみて、ご自分で分析してみてください。

最後に

長い間、おつかれさまでした。
みなさんは、すでにオブジェクト指向でのソフトウェア開発をはじめて半年以内の平均的技術者と、同程度の知識を持っていらっしゃると思います。
何事も、基礎というのは退屈ですが、とてもとても大事なものです。
もし、今までの話題の中で、いまひとつ理解できていないなというところがありましたら、もう一度じっくり読み返してみてください。
また、わからないところの記事に、コメントなどでご質問ください。
次回からは、発展編をご覧ください。
もう少し高度でおもしろいトピックを扱っていきます。
これまでのように、きちんきちんと順を追ってではなく、面白そうなところから適当に話を進めていきます。
また、オブジェクト指向の原則デザインパターンなど、さまざまな話題を(原則ってなに?デザインパターンって?というあたりから)できるだけかみくだいて、わかりやすく解説していきます。
既にオブジェクト思考の基礎はおわかりの、ソフトウェア開発者の方も、楽しんでいただけるような内容が入ってくると思いますので、お楽しみに。

オススメ

 開発者の方向けのオブジェクト指向入門には、オブジェクト脳のつくり方がオススメです。
オブジェクト指向でソフトウェアを考えるためのコツがわかります。
基本的なことをひととおり、比較的楽に理解することができるでしょう。

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...