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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/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_Design Patterns - Fatal编程技术网

Oop 如何在面向对象的范例中建模相似但不精确的数据?

Oop 如何在面向对象的范例中建模相似但不精确的数据?,oop,design-patterns,Oop,Design Patterns,我有一个接口和两个数据源,用于填充实现该接口的对象的具体实例。该接口公开了两个实例中只有一个能够以有意义的方式满足的方法 public interface IFoo { public int getValueA(); public int getValueB(); } public FooFromFile implements IFoo { int a; int b; ... public int getValueA() { re

我有一个接口和两个数据源,用于填充实现该接口的对象的具体实例。该接口公开了两个实例中只有一个能够以有意义的方式满足的方法

public interface IFoo {
    public int getValueA();
    public int getValueB();
}

public FooFromFile implements IFoo {
    int a;
    int b;
    ...
    public int getValueA() {
        return a;
    }
    public int getValueB() {
        return b;
    }
}

public FooFromNetwork implements IFoo {
    int a;
    ...
    public int getValueA() {
        return a;
    }
    public int getValueB() {
        return 0; // return 0 because FooFromNetwork never gets value b.
    }
}

我研究过的每一个代码库都有这样的代码,我发现它通常源于对应用“is-a”关系的渴望,在这种关系中,其他的东西可能更合适。我有一些时间重构我目前工作的代码基础。对于这种情况,有什么好的建模解决方案?实际的代码要比这复杂得多,但是在这里解决玩具问题,使用一个健壮的可伸缩模式,将有很大的帮助。

这里描述的问题“是一个”(双关语)违反了规则。有很多解决LSP违规的方法,但没有一种方法是一刀切的。例如,根据上下文,您可能会选择支持或应用。

玩具问题的问题在于,类之间的行为没有差异。因此,应该将它们合并到一个类中,并使用它来完成。在OO解决方案变得合理之前,问题需要更加复杂。。。OO解决方案几乎总是围绕类的setter而不是getter展开。如果你想找到一个好的面向对象解决方案,你必须关注
a
b
是如何设置的,以及这两个类之间的设置是如何不同的…@DanielT。您是否可以链接到支持OOP围绕setter的文章或文档?我以前从来没有听说过。看看任何一本书,它讨论OO理论,比如Booch的“面向对象的分析和设计”,甚至GoF的“设计模式”。他们实际上并没有做出断言(断言是我的),但如果你研究理论和示例,你会发现人们非常关注不返回数据的方法。相反,这些方法通常是通过改变对象状态来实现的。我很想就此进行讨论,但堆栈交换不是进行此类讨论的好论坛。。。如果你知道我们可以讨论的地方,我很乐意详细讨论。我的电子邮件地址是gmail的danielt1263。