これは、シミュレーションモデルに使用するクラス「階層」の一部です(私のコードはPythonですが、私の質問は言語に依存しないと思います)。
class World:
# highest-level class, which "knows" everything about the model
# most likely will have just one instance
# contains (e.g., in a dictionary) references to all the instances of class Agent
class Agent:
# each instance represents an agent
# an agent can, among other things, move around according to certain rules
# movement depends on the internal state of the agent,
# but also on the terrain and other information not stored in the Agent instance
質問:move
インスタンスメソッドはどこに置くべきですか?
class Agent
の依存関係を、それ自体よりも階層の下位にあるクラス(つまり、インスタンスがインスタンスに含まれているクラス)に制限することになっていると思いましたAgent
。しかし、それは、地形などを記述するクラス(少なくとものインターフェイス)への依存関係を作成するため、move
メソッドを含めることができないことを意味します-したがって、への参照(したがって依存関係)を追加したほうがよいでしょう。これはソフトウェア設計の観点からは大丈夫ですか?class Agent
Agent
World
move
別の方法は、メソッドをに配置することです。このclass World
場合、追加の依存関係は発生しません。ただし、class World
ほとんどすべての作業を行うことになり、OOPの主なアイデア(すべての機能を1つの場所にまとめるのではなく、関連するクラスに含めることを理解しています)に反するように思われます。 。
パフォーマンスの考慮事項はわずかな懸念事項にすぎません(とにかく、パフォーマンスが2つのアプローチ間で異なるとは思いません)。
編集:上記の「クラス階層」という言葉を誤用しました。私は継承階層について言及しているのではなく、インスタンスが相互に含まれている一連のクラスについて言及していました。