Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.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
C# 一组学生最初只有一个名字。从第一次考试开始,他们将有名字和分数。如何设计这是一个简单的方法?_C#_Java_Oop_Design Patterns - Fatal编程技术网

C# 一组学生最初只有一个名字。从第一次考试开始,他们将有名字和分数。如何设计这是一个简单的方法?

C# 一组学生最初只有一个名字。从第一次考试开始,他们将有名字和分数。如何设计这是一个简单的方法?,c#,java,oop,design-patterns,C#,Java,Oop,Design Patterns,首先,我有一组个人s: class Individual { double characteristics[]; abstract double CalculateValue(); ... } 每个人都有一套特征。这些特性将由my library的用户通过继承实现: class MyIndividualABC : Individual { public MyIndividualABC() { characteristics = new doubl

首先,我有一组
个人
s:

class Individual {
    double characteristics[];
    abstract double CalculateValue();
    ...
}
每个人都有一套特征。这些特性将由my library的用户通过继承实现:

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
}
从iteration2和更高版本开始,我手头上总是有
EvaluatedIndividual
类型的对象。但第一次,我将不得不以
Individual
类型的对象作为引导

我不想以与其他迭代不同的方式对待第一次迭代。我应该如何处理这个问题

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

我想出了3种不同的方法来处理这个问题:

  • 我将在程序上有一个
    Start()
    方法,然后是一个
    Iteration()
    Start()
    采用
    Individual[]
    ,而
    Iteration()
    采用
    EvaluatedIndividual[]
    。哈奇,但会创造奇迹。如果没有更好的办法,我会用这个

  • EvaluatedIndividual
    继承自
    Individual
    。这看起来很干净,但我不太确定,因为我希望
    Individual
    成为一个接口,我的想法是允许我的库/框架的客户机继承它,并根据需要在
    Individual
    上定义一组方法/字段(例如,
    Individual
    可以有多个值,在计算
    值时需要考虑这些值)。如果我采用这种方法,我必须让他也实现一个来自
    EvaluatedIndividual
    的类

  • 个体是由值和
    求值
    被求值
    构成的。起初,被求值是错误的,所以任何收集
    的尝试都会引发异常。我不特别喜欢这样,但我不确定为什么

  • 你是怎么做到的?这可能是一种非常常见的模式,但我恐怕不知道有哪种GoF模式符合这种情况:(


    谢谢

    嘿,如果这不是一种课堂练习,不要把事情弄得太复杂。GoF模式并不适用于你所知道的一切。

    嘿,如果这不是一种课堂练习,不要把事情弄得太复杂。GoF模式并不适用于你所知道的一切。

    我完全赞成简单;我只在这里上一节课。在C中#可以使用可为空的


    在Java中(显然缺少
    Nullable
    ),如果这是
    false
    (或
    0
    ),可以只显示分数和
    isEvaluated
    标志(或评估的考试数量计数)你只需要忽略分数。

    我完全赞成简单;我这里只有一个类。在C#中,可以使用
    Nullable


    在Java中(显然缺少
    Nullable
    ),如果这是
    false
    (或
    0
    ),可以只显示分数和
    isEvaluated
    标志(或评估的考试数量计数)您只需忽略分数。

    我会让一个类为
    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; }
    }
    

    在这里,IMHO继承是一种过火的行为。

    我会有一个类,它对
    分数有一个特殊的值,表示该个体没有被评估:

    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; }
    }
    
    class Individual {
      double score;
      ScoreState scoreState;
    }
    
    在这里,继承遗产是一种过火的行为

    class Individual {
      double score;
      ScoreState scoreState;
    }
    
    我发现每当我需要一个状态时,我需要2,然后我很快就需要2+n,所以不妨做一个枚举,这允许出现“待审核”等情况和其他类似的考虑因素,这在将来可能会很方便,并且它可以防止标志过多,这可能会造成混乱


    我发现每当我需要一个状态时,我需要2,然后我很快就需要2+n,所以不妨做一个枚举,这允许出现“待审核”之类的情况以及其他类似的考虑因素,这些考虑因素在未来可能会很方便,并且可以防止标志过多,这可能会造成混乱。

    你的意思是,考试后,
    个人
    的一个实例会变成一个
    被评估的个人
    ?世界变化真的很快……你的意思是,
    个人
    的一个实例会变成一个
    Ev考试后,一个学生得了-1分?世界变化真的很快……一个淘气的男孩考试得了0分,他在试卷上画了一只兔子,所以老师多拿了1分。最后他考试得了-1分。也许把-1改成
    double.minvalue
    更好?@vitat:Cent%的一致性。继承在这里并不是一种滥杀,而是c完全没有问题。这不适合这里。@Danny:那个老师应该得到一封终止信,尤其是在绘画/美术考试时。使用这封信会产生if代码。我总是要检查这个人是否被评估过,这是我不觉得有趣的事。@Adeel:我想说的是,有时候我们可能会考试得-1分,这是可能的。一个淘气的男孩考试得0分,他在试卷上画了一只兔子,所以老师多拿了1分。最后他考试得-1分。也许把-1改成
    double.minvalue
    更好?@vitat:Cent%的一致性。继承在这里不是一种过分的做法,但完全没有问题。它不会“不适合这里。@丹尼:那个老师应该得到一封终止信,尤其是在绘画/美术考试时。使用这封信会产生if代码。我总是要检查这个人是否被评估过,这一点我并不觉得有趣。@Adeel:我想说的是,有时我们在考试中可能会得到-1分,这是可能的。”这不是w的真正目的