オブジェクト指向な日々

今日から3日間、オブジェクト指向UMLオブジェクト指向を図示したもの、というといいのかな)の研修です。
思えば会社に入ってからというものずっとJavaと格闘してきた訳ですが、
Javaの思想のキモであるオブジェクト指向を全く理解していなかった訳で(笑)
ちょっとずつソフトウェアの設計(っつってもソフトの一部品ですが)をやる様になってきて、
これが分かってないのは実はとってもキツい。。
というわけでこの一番仕事量がヒートしてる時期に研修に出させていただいた訳です。
(幸いうちの会社はヒートしてようが研修は絶対に行け!という風土があるのでありがたい限り。)


オブジェクト指向ってなんぞや?って話、しましょう。
色んなたとえ話があるんですが、特にオブジェクト指向の代表例の一つとして有名な「継承」について
個人的に理解する為に思い描いたたとえを。
人(=プログラム)と仕事(=機能)という観点から考えましょう。

従来型のプログラムの考え方:
Aさんはサラリーマンで、飛び込み営業の仕事をします。

オブジェクト指向
サラリーマンには営業という仕事があり、Aさんは特に飛び込み営業の仕事をします。

従来型のプログラムは、プログラム(この場合はAさん)単位でどのような機能があるか、という事を設計の際に考えます。
だからいきなり「飛び込み営業」というダイレクトな詳細の部分まで考えてプログラムを作成します。
対してオブジェクト指向は、機能(この場合はサラリーマンという仕事)単位でまず物を考えます。
「サラリーマン」にどんな仕事があるのか、まず大まかに考えるんですね。
その上で営業という機能をもつ「サラリーマン」のプログラムを作成します。
そして「Aさん」というプログラムに、「サラリーマン」という機能を「継承」します。
これによって「Aさん」には「営業」という仕事が実装されます。
その上に「Aさん」の独自機能として「飛び込み営業」という詳細な機能を「Aさん」というプログラムの上で実装します。


この作り方をすれば、「サラリーマン」の「営業」という機能は、この後の他の「Bさん」「Cさん」にも
実装出来る訳です。
このように、全てのプログラムに対して共通の機能を別にしてもつ事によって
結果的に無駄なプログラムを書かずにすんだり、変更などのメンテナンスを楽にする事が出来る訳です。


Javaでプログラムを作っているとこれらの様な事は自然と身に付いて行く物なのですが、
UMLを知らなかった僕は、これまで作ったプログラムを分かりやすく図示する事が出来ませんでした。
この3日間の研修で、何とかそれが可能になるといいなぁ。。


追記:(9/6 8:44)
上記の「サラリーマン」と「営業」のたとえは、「実装継承」と呼ばれ、オブジェクト指向設計では避けるべき物だという指摘をいただきました。
Aさんが異動した場合、「継承元を変更する」という事が必要になってしまうんですね。
上のたとえはどこからからコピーした訳ではないのですが、無知をさらけ出しました。。。
お恥ずかしい限りです。修行してきます。
(重ね重ねですが、ご指摘ありがとうございます!)