ソフトウェアアーキテクチャの基礎という書籍の中でコナーセンス(connascence)という概念が紹介されている。定義は孫引きになるが『What Every Programmer Should Know About Object-Oriented Design』で下記のように与えられているらしい。

システムの全体的な正しさを維持するため、あるコンポーネントの変更が別のコンポーネントの変更を必要とする場合、2つのコンポーネントはコナーセント(接続)されている。

コナーセンスには静的なものと動的なものがあり、さらにそれぞれいくつかの種類に分かれている。ウェブ上の解説ではconnascence.io(日本語訳)が参考になりそうだった。

自分ならコナーセンスを前提という言葉で説明しようとするかもしれない。静的なコナーセンスは前提知識、動的なコナーセンスは前提条件といったところか。コードを書くのに必要な前提知識は少ない方が良いし、実行時に満たさねばならない前提条件は少ない方が良い。コード上近くにあるなら要求する前提はいくらか多くても構わないが、遠くにあるなら要求する前提は少なくしなければならない。リファクタリングでは要求する前提の削減を目指す。

ただ「同期的なコナーセンス」や「非同期的なコナーセンス」を説明しようとすると苦しくなってくる。前者は同期的に振る舞うという前提を持つこと、後者はそのような前提を持たないこと、とは言えるだろうかと考えたあたりで面倒になってしまった。