0

メソッドM1を想定し、M2 強く関連する責任を負う

最初の例:

もしも

M1andM2はクラス内で定義されますA(したがって、クラスAは非常にまとまりがあります) 。

•クラスのB使用A.M1とクラスのC使用A.M2

それから

•とクラスAの両方に結合されているBC

• の署名を変更する には、M1でのみ変更が必要ですが、では必要ありBません。C

2 番目の例:

もしも

M1クラス内で定義されているA1(したがってBと結合されているA1)

M2クラスで定義されているA2(したがって、Cと結合されているA2)

それから

• の署名を変更するには、M1でのみ変更が必要ですが、では必要ありBません。C

a) 私の理解では、最後の例のクラスは、最初の例のクラスよりも結合されていません! または、何か不足していますか?

b)私が知る限り、最初の例のクラスは、次の場合にのみ2番目の例のクラスよりも疎結合です。

  • M1の署名を変更するには、 の署名も変更する必要があると想定していM2ますが、そう頻繁に起こるとは思いませんか?!

  • または、 と の両方が同じタイプ T1 のデータM1M2操作する場合、T1 を T2 に置き換えるには、M1M2?!の両方を変更する必要があります。

  • または、密接に関連する責任があるため、変更するM1と変更が必要になるM2可能性がはるかに高いと仮定すると(直接的または間接的に呼び出さなくても)?!M1M2M1M2

  • または、密接に関連する責任があるために、一部のクラスが と の両方を必要とする可能性がはるかに高いと仮定すると(そのため、M1とを単一のクラスに持つことで結合が減少します)?!M2M1M2M1M2

c) ( withinとwithinを定義する代わりに) M1and withinを定義すると結合が減少する理由は他にありますか?M2AM1A1M2A2

注 - メンテナンスと再利用が容易なため、凝集性の高いモジュールが必要であることは承知しています。

ありがとうございました

4

1 に答える 1

2

はい、そうです。あなたが見逃しているのは、ClassAがまとまりがある場合、M1を変更するとClassBがClassAの他のメソッドにアクセスすることです。ClassA 自体の他のモジュール (メソッドと変数) を変更する必要がないため、メンテナンスが増加します。

クラスを cohesive (たとえば ClassA) と呼ぶとき、ClassA の要件に従って呼び出し元クラス (ClassB) を作成する必要なく、クラスの目的を簡単に使用できることを意味します。したがって、ClassB は ClassA に依存しないため、凝集度が低下します。

メソッドの観点から結束を考えてはいけません。メソッドはまとまりがあるとは言えませんが、クラスはまとまりがあります。

于 2012-06-27T09:14:10.250 に答える