Oop 相互需要的对象
我所处的情况是,两个类(我们称之为A和B)相互关联(它们的方法依赖于另一个类的数据),但IS-A关系不合适。我可以使用合成,这样两个对象都有存储另一个对象的字段。但这对我来说似乎很难看。我目前所做的是创建另一个类C,该类包含通过合成从A和B生成的对象,当我想调用类A的方法时,我传递对象B。我对这种方法的问题是:Oop 相互需要的对象,oop,Oop,我所处的情况是,两个类(我们称之为A和B)相互关联(它们的方法依赖于另一个类的数据),但IS-A关系不合适。我可以使用合成,这样两个对象都有存储另一个对象的字段。但这对我来说似乎很难看。我目前所做的是创建另一个类C,该类包含通过合成从A和B生成的对象,当我想调用类A的方法时,我传递对象B。我对这种方法的问题是: 我需要将一个对象传递给另一个对象,这样它就开始类似于一个简单的函数参数传递,而不是对象封装其数据的OOP方法 如果我需要更改某些内容,我可能必须修改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
}
谢谢,,
佐尔坦“计算机科学中的所有问题都可以通过另一个间接层次来解决,除了间接层次太多的问题”——大卫·惠勒
您试图添加另一个间接层,但它没有解决您的问题。所以有一件事是根本错误的
以下是我的观点:
当您有两个相互依赖的对象时,这可能意味着两个类应该合并到一个更大的类中,从而生成一个同时具有这两种功能的更大的对象
为什么不呢?有许多方法可以用面向对象的方式对域业务进行建模,随着域业务的增长,您的方法可能不再适用。一般来说,让两个对象相互依赖不是一个好主意。但是,如果你不提供一些具体的信息/代码,很难说什么。相互组合不是一个好主意,而是一个线索,表明你的类是如此相关,也许,它们必须是一个具有a和B属性的类。但是,没有具体的代码是很难的。是的,它们是相关的,但如果它们是一个类,然后我会有把几乎所有的东西都放在一个类中的诱惑,这在OOP中不是很有利。