2010-11-23 16 views
1

我有一组Individual s的第一:一组学生起初只有一个名字。从他们的第一次考试中,他们将有名字和成绩。如何设计这是一个简单的方法?

class Individual { 
    double characteristics[]; 
    abstract double CalculateValue(); 
    ... 
} 

每个人都有一组特征。这些特性将通过我的媒体库的用户通过继承来实现:

class MyIndividualABC : Individual { 
    public MyIndividualABC() { 
     characteristics = new double[2]; 
     characteristics[0] = 123; 
     characteristics[1] = 456; 
    } 

    public override double CalculateValue() { 
     return characteristics[0]/characteristics[1]; //for example 
    } 
} 

我会再带他们,并给他们每个人的得分(基于其数值)。我会称之为迭代。

class EvaluatedIndividual { 
    double value; 
    double score; //score was calculated based on value 
} 

从迭代2和超越,我将永远具有EvaluatedIndividual类型的手的对象。但第一次,我将不得不用Individual类型的对象来引导。

我不希望有治疗的第一次迭代中比其他的人以不同的方式。我应该如何处理这个问题?

打个比方将有一个班的学生。在第一次考试之前,你只需知道他们的名字,从第一次考试开始,你的名字和他们考试的平均分数都将达到那一刻。

我设计了3点不同的方式来处理这个问题:

  1. 我会对我的程序Start()方法,然后一个Iteration()Start()需要Individual[],而Iteration()需要EvaluatedIndividual[]。哈克,但会创造奇迹。如果没有更好的出现,将使用这个。从Individual

  2. EvaluatedIndividual继承。这看起来干净,但我也不太清楚这件事,因为我想Individual是一个界面,我的想法是让我的图书馆/框架的客户端从它继承并定义了一套方法/字段上Individual如他所愿(Individual可能有多个值,例如计算value时会考虑在内)。如果我遵循这种方法,我不得不让他也实现一个类EvaluatedIndividual

  3. 个别由值,形成了两个evaluationwasEvaluated。起初wasEvaluated是错误的,所以任何收集value的尝试都会抛出异常。我不特别喜欢这个,但我不知道为什么。

你怎么接近这个?这可能是一个很常见的模式,但恐怕我不知道这种情况:(

感谢

+0

你的意思是,在考试之后,“个人”的一个实例变成了“EvaluatedIndividual”?世界真的在变化很快...... – 2010-11-23 07:16:19

回答

0

嘿匹配任何GoF模式,如果这是不是某种课堂练习,不要”牛逼让事情变得过于复杂GoF的模式是不是你知道的一切

+3

这应该是一条评论。 – dbemerlin 2010-11-23 06:55:00

3

我所有的简单;我只希望有一个班在这里。在C#中可能使用Nullable<T>

double? Score {get;set;} 

在Java(这显然缺乏Nullable<T>),也许只是暴露得分与isEvaluated标志(或评价考试次数的计数)一起 - 如果这是false(或0)你只是忽略了分数。

+0

我可能过分简化了OP中的情况。我有一个人将被评估,考虑将通过实施个人界面来定义的功能。有了这个特点,我会建立一个用来评分个人的“价值”。 – 2010-11-23 07:31:52

+0

开始编辑OP。 – 2010-11-23 07:37:05

+0

@devouredelysium - so ...添加每个实现可以实现的接口?不过,我仍然认为只需要一个界面...... – 2010-11-23 07:43:43

2

我将有一个类与score是指个体具有尚未评估一个特殊值:

class Individual { 
    private double value; 
    private double score = -1; // score was calculated based on value, 
           // -1 means not evaluated 

    public boolean isEvaluated() { return score != -1; } 
} 

恕我直言,继承是矫枉过正这里。

0
class Individual { 
    double score; 
    ScoreState scoreState; 
} 

我发现每当我需要一个状态,我需要2个,然后我很快需要2 + N,因此不妨做一个枚举,这使得像“待审核”的情况等这样的考虑因素,这些考虑因素在未来可能会得心应手,并且可以防止出现过多的标志,这可能会造成混淆。

相关问题