4

このウェブサイトで説明されているように、

(唯一の)手続き的凝集度を備えたモジュールは、異なる、場合によっては無関係なアクティビティをサポートするモジュールであり、制御は1つのアクティビティから次のアクティビティに渡されます。Page-Jonesは、モジュールの例を示しています(その名前は、「休日の食事の準備:」のようなものである可能性があります。

  • 以前の食事からのきれいな道具
  • トルコを焙煎する準備をする
  • 電話をかける
  • シャワーを浴びる
  • 野菜を刻む
  • セットテーブル

さて、私の質問は、これらのアクティビティのそれぞれ、つまり電話をかけることが独自のメソッドに抽出されても、すべてが同じ順序で呼び出されるかどうかです。

    private void PrepareForHolidayMeal()
    {
    CleanUtensilsfromPreviousMeal();
    PrepareTurkeyforRoasting();
    ...
    SetTable();
    }

この方法はまだ手続き上の結束の例ですか?それとも、問題に関連する1つのタスク(この場合は食事の準備)を実行するためのアクティビティをサポートするため、機能的にまとまりがありますか?

4

2 に答える 2

1

これは非常に興味深い質問です。答えは相対的なものであり、[記事に書かれている]物事を理解する方法と、それらが著者の意図にどのように対応しているかによって異なります。

特に手続き的結束と機能的結束の間には、わずかな違いがあります。手続き的結束は、互いに無関係なステップを含むものです。つまり、繰り返し可能なものであり、それを「固定定義」する必要がある手順の「目標」はありません。再利用。一方、機能的結束は基本的に、さまざまな入力に使用でき、再利用すると(入力に応じて)正しい出力を生成する機能(おそらく入力を受け入れて出力を与える)です。

結論、あなたの質問によると、いいえ、それぞれを別々のメソッドに入れて同じ順序で呼び出しても、プロシージャが実際に何らかの「目標」を持つ関数にならない限り、プロシージャから関数に変わりません。

于 2012-11-26T16:57:12.530 に答える
1

あなたの例では、正当な理由で電話が省略されています。関係のない作業の 1 つです。電話がまだ "..." であると仮定すると、全体が再びまとまりを失います。そうでなければ、食事の準備には他のすべての活動が必要だと主張するかもしれません. これは、「CleanUtensilsfromPreviousMeal」がここで実際に有効かどうかの議論を開始する可能性があります。このアクティビティは、以前にクリーンアップが行われなかった状況でのみ必要になる可能性があるためです。StackExchange の質問は、そのような議論のためのものではありません ... したがって、複数のソフトウェア アーキテクトが合意する決定には、より明確な例が必要です。そうしないと、他の人とは違うと主張する人がいるかもしれません。

于 2012-10-17T18:07:10.447 に答える