asatoの技術的な日常日記

「成長に最大の責任をもつ者は、本人であって組織ではない。自らと組織を成長させるためには何に集中すべきかを、自らに問わなければならない」  非営利組織の経営 - ピーター・ドラッカー

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

デザイン:設計手法

設計手法って何だろう? 手法とかにあまりこだわらない or 気にしない僕なので、今までちゃんと考えたことが無い。

Nikos Salingaros さんの「A Theory of Architecture」という本を読んでいたら、こんなことが書かれていた(強調は僕)。


[...], a design method depends upon the number of solutions it can generate. We are arguing for including all possible design solutions to choose from. [...]



誤読してたらあれだけど、さらに当たり前かもしれないけど、ある設計手法とその他の設計手法の違いの一つは、その手法が生成する解の種類と数だと言えるんじゃないかと思う。

ここでは、簡単のため、あるプログラミング言語を使うとし、設計手法はその言語に依存するとする。

design_method.png


異なる二つの設計手法をもとに、簡単な例で考えたい。

一つ目の手法は、クラスのフィールド(データ)をきちんとカプセル化するという手法。

二つ目の手法は、クラスのフィールドを定義しても、カプセル化するかどうかについては何も言わない手法。


一つ目の手法が生成する解は、例えば次のもの。

public class MyClass {

private int n;

}



一方、二つ目の手法が生成する解は、次の二つ。


public class MyClass {

private int n;

}





public class MyClass {

int n;

}




だから何? という内容かもしれない。では、リファクタリングの役割とはここでは何だといえるだろうか? リファクタリングは設計手法だろうか? 

先ほどの例を使うなら、「フィールドのカプセル化」のリファクタリングをどう解釈できるだろう?


design_method2.png


上の図を見て分かるように、リファクタリングは、異なる設計手法の間をマッピングするような手法であると言えると思う。

もう少し一般的に言えば、ある解からある解へのマッピング手法。同じ設計手法でのマッピングかもしれないし、異なる設計手法でのマッピングかもしれない。


一般的な議論すぎて何も面白くないかもしれない。でも、もし、設計手法によって生成できる解の数と種類が異なるとしたら、どんな設計手法が望ましいだろう?


解の数と種類だけを考えた場合、設計手法の種類としては次の可能性が考えられる。

design_method3.png


5番目は論外だとしても、じゃあ、4番目が一番望ましいのか、という話になるかもしれない(1番から3番と、4番と5番の図を一緒に表したのは間違いかも)。

そもそも、4番は手法ではないといえるかもしれない。

さらに、そもそも、ある手法の間で解の種類と数が異なるのは何故だろう? ということになる。異なるのは、適切な解(その手法の解空間に含まれる解)と適切でない解(その手法の解空間に含まれない解)を区別する、制約やガイドラインがあるためだと考えられる。


とすると、設計手法とは、制約やガイドラインの集合で構成されるといえる。

とすると、ある意味では、細かな構成要素に分解できたことになるので、構成要素を組み合すことで様々な設計手法を再構成できるとも考えられる。


中途半端だけど考察終わり。


スポンサーサイト

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://asatohan.blog77.fc2.com/tb.php/79-c67589b2
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。