Index: [Article Count Order] [Thread]

Date:  Fri, 2 Mar 2001 12:47:44 +0900
From:  "hasegawa" <hasegawa@....jp>
Subject:  [XP-jp:01676] Re: XP で再利用できますか?
To:  <extremeprogramming-jp@....jp>
Message-Id:  <00c501c0a2cb$914828a0$640aa8c0@....jp>
References:  <006401c09e12$9e1f3860$640aa8c0@....jp> <20010301082223689.AAA235@....jp@ginza>
X-Mail-Count: 01676

長谷川@テクノポートです。

----- Original Message ----- 
送信者 : "Y.Terada" <yterada@....jp>
送信日時 : 2001年 3月 1日 木曜日 午後 05:44

> > 長谷川@テクノポートです。
> 
> こんにちは,寺田@東工大 です.
> レスが遅れて申し訳ありません.
> 大変丁寧なコメントをありがとうございます.

#一瞬、静かになったので、ドキッとしましたが(^^;。

私の方が好きで述べさせてもらっていますので...。

> 私の考えでは,デザインパターンは「経験」の再利用(と共有)だと思ってい
> ます.デザインパターンの偉大な点は,「経験」という形のないものに名前を
> 付けたことだと思います.実生活での会話においても,名前がついているもの
> に関してはコミュニケーションが非常にスムーズですよね.逆に,名前がまだ
> ない概念を説明しようとすると,とても苦労してしまう.そういう意味では,
> 「名前」というのは「概念の説明」を手軽に再利用するための道具になってい
> ると思います.

多分「重要な経験」に対する名前を前提とされていると思います。
なので、大した内容もないことに名前を付けてどうするの、という
質問はなしですね(^^;。

これに関しては、2つあります。
ひとつは、その「重要な経験」って?ということだと思います。
パターンは、基本的にそれがなければ解消できない問題に対応しています。
ある状況で、当たり前にしていれば当然ぶつかるような問題で、
かつ当然のようにその問題を解消するものとでも言いましょうか。
でも、それがなければ解消がほとんど望めないようなものです。

そして、それに名前が付けられていると会話しやすくなります。
概念の再利用ともいえるかもしれませんが、私はむしろ文脈の
見方に重要性があるように感じています。

もうひとつは、名前の問題です。これは落とし穴ですが。
名前が付けられると、私達はそれを直接見ないで、自分の中にある
イメージでそれを捉えるようになります。省力という点ではいいかも
知れませんが、実際にそこにあるものが良く見えなくなる場合もあります。
この辺りは、「老子」などを読まれると、うむっと納得するかもしれません。
#パターンランゲージの最後は、結局パターンランゲージを捨てることです(^^;。

> 確かに,たまたま adaptor は既存コード再利用のための技術となっています
> が,デザインパターン全てが再利用技術だとは思いません.
> 例えば Composite パターンはどうでしょうか? 既存のものを再利用するため
> に Composite パターンを適用する,というのはおかしいと思います.Composi
> te パターンそのものがあらゆる場所で再利用されると考えた方が自然なので
> はないでしょうか.また,「Composite パターン」という名前のおかげで,開
> 発者間で知識が整理されて,知識の再利用が円滑になると思います.

Compositeの場合でも、そう見ようと思えば見れます。
たとえば、ディレクトリとファイルですが、Compositeを使うと、
これが隠れますが、やはり存在します。つまり、legacyなものを
利用する側にとって都合のいいように換えるものでもあると。

ただ、私が言いたかったのは、デザインパターンが単純に、
再利用可能な部品を作っていくことのようには思えないと言うことです。
やはり、legacyなものとの調和というもの、ライブラリとフレームワーク
の組み合わせの自由、問題があってもこのようなシステム適合的発想が
あるんだ、といったところがいいような気がします。
#再利用というと全てがごっちゃにされてしまうよな気がします。

> > こういう状況では、神頼みか蜃気楼という程度のものです。
> > そして、XPにはそういう状況を打開してくれるかもしれない
> > という期待を個人的には持っています。
> 
> ・・・なんだか,随分現状に対して否定的なんですね.
> 仮に現状の「再利用」が蜃気楼であったとして,どうして XP がそういう状況
> を打開するものなのか,教えて頂けないでしょうか? 上記の文脈からは,長
> 谷川さんが XP に期待する理由がうまく読み取れないです.

はい、ずいぶん否定的です(^^;。
現在の先進的方法論のひとつの問題が、現場の問題と
歩調が合っていないことだと思います。
これは技術の問題ではないと思っています。

XPは基本的に、現場に根源となるものを据え付けていると
私は考えています。まずは、開発者自身が自分達のやり方を
見つける必要があると思います。私がペアプログラミングを
面白いと言うのは、今までとは別の見方で自分達の置かれた
環境が見れるようになるのでは、という観点からです。

XPが打開すると考えている根拠を述べることはとても難しいです。
しかし、幾つかの徴といったものがあり、それが単なる方法論では
ないものにしていると思います。たとえば「勇気」という言葉が
出てきます。私はパターンで、自分を信じることを取り戻したと
思っています。自信過剰というものとは根本的に違います。

これとは逆にオブジェクト指向は、私にはどうも自分を信じるなと
でも言われているような気がします。長い間、オブジェクト指向に
トライしてきたと自分では思っているのですが、いつまでたっても、
設計すると本当にこれでいいのかという疑問を断ち切ることが
できませんでした。

これは思慮深い方がいいというようなことではなく、
自分の直感すら信じられなくなると言うことです。
これはとてもいい世界だとは思えません。
今はまだそれをちゃんと説明できませんが、
いつか説明できる時が来ると思っています。

#私がパターンに出会わなかったら、
#迷わずXPに飛び込んでいたと思います(^^;。

> 私には,「再利用」を簡単にあきらめてしまうことはできません.
> 自分で作った行列・ベクトル演算ライブラリなどは,何度も繰り返し再利用し
> ましたし,その結果として再利用の便利さを実感しました.その実感は決して
> 「蜃気楼」ではなかったと思います.
> ですから,今後もぜひ再利用を心がけていきたいと考えています.確かに再利
> 用は難しいのかもしれません.しかし,だからといって諦めてしまうのではな
> く,どうすれば再利用という名の暴れ馬を飼いならすことができるのか,考え
> るべきだと思っています.

#どう言えばいいのか、迷いますしたが。
少しきつい言い方になるかもしれませんが、それって作るものを
既にあるものにあわせているだけじゃ?って気もします。
本当に作る側にとって、それは適合しているのか、もう少し突っ込めば、
そういうことを考えることすら棚上げしてしまうことになるンじゃ?
と言うことです。

確かに、既にあるものを利用するというのも必要かもしれません。
しかし、大切なことは、自分達で作っていける、構築するための
何かを確実につかむことではないでしょうか?

ちょっと、個人的な話になってしまいますが、私は同じものでも、
何度も何度もやり換えます。手になじませ、頭に形を焼き付け、
できれば目をつぶっていても、言われた要求に適合するものを
作り出せるようになりたいと思っています。
一見、こんなやり方では多くのことをマスターできないと思われる
かも知れませんが、多分そうではないと思います。

これは、寺田さんの言われている「暴れ馬を飼いならす」とは
逆の方法かもしれません。こちら側をならしているのですから。
いいか悪いかよくわかりませんが、ジョブの場合は割切って
合格点レベルで打ち切ります。その後は、Piecemeal growth
ってところですか。

> > それと、少し気になるのが、もしかしたら統一化のようなことを
> > 考えられているのか、です。または、数少ない優秀な、もしくは
> > 再利用可能な部品を使って、構築すると言ったような。
    ...
> 
> そうですね.
> 私も,巨大な「統一された」ライブラリはやっぱり良くないと思います.比較
> 的小さなライブラリから様々なクラスを「つまみ食い」できる状態がベストで
> はないでしょうか.言い換えれば,「つまみ食い」ができるようなライブラリ
> 作りを心がければ,再利用は十分可能だと思います.

ちょっと、ずれたかもしれません。私が言いたかったのは、
「たったひとつのことで済ませる」という考え方です。

「つまみ食い」の状況が余り浮かばないので、どう答えていいのか
難しいですが、ある特定のオブジェクトを頂点としたオブジェクト
ライブラリのようなものでしょうか?こういったものは、何ていうか
アーキテクチャミスマッチを起こして、相互運用が難しくなりますね。
これは、使う側が利用するものにあわせる場合の典型的なひとつでしょうね。

> クラスも,あまり巨大なものは嫌がられますよね.responsibility が過多に
> なっているクラスはリファクタリングによって複数のクラスに分割するべきで
> しょう.同様に,ライブラリにも responsibility という考え方を導入するべ
> きかもしれません.つまり,ライブラリが責任過多になった場合には,リファ
> クタリングにより複数のライブラリに分割するわけです.こうすれば,ライブ
> ラリも XP 的なインクリメンタルな開発が可能かもしれません.

(以下は一般的なことではなく、純個人的なことです)

私は、最近余りオブジェクトを意識しません。たとえば、dircmpを
作るのに、ファイルクラスやディレクトリクラスを作るようなことは
しません。dircmpにとっては、そのほとんどが不要なものです。
#もしファイルの何らかの属性を取得したいために、常にファイル
#オブジェクトが必要なら、再利用への渇望は理解できそうです。

と言って、既に用意されていて、使えるなら使ってもいいですが、
それは公共の場には出てきません。あるクラスがプライベートに
利用しているだけです。...ちょっと、再利用からずれましたか。
#余りこういうレベルで再利用を強制する気はありません。
#要はどちらがシンプルになるかです。

ライブラリも個々は小さくする傾向にあります。
その代わり、ライブラリのコミュニティを構成します。
やっていることは同じなんですが、構築する側としては、
個々の変更が楽になります。これなんかは、リファクタリングの
おかげと言うより、リファクタリングをしやすくするための
段取りでしょうね。

                    *  *  *

本来なら、こういった再利用性に関しては、しっかりと
意味を確定して、議論を進めないといけないとは思います。
たとえば、コードの再利用に関しては、
    『C++言語書法-コード再利用の奥義と実践』
などを参照して意見を述べていくことも必要かと思います。

まあ、それはそれで面白いですし、個人的には
framework+pattern+libraryによる再利用空間の構築
という見方をしているのですが、それも面白いと思っています。

しかし、それらはXPと同じ平面上にはないと考えています。
これは、XPでは再利用可能なものを作り出せないと言うことではなく、
XPの実践では根本的なことではないと個人的に思っています。

#といっても、私も余りXPをつかみきっていないので
#偉そうなことはいえませんが(^^。


-- 長谷川(hasegawa@....jp)