いろいろ
クラス定義の依存とポインタの依存、大別すると二種類の依存がある。
class A { B b; }
クラスAはBのポインタを持っている。これをポインタの依存と考える。この場合Bのクラス定義にも依存している。
コールバックの場合、
class A { Base base; public A(Base base){ this.base = base; } } new A(new Derived());
AはDerivedのポインタを持っているが、Derivedのクラス定義には依存していない。
データは何にも依存しない。データの定義を知らないと何の処理も出来ないので、処理はデータの定義に依存する。
データを人にわかるようにしたものを言語、処理を記述したデータをプログラムと呼ぶ。処理とはデータを別のデータに変換すること。
関数は世界が変化しないことを前提にしている。データを別のデータに変換して仕事は終わりとなる。世界はデータを終わりなく変換し続けている。
実際には関数の実行中にも世界は変化し続けている。判断結果は正しくないものになりうる。結局のところ時間が問題だ。AとBが同時に判断して同時に物事を行ってなおどちらも正しい判断をする計算方法が欲しいんだけどそんなものはないのかもしれない。
AとBの利益の和を最大にすることを考える。Aが何をするか分かってないとBは行動を決められない。Bが何をするか分かってないとAは行動を決められない。しかし神はAとBの利益を最大にする方法を知っているはずだ。