まま、MSC後の懇親会でオブジェクト指向って何よって話で盛り上がったというεπιστημηさんのこのエントリやとっちゃんのこのエントリについてなんですが・・・。
とっちゃんの紹介していたエントリは平澤章さんの「オブジェクト指向でなぜつくるのか」という書籍にある文章でもあるのですが、平澤章さんの文章はエンジニアらしく理論的で明快でわかりやすく、私も大好きで「オブジェクト指向で・・・」の本も後輩に取られてしまって2冊目を購入してしまいました(^^;;
で、この本(というか平澤さんの説明)ではオブジェクト指向を「プログラミング技術」としての側面と「汎用の整理術」としての側面があるという説明をされていました。
ただ、私はこのカテゴライズの仕方には若干の異論があったりします。
私は、昨日の親睦会の席でもちょっとだけお話ししかけましたが、オブジェクト指向技術そのものは「整理するための道具」というとらえ方をしています。
道具ですので、正しい使い方をすれば非常に有用な武器となるんじゃないかなと。
あえて比喩するなら(中さんに怒られそうですが(^^;)掃除機を掃除するモノだとしてほうきのように使ったら(つまり正しく使わなければ)「重たいほうきだな」となって足かせになりますが、正しい使用方法がわかれば非常に便利な道具になる・・・という感じでしょうか(^^;
ただ、”オブジェクト指向”と名を打つものには大きく分けて「オブジェクト指向技術そのもの」と「オブジェクト指向技術を補助するもの」があると思うのです。 これが混乱の1つの要因になってる気がするのです。
オブジェクト指向技術そのものは「情報隠蔽」「クラス」「継承」「多態性」・・・まぁ、その他にもオブジェクトやインスタンスなどの用語もありますが、これらのことを言ってると思うのです。 逆に言うとそれ以上でも、それ以下でもない。 つまり掃除機はあくまで掃除機の存在でしかないんですね。
で、この技術の適用の方法として有名なのが先日もお話していたGoF、リファクタリングなどのパターンじゃないかと思うのです。
これらが「まず、ホースをつけて、コンセントをつないで、ホースを床に滑らせてゴミを吸い取る、吸い取ったものは本体にたまるからゴミ箱にすればいいですよ」というような手順を書いてくれているような気がするんです。
他にも「掃除機を使えば床だけでなく、ちょっと高いところのゴミも吸い取ることができますよー。なのでほうき的な使い方の他にもはたき的な使い方もできるよー」とかいろいろ便利な使い方を書いてくれているのがパターンなんじゃないかなと。 いわばTips的存在じゃないかなと思うんです。
これらの概念を利用すると、オブジェクト指向を使ったコードを整理(リファクタリング)できて、ロジックが整理(GoFなどのデザインパターン)できてや構造を整理(エンタープライズアーキテクチャパターンなど)できて、ひいてはビジネスワークフローなども整理(UMLによるビジネスモデリング)することができるんじゃないかと。
なので、私は整理するための道具なんじゃないかなと思うのです。
で、これらを補助する技術というのが、アジャイル開発などのOODであったりUMLモデリングであったり・・・ということなんじゃなかなと。
これかがカテゴライズされずに並列で並んでいるから混乱を招く1つの要因にもなっているのかなって気がしています(^^;
まま、ざっくりですがこんな感じなんじゃないかと思いますがいかがでしょうか?(^^;