Index: [Article Count Order] [Thread]

Date:  Sat, 16 Aug 2003 15:56:55 +0900
From:  Hidehiko AKASAKA <akasaka.h@....com>
Subject:  [XP-jp:04607] Re: 責務,変更,シンプル (was Re: 「 An ExtremePro)grammingEpisode 」の翻訳版を
To:  extremeprogramming-jp@....jp
Message-Id:  <20030816153237.00A3.AKASAKA.H@....com>
In-Reply-To:  <3F3DB7D0.172FDF38@....jp>
References:  <200308151325.JIC76439.ONVUBV@....jp> <3F3DB7D0.172FDF38@....jp>
X-Mail-Count: 04607

平鍋さん、こんにちは。
赤坂です。

とても勉強になります。

Kenji HIRANABE <hiranabe@....jp> san wrote:

> なるほど.「シンプル」がより「現実的な」基準ということですね.賛成です.
> 
> また,どちらの場合でも,「名前」に注目するとその分割,分担が良いかどうか,
> が見えるというケースが多いと思っています.

そうですね。
適切な名前があるかどうかで、分かり易さも大きく変わってしまいますよね。
# でもこれが一番難しいです、私には。

> ちょっと平鍋なりにロジックを作ってみます(未完).
> 
> まず,「よい設計」として,次の「ビジネス的価値」基準を出発点とします.
> 
> ・プログラムの開発・保守のトータルコストが低いこと
> ・プログラムを早期に出荷すること
> ・プログラムがビジネス変化に対応すること
> 
> このためには,
> 
> (1)仕様変更のコスト・タイムが小さい ⇒ extendibility(architecture 連続性)が高い設計
> (2)欠陥除去のコスト・タイムが小さい ⇒ testability が高い設計
> 
> という2つクライテリアが重要です.(正の変更と負の変更のコスト)
> 
> そして,それを支える
> 
> (3)プログラムの理解コスト・タイムが小さい ⇒ human-readability(=understandability) が
> 高い設計
> 
> が最も重要です.

はい、そうですね。

> --------------------------
> (1)は
> 【Extendibility Principle】(by Meyer)
> ・Small changes of specification should yeild small change of architecture.
> 仕様をX軸,アーキテクチャをY軸に取ったとき,その関数が連続関数であること,
> つまり少々の仕様変更は少々のアーキテクチャ変更になること.

これは良い(興味深い)原則ですね。
# 仕様と(、それを実現する)アーキテクチャが同じ複雑さになる訳ですね。
# 大きな仕様変更は、アーキテクチャに大きな影響があって良いのですね。

..snip..

> さて,「責務分担」ですが,まず,(3)の
> understandability(理解しやすい)を重要としましょう.
> これは「説明しやすい」とも捉えられます.そうすると,

すみません。私の場合、この時点で

理解性の高い ⇒ 自然な役割分担

と考えるのですが、これは個人差があるからダメなのでしょうか?

> (A)現実の世界と直接対応【Direct Mapping Principle】(by Meyer)
> (B)シンプルである(直接対応でないが,簡単である)(by Beck)
> 
> という2つの分担方針があるか,と思います.どちらの場合にも当てはまる,
> 責務分担の原則は,次に原則に照らして評価できます.
> 
> (A)(B)に共通する原則
> --------------------------
> 【A Good Abstraction Has A Good Name】
> ・よい抽象化は,よい名前を持つ.(by 平鍋)
> --------------------------
> 
> ここまでで,もっとも重要な(3)のunderstandabilityという性質については,
> (A)(B)の2つの方針があり,どちらでも「良い名前が付けられる」という
> ことが一つの条件になりうる可能性を示しました.(実際は,A’として
> メタファを使うことができ,これもunderstandabilityを上げます.そして
> それでも,現実世界⇒認識世界と置きかえることで,MeyerのDirect Mapping
> Principleは機能します)

すみません。私にとって(A)は(A')のことを差していますが、
(A')と(B)の違い(シンプルとは何か)がちょっとイメージできません。

> 次に,(A)と(B)は対立するクライテリアとなることがあります.
> これは,(1),(2)の正負の変更に対する容易さとコストの
> トレードオフになります.....
> 
> と,ここまで,書いて,うまくまとまりませんでした(^^;)....ただ,
> 「テスト可能性」と「変更に対する追随性」でもって,うまくオブジェクト指向
> 的な「よい設計」を再定義できる気がしています.
> 
> old:
> よい Separation of Concerns = 自然な責務分割 + 強い凝集度 + 弱いカプリング
> 
> new:
> よい Separation of Concerns = 変更を伝播させない分割 + テスト可能な分割

なるほど、なるほど。良い設計だとおもいます。
でも、old と new は実は(結果として)一緒なのでは?

私は、自然な役割分担によって、
> 【Extendibility Principle】(by Meyer)
が成立するような気がします。

私は何か勘違いしているのでしょうか? > 平鍋さん

--
赤坂 英彦 (Hidehiko AKASAKA)
akasaka.h@....com