1
オブジェクト間の関係
数週間、オブジェクト間の関係について考えてきました。特にOOPのオブジェクトについては考えていません。たとえばC ++では、他のオブジェクトへのアクセスを必要とする構造内でポインターまたはポインターのコンテナーを階層化することでそれを表現することに慣れています。オブジェクトAがにアクセスする必要がある場合、in Bを見つけることは珍しいことではありません。B *pBA しかし、私はもはやC ++プログラマーではありません。関数型言語を使用してプログラムを作成します。特に、純粋な関数型言語であるHaskellを使用します。ポインター、参照、またはそのようなものを使用することは可能ですが、「Haskell以外の方法で行う」など、私はそれに不思議に思います。 それから私はそれらすべての関係のことについてもう少し深く考え、要点に達しました: 「なぜこのような関係をレイヤー化して表現するのですか? 私はすでにそれについて考えている人々を読んだ(ここ)。私の見解では、明示的なグラフを介して関係を表現する方が、タイプのコアに焦点を合わせ、後でコンビネータを介して関係を表現できるため、はるかに優れています(SQLと少し似ています)。 コア私たちは定義するときにことを意味しA、我々は何を定義するために期待Aされるで作られたそれはない、何に依存します。たとえば、ビデオゲームでは、タイプがある場合Character、それについて話すことTraitは合法です、Skillまたはそのようなことですが、私たちが話すWeaponかItemsどうかはそうですか?もうよくわかりません。次に: data Character = { chSkills :: [Skill] , chTraits :: [Traits] , chName :: String , chWeapon :: IORef Weapon -- or STRef, or whatever , chItems :: IORef [Item] -- ditto } 私にとってデザインの点で本当に間違っているように思えます。私はむしろ次のようなものを好みます: data Character = { chSkills :: …