假如我要用面向对象的角度去考虑做一个问卷发布系统 问卷分两种: 
一个是调查问卷,用户选择完提交,不会得到任何反馈.比如:”您对当前站点的风格是否满意”.用户选择一个答案提交. 一种是测试问卷,用户做完会根据选择答案的总分段得到一个结果反馈回来.比如:”测试你是否是一个受人欢迎的角色?”有几道题,用户选择得到一个总分,根据分值得到一个结果. 现在我考虑应该大概有几个对象:问卷(抽象类),调查问卷(继承于问卷),测试问卷(继承于问卷),选项(对象集合),测试结果(测试问卷的反馈) 选项和测试结果与问卷是组合关系,然后创建问卷的时候就用抽象代替实例. 现在我有个问题,关键在于问卷的测试结果这个属性,子类和父类应该是is的关系是吧,那么父类是否应该拥有子类的全部属性呢?问卷抽象类是否应该包含这个测试结果属性呢?如果包含的话调查问卷没有结果怎么办?不包含又怎么用抽象类的引用来代替测试问卷的引用呢?不包含就引不到这个属性了. 这个问题应该怎么去做抽象呢?小弟水平比较菜,对面向对象不甚了解,请各位老大指点迷津,谢谢了!

解决方案 »

  1.   

    问题
    class Question
    {
      string topic;
      List<string> choices; //只能单选还是可以多选?  bool multipleAnswer;
    }问卷
    class Quiz
    {
      List<Question> q;
    }问题答复
    class Answer
    {
      Question q;
      List<int> answers;
    }用户问卷答复
    class QuizAnswer
    {
      Quiz q;
      List<Answer> a;
    }测试结果
    class QuizResult
    {
      //......
    }测试处理
    interface IQuizManager
    {
      Quiz GetQuiz();
      QuizResult Process(QuizAnswer qa); //如果是问卷就返回null, 或者使用Null Object模式?
    }
      

  2.   

    可以设计一个父类的虚方法,返回测试结果类型,返回null
    在测试问卷中写具体实现,调查问卷中不重写