有一个需要引用实例化对象的类是不好的做法?

SDG*_*tor 4 oop

我在某人的代码和思想中看到了这个,这是解决这一特定问题的一种优雅方式,但它可能以史诗般的方式违反了良好的OO原则.

在一组类的构造函数中,这些类都是从公共基类派生的,他需要引用要传递的实例化类.例如,
Foo Foo_i = new(this);

然后在Foo上调用实例化类中的方法来获取有关自身和实例化类所包含的其他对象的信息.

一方面,这简化了在硬件中模拟5层树结构的代码TON(代理插入多个交换机上的端口等).另一方面,这些物体彼此紧密耦合的方式似乎非常错误,但我不太了解OOA&D将手指放在上面.

那么,这没关系吗?或者这是OO等同于goto语句?

Bos*_*gan 5

你应该尽量避免相互引用(特别是在实施遏制时),但往往无法避免.即父母子女关系 - 孩子经常需要知道父母并在发生某些事件时通知父母.如果你真的需要那样做 - 选择接口(或者在C++的情况下抽象类).所以你的实例化类应该实现一些接口,并且instanciated类应该只知道它作为接口 - 这将显着减少耦合.在某些方面,这种方法类似于嵌套的侦听器类,因为它只暴露了类的一部分,但它更容易维护.这是一个小C#的例子:

interface IParent
{
    //some methods here
}

class Child
{
    // child will know parent (instancing class) as interface only
    private readonly IParent parent_;
    public Child(IParent parent)
    {
        parent_ = parent;
    }
}

class Parent : IParent
{
    // IParent implementation and other methods here
}
Run Code Online (Sandbox Code Playgroud)