我处于两个类(我们称 A B )彼此相关(它们的方法依赖于另一个类的数据)但IS-A 关系不合适的情况。我可以使用组合,这样两个对象都有存储另一个对象的字段。但这对我来说似乎很丑陋。我目前所做的是通过组合创建另一个类 C ,其中包含来自 A B 的对象,当我想调用 A 类的方法时,我传递了对象 B 。我对这种方法的问题:

  • 我需要将一个对象传递给另一个对象,因此它开始类似于一个简单的函数参数传递,而不是对象封装其数据的 OOP 方法
  • 如果我需要改变一些东西,我可能不得不修改两个类的代码 A B ,这不是代码重用的好点

  • 您有什么推荐的吗?

    示例
    class Mesh:
      method: plot(this, Solver)
              {
                 plot data from class Solver // need to pass a Solver object, so the class is not self-contained
              }
      method: intersect(this, Domain)
              {
                 do sth // depends on Domain, so we need to pass it
              }
    
    class Domain:
      method: plot(this)
              {
                 plot data from own data // no problem
              }
      method: selectVertex(this, Mesh)
              {
                 do sth // depends on Mesh, so we need to pass it
              }
    

    谢谢,
    佐尔坦

    最佳答案

    “计算机科学中的所有问题都可以通过另一个间接层次来解决,除了太多间接层次的问题” - David Wheeler。

    您尝试添加另一个间接层,但它没有解决您的问题。所以有一件事从根本上是错误的。

    这是我的观点:

    当你有 2 个相互依赖的对象时,这可能意味着 2 个类应该合并成一个更大的类,这反过来又产生一个更大的对象,它具有两者的功能。

    为什么不?有很多方法可以以面向对象的方式为域业务建模,随着域业务的增长,您的方法可能不再适用。

    关于oop - 相互需要的对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36850001/

    10-10 18:41
    查看更多