オブジェクト指向言語が与えた開発手法への変化(2)

さてさて、だいぶ脱線しましたが本題に戻ります。

オブジェクト指向言語によって、文を構成する上での最低条件であるSVを満たす事ができた。その結果、ソフトウェア開発というものはソフトウェア工学というよりは、むしろ文学に近づいたのではないだろうか、そんな視点からみたら新たな発見があるかもしれない。というのが一連の記事のテーマです。

開発手法が手続き型言語の時代から大きく変わった部分といえば「ウォータフォール型からスパイラル型へ」と言われるような反復型開発(スパイラル型、イテレーティブ型)開発手法の登場だと思います。

最初に提言したのはおそらくRUP(Rational Unified Procces)だといって差し支えないと思うけど、それ以降もアジャイルとかの文脈で「イテレーティブ、イテレーティブ」と言われ続けています。そろそろ定着していると思いたいけど、いろいろと人に話を聞く限りでは、自社サービス系の以外の所はまあ程遠い状況のようで orz 

さて、じゃあなんで繰り返すことが有効になったのか? ということなのですが「顧客の要求に早く答える」的な通り一遍の説明は色々な所でされているので、ここではプログラム設計における繰り返すことの意義に限定して考察しようと思います。

文学的観点から見てみよう、というのがテーマですから「良い文をかくにはどうしたら良いか?」という視点から考えてみます。

このテーマに一番取り組んでいるのはおそらく出版業界の方々でしょう。なので、とりあえず「本を作る」という行為の考察を通じて、オブジェクト指向開発のプロセスの変化についての考察を深めていこうかと思います。

書く本のテーマにもよりますが、

・おおまかな起承転結を決める。
・登場人物のキャラ設定をする。
・章立てをして見出しを決める。

たぶんこんなことをするはずです。いきなり思うままに書き始めるというパターンもありそうですがw 他にもすることがあるでしょうが、オブジェクト指向開発と関連ありそうな部分を恣意的にピックアップしておりますw では、細かくみて行きましょう

おおまかな起承転結を決める

作るシステムの範囲を決めたり、モジュールの大きさを決めたりとかが該当するでしょうか(重要じゃないので適当w)

登場人物のキャラ設定をする

ここらへんはクラス設計に似ています。クラスとはデータと操作(メソッド)が一体となったものです。C言語的にいえば構造体と関数がひとつになったもの。プログラムを書く、という観点からすると「関数の書く位置が多少内側にずれた」に過ぎないのですが、その書く位置が多少変化したことがもたらす意味の変化は甚大である、というのはいままで述べた通り。

UMLとかではデータは属性(Attribute)、メソッドは振る舞い(behavior)とも呼ばれます。この「属性が振る舞いをもつ」という変化によって

クラスが個性を持ち始めた

という変化が起こったことが重要です。ここらへんがクラス設計とキャラクター設定が似通ってきたと個人的に考える理由です。

ドラえもんで説明しましょうw 次の様なシーンを思い浮かべてください。

のび太が問題を多額のお金で解決する

なんかしっくりこないですよね? 「それスネオの役割だろ」って思いません? のび太が暴力で問題を解決、でもやっぱり変です。ドラえもんにおけるジャイアンのやれることが、刺身にたんぽぽをのせる簡単な作業くらいしかなくなりますw 存亡の危機ですねw のび太がそんな振る舞いを見せたら誰もがこう思うでしょう。

のび太のくせに生意気だ!

と。何でこんな話をしたのかというと、オブジェクト指向開発の現場では主にそんなことが議論されている、ということ伝えたいからですw いや真面目にw 

クラスを実装していく内にメソッドは通常増えていくんですが、ある程度開発が進みと増えたメソッドを見直したくなります。だいたい改めて見直すと、そのクラスに相応しくないように思えるメソッドが見つかるものなのです。そういう発見をすると普通の人はメソッドを適切な別のクラスに移動したり、新たな特徴(属性)を持った新たなクラスを作成したくなります。たとえばのび太とスネオがドラゴンボールフュージョンした「スネ太」クラスを作成するとかw

こういうプログラムの書き直し作業を、オブジェクト指向開発ではリファクタリングと呼びます(いまでは一般動詞化しているかも)。

この作業の価値が結構伝えにい

理解されにくい事この上ないのですが、ちと長くなったのでそこらへんはまた来週。