Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.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_Inheritance - Fatal编程技术网

Oop 面向对象设计继承

Oop 面向对象设计继承,oop,inheritance,Oop,Inheritance,我有两个类,它们代表一些股票数据。他们身上没有任何行为。这些类有一些公共数据,如ExchangeSymbol、MySymbol和Time。你认为把这些抽象成基类是个好主意吗?。请分享你的想法 class SymbolData { public string ExchangeSymbol { get; set; } public string MySymbol { get; set; } public double Price { get; set; } publi

我有两个类,它们代表一些股票数据。他们身上没有任何行为。这些类有一些公共数据,如ExchangeSymbol、MySymbol和Time。你认为把这些抽象成基类是个好主意吗?。请分享你的想法

class SymbolData
{
    public string ExchangeSymbol { get; set; }
    public string MySymbol { get; set; }
    public double Price { get; set; }
    public int Volume { get; set; }
    public string Time { get; set; }
}

class EquityQuoteData 
{
    public string ExchangeSymbol { get; set; }
    public string MySymbol { get; set; }
    public double AskPrice { get; set; }
    public double BidPrice { get; set; }
    public int AskVolumne { get; set; }
    public int BidVolumne { get; set; }
    public string Time { get; set; }
}
我不会无缘无故地创建第三个(基本)类

您可以使
EquityQuoteData
继承自
SymbolData
,因为它们共享大多数属性,尽管前者有
AskPrice
BidPrice
代替了
Price
,后者不在子类中使用

考虑实现一个公共接口:

interface IData
{
    string ExchangeSymbol { get; set; }
    string MySymbol { get; set; }
    string Time { get; set; }
}
然后:

class SymbolData : IData
{
    public double Price { get; set; }
    public int Volume { get; set; }

    public string IData.ExchangeSymbol
    {
        get; set;
    }

    public string IData.MySymbol
    {
        get; set;
    }

    public string IData.Time
    {
        get; set;
    }
}

class EquityQuoteData : IData
{
    public double AskPrice { get; set; }
    public double BidPrice { get; set; }
    public int AskVolumne { get; set; }
    public int BidVolumne { get; set; }

    public string IData.ExchangeSymbol
    {
        get; set;
    }

    public string IData.MySymbol
    {
        get; set;            
    }

    public string IData.Time
    {
        get; set;
    }
}
无论如何,如果必须这样做:

public double AskPrice { get; set; }
public double BidPrice { get; set; }
public int AskVolumne { get; set; }
public int BidVolumne { get; set; }
这也是一种代码味道,所有这些前缀


< P> >我想考虑在一个类中,不管它的名字是什么,把代码< >价格> />代码> VuluMe</代码>(?),然后给出你的<代码>等式QuoTeDATAs>代码>类两个属性-<代码> ASK < /代码>和<代码>投标> /代码>两种相同的类型。code>SymbolData只有一个。

如果ExchangeSymbol、MySymbol和Time有某种关联,请将它们分组到一个可重用类中,并使其成为SymbolData和EquityQuoteData的成员(支持组合而不是继承)如果不是:不要


请记住:继承/多态性主要与行为有关,而与数据无关。值对象中的继承可能会产生不必要的副作用-例如,equals在这里不起作用。

看待继承的一种方法是考虑
具有-a
是-a
关系

如果您有一些基类(数据对两个名称都是公共的)
Data
,那么您必须确保语句“
EquityQuoteData
是(类型的)
Data
”和“
SymbolData
是(类型的)
Data

思考这个问题的另一个简便方法是问:您是否可以用任何派生类型替换scentance中
数据的所有实例,并且仍然使scentance有意义

例如:

我今天有很多数据要处理

我今天有很多
EquityQuoteData
项目要处理

在您的情况下,我需要更多地了解每个类的角色,但我可能会说,是的,您应该抽象出相关类的共同特征

另一方面,这基本上是一个结构,而不是一个类。我将研究封装和其他OO设计原则(GoogleSolid)