Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 在对象之间共享数据、绑定属性_Oop - Fatal编程技术网

Oop 在对象之间共享数据、绑定属性

Oop 在对象之间共享数据、绑定属性,oop,Oop,我对对象数据共享有一些想法 让我们用属性p1、p2定义类C(让我们认为它是不可变的) 让我们有一些类C的对象X和Y 让我们为类C的对象创建某种“容器”G。 “容器”G具有属性gp1 让我们将对象X添加到“容器”G,并使用G.gp1值“绑定”X.p1。(Bind确实指出,当对象X尝试获取属性p1的值时,它会获取gp1的值。) 让我们将对象Y添加到容器G中,并用G.gp1值“绑定”Y.p1 你可能认为这对人类来说很简单 我唯一想到的是为p1、p2属性访问创建接口。然后在类C(无共享数据)和类GC

我对对象数据共享有一些想法

  • 让我们用属性p1、p2定义类C(让我们认为它是不可变的)
  • 让我们有一些类C的对象X和Y
  • 让我们为类C的对象创建某种“容器”G。 “容器”G具有属性gp1
  • 让我们将对象X添加到“容器”G,并使用G.gp1值“绑定”X.p1。(Bind确实指出,当对象X尝试获取属性p1的值时,它会获取gp1的值。)
  • 让我们将对象Y添加到容器G中,并用G.gp1值“绑定”Y.p1
你可能认为这对人类来说很简单

我唯一想到的是为p1、p2属性访问创建接口。然后在类C(无共享数据)和类GC(带容器数据)中实现接口。然后装饰对象以添加方法

正如您所看到的,每个绑定都添加了一个接口+接口实现。要写的东西太多了,有点难看

问题是:
如何为每个对象创建这种绑定操作?(不使用DSC,使用C派生的语言:java、C++、C++、PHP、……)< /p> ,问题在哪里?p2的作用是什么

static class G{
    int gp1;
}
static class C{
    int p1,p2;
    G provider; 
    C(G provider){
        provider=this.provider;
    }
    int getP1(){
        return provider.gp1; 
    }
}
static class X extends C{
    X(G provider){
        super(provider);
    }
}
static class Y extends C{
    Y(G provider){
        super(provider);
    }
}
只有通过接口提供提供者,解决方案才能是通用的。但你不想用它。没有接口的通用解决方案在这里是不可能的

interface IProvider{
    int getGp1();
}
static class G implements IProvider{
    private int gp1;
    int getGp1(){return gp1};
}
static class C{
    int p1,p2;
    IProvider provider; 
    C(IProvider provider){
        provider=this.provider;
    }
    int getP1(){
        return provider.gp1; 
    }
}
static class X extends C{
    X(G provider){
        super(provider);
    }
}
static class Y extends C{
    Y(G provider){
        super(provider);
    }
}

请注意,在类中有一个字段并通过getter返回另一个类中的另一个字段是非常不直观和危险的构造

您可能对在类中有一个字段并通过getter返回另一个类中的另一个字段的意义感兴趣?这是非常危险的构造。它可能是一个虚拟字段。问题是X和Y是为特定容器构造的,没有它就不能使用。因此,要创建通用对象,您需要创建更多的类,而这正是我不想要的。@user1759572只有通过接口提供提供程序,它才能是通用的。但你不想用它。没有接口的通用解决方案在这里是不可能的。