前のブログで、「成果物を出力するものまで規定できれば、開発は楽になるし、ユーザーも開発費は低減できる(が、実は、これをちゃんとやることは、無理。」の理由、昨日に続く第二段!
最近のシステム開発論は、オブジェクト指向に傾いている。このオブジェクト指向に切り替わるときに、実はシステムの開発内容が大きく変わった。
そのことを、久保田達也さんや、波頭亮さんが、出てくる企画バトル番組が、10年以上前だったかなー?にあって、その番組に、昔のマイクソフトの社長(いまは、ソフトバンクBBの偉い人なのかな?)の阿多氏が出たことがあった。ちなみに、当時、阿多氏は、マーケティング部の人だったが。。。
さらにちなみに、その番組のアシスタントは向井亜紀さん(だんなさんが、高田総統、で思い出した!このブログで、高田総統がインリンに小川直也と戦わせるって話書いたけど、結果は、インリンが勝ったらしい!?って、話を戻す)だった。
で、その番組で、もう、発言した阿多氏も含め、だれも覚えてないと思うけど、そこで、おもしろいことを言ってだぞ!
「それ以前の開発方法とちがって、最近(10年前の最近=オブジェクト指向)は、世界観全体を開発する」みたいなことをいってたんだ。
つまり、いままでの開発というのは、開発したい部分を切り出して、そこだけ、入力と出力、開発に必要なロジックを切り出して、開発していた。いわば、システム開発できる部分を切り出して、開発していた。
それに対して、オブジェクト指向っていうのは、モデル全体、そのモデルで表現される世界全体を開発してしまう、危険をはらんでいる。
つまり、クラスをきってしまった場合、そのクラスが、出力にあんまり関係が無い話でも、どんどん深入りができる。
ゲームプログラムなどでは、この深入りが面白いんだけど(登場人物のキャラクター、なんでそこまで決めるの?っていうやつ)、システム開発なんかだと、不必要なメソッドを作ったり(対称性を考えて、このメソッドを作っとこうとか)、不必要に深入りしたりする。
具体例で、夕飯支援システムで考える。
商品っていうクラスをきった場合、お店ごとに商品がちがうので、クラスとしては、商品クラスをつくって、その中に、マクドナルドの商品とか、石焼芋やの商品とかを派生させないと、うまく定義できない。
で、マクドナルドの商品を、モデル化して、(セット商品とか、単品とかもわけて)それら、派生した商品それぞれに、発注するというメソッドを記述することになる。
この商品、もちろん、お店によって、ぜんぜんちかうので、RDBでは定義できない。
やるとしたら、XMLDBで定義するか。。。
っていう感じになるけど、前のブログで書いたとおり、出力だけ考えたら、この商品、ここまで定義しなくていいし、そもそも、DBにする必要ないのよ!
でも、クラスとして認識されると、ここまで、モデル化しないと、いけなくなるのよね。
結局、出力に関係ないクラス定義に忙殺されて、全体をモデル化しようとしちゃって、肝心の開発の難易度を、絶望的にあげてしまうのよ。
今のマクドナルド商品クラスのようにね(マクドナルドの商品をクラスにして、注文メソッドを作るのって、難しいよ!うそだと思ったら、書いてみ!)。昔だと、目的のはっきりしてない開発は、出来なかったんだけど、オブジェクト指向の場合、クラスと戯れることで、開発している気になるのよ。さっきの例だと、マクドナルドの商品クラスの開発のようなのをやってると、開発してる気になるのよ。出力には、関係ないんだよ!。
最近のEAとかも、全社的に考える場合、お金を生み出さないような不必要な部分を考慮するために、結構たいへんな作業になってしまう危険があるのよ。
EAを行う目的がはっきりしてないとね。
最近のシステム開発論は、オブジェクト指向に傾いている。このオブジェクト指向に切り替わるときに、実はシステムの開発内容が大きく変わった。
そのことを、久保田達也さんや、波頭亮さんが、出てくる企画バトル番組が、10年以上前だったかなー?にあって、その番組に、昔のマイクソフトの社長(いまは、ソフトバンクBBの偉い人なのかな?)の阿多氏が出たことがあった。ちなみに、当時、阿多氏は、マーケティング部の人だったが。。。
さらにちなみに、その番組のアシスタントは向井亜紀さん(だんなさんが、高田総統、で思い出した!このブログで、高田総統がインリンに小川直也と戦わせるって話書いたけど、結果は、インリンが勝ったらしい!?って、話を戻す)だった。
で、その番組で、もう、発言した阿多氏も含め、だれも覚えてないと思うけど、そこで、おもしろいことを言ってだぞ!
「それ以前の開発方法とちがって、最近(10年前の最近=オブジェクト指向)は、世界観全体を開発する」みたいなことをいってたんだ。
つまり、いままでの開発というのは、開発したい部分を切り出して、そこだけ、入力と出力、開発に必要なロジックを切り出して、開発していた。いわば、システム開発できる部分を切り出して、開発していた。
それに対して、オブジェクト指向っていうのは、モデル全体、そのモデルで表現される世界全体を開発してしまう、危険をはらんでいる。
つまり、クラスをきってしまった場合、そのクラスが、出力にあんまり関係が無い話でも、どんどん深入りができる。
ゲームプログラムなどでは、この深入りが面白いんだけど(登場人物のキャラクター、なんでそこまで決めるの?っていうやつ)、システム開発なんかだと、不必要なメソッドを作ったり(対称性を考えて、このメソッドを作っとこうとか)、不必要に深入りしたりする。
具体例で、夕飯支援システムで考える。
商品っていうクラスをきった場合、お店ごとに商品がちがうので、クラスとしては、商品クラスをつくって、その中に、マクドナルドの商品とか、石焼芋やの商品とかを派生させないと、うまく定義できない。
で、マクドナルドの商品を、モデル化して、(セット商品とか、単品とかもわけて)それら、派生した商品それぞれに、発注するというメソッドを記述することになる。
この商品、もちろん、お店によって、ぜんぜんちかうので、RDBでは定義できない。
やるとしたら、XMLDBで定義するか。。。
っていう感じになるけど、前のブログで書いたとおり、出力だけ考えたら、この商品、ここまで定義しなくていいし、そもそも、DBにする必要ないのよ!
でも、クラスとして認識されると、ここまで、モデル化しないと、いけなくなるのよね。
結局、出力に関係ないクラス定義に忙殺されて、全体をモデル化しようとしちゃって、肝心の開発の難易度を、絶望的にあげてしまうのよ。
今のマクドナルド商品クラスのようにね(マクドナルドの商品をクラスにして、注文メソッドを作るのって、難しいよ!うそだと思ったら、書いてみ!)。昔だと、目的のはっきりしてない開発は、出来なかったんだけど、オブジェクト指向の場合、クラスと戯れることで、開発している気になるのよ。さっきの例だと、マクドナルドの商品クラスの開発のようなのをやってると、開発してる気になるのよ。出力には、関係ないんだよ!。
最近のEAとかも、全社的に考える場合、お金を生み出さないような不必要な部分を考慮するために、結構たいへんな作業になってしまう危険があるのよ。
EAを行う目的がはっきりしてないとね。