coupling
いろいろな意味が あるが、ここでは特に software におけるモノに着目する。
他の意味
カップリング
継手
連結器
結合性: 疎密
table:強さ
疎結合 Loose Coupling
密結合 Tight Coupling
低凝集 Low Cohesion
高凝集 High Cohesion
下流の利用者が上流に依存して結合してる とき、上流からは下流に知識が流れてる。
公開して共有する知識が少ない ほど 変更の連鎖的な波及を減らせる。
3次元ある
強度 ≈ 種類
空間 = 距離
時間 = 変動性
aka. protocol, contract
物理的に つながって なくても、知識に依存してて 同時に変更 せざるを得ない 結合が あり得る。
integration strength
ja: 統合強度
by Khononov
interfaceに ついて 語る
モジュール結合とコナーセンスの概念を統合する。
module coupling
connascence
4 levels:
intrusive coupling
境界を侵犯して侵入してる。
functional coupling
共有された ふるまい など。重複してしまってる。
degrees
sequential functional coupling
transactional functional coupling
symmetric functional coupling
= duplicated functionality
= duplicated knowledge
model coupling
大雑把なインターフェイス。
結局、実装モデルが そのまま露出して しまってる。
余計な共有知識がある。
contract coupling
統制されたインターフェイス。専用モデル(統合モデル)。
コナーセンスも一様に低い。 (sup CC < inf MC)
余計な共有知識がない。
integration contract: public interface
内部や実装のmodelよりも安定してる。
degree
共有される知識の複雑さ の度合い
distance
ja: 距離
種類: 物理的、組織的つまり所有権、相互作用
遠いほど高コスト
遠いほどライフサイクル結合が低い(逆比例)。
実行時結合: 同期統合なら近く、非同期統合なら遠い。
同期 vs 非同期
cf. proximity
volatility
ja: 変動性 = 変更頻度
解法 and/or 問題が 変化する。
3軸 8象限
高変動性 0,1 × 高強度 0,1
安定性
= 低変動性 ∨ 低強度
= 高変動性 ⊼ 高強度
= 低変更コスト
変更コスト = 高変動性 ∧ 高強度
en: mantainance effort
= 高強度 ⊻ 遠距離
= 高強度 ≠ 遠距離
= { 高凝集, 疎結合 }
高凝集と疎結合は排反
高凝集 = 高強度 ↛ 遠距離
疎結合 = 高強度 ↚ 遠距離
複雑性
= ¬ modularity = 変動性 ↔ 距離
大域的複雑性 = 高変動 ∧ 遠距離
局所的複雑性 = 高変動 ⊽ 遠距離
= 低変動 ∧ 近距離
均衡度
= 高変動 → 高モジュール性
= 高モジュール性 ← 高変動
= no modularity even if high volatility
en: balance
均衡度が高い結合を均衡結合と呼ぶ。
wint.icon ここで作られたブール代数風味の代数構造は complemented chain とでも呼べるだろう。
complemented ⇒ bounded
chain ⇒ distributive lattice
trilemma: CCP, REP, CRP
ref.
Khononov. (2024). Balancing Coupling in Software Design: Universal Design Principles for Architecting Modular Software Systems.
翻訳
削減の優先度: 状態 > 結合 > 複雑性 > コード量