Oop 简单的设计问题:父母、孩子;老师,学生

Oop 简单的设计问题:父母、孩子;老师,学生,oop,class-design,Oop,Class Design,这个问题很简单,但我想看看专家们是怎么看的 这只是为了理解OOP而虚构的软件。 我有一个学校管理软件。所以我有课 学生 教室 老师 现在我指定一名教师作为特定教室的班主任。因此 教室包含 Teacher classTeacher; Student[] students; 现在完整的程序已经编写好了,一切都很好 问题: 现在,如果校长提出一个新的规则,即不应该存在一个老师是家长的学生,该怎么办。 现在,我们需要在代码中引入更多参数和大量更改,以满足一个小需求。 设计应该如何才能使未来的需

这个问题很简单,但我想看看专家们是怎么看的

这只是为了理解OOP而虚构的软件。 我有一个学校管理软件。所以我有课

  • 学生
  • 教室
  • 老师
现在我指定一名教师作为特定教室的班主任。因此 教室包含

Teacher classTeacher; 
Student[] students; 
现在完整的程序已经编写好了,一切都很好

问题: 现在,如果校长提出一个新的规则,即不应该存在一个老师是家长的学生,该怎么办。 现在,我们需要在代码中引入更多参数和大量更改,以满足一个小需求。
设计应该如何才能使未来的需求变更(不可避免地会发生)只需要对代码进行微小的更改?

这不应该是一个大的代码变更,而应该是一个验证变更

Psuedo代码:

Class ClassRoom {
    List<Student> students
    Teacher teacher

    ClassRoom(Teacher _teacher, List<Student> students) {
        teacher = _teacher;
        SetStudents(students);
    }

    void SetStudents(List<Student> _students) {
         foreach (Student s in _students) {
             if (validate(s)) {
                 students.add(s);
             } else {
                 // error handling logic
             }
         }
    }

    void validate(Student student) {
        if (student.parent == teacher) {
            return false;
        }
        return true;
    }
}

class Student : Person {
    Person parent
}

class Teacher : Person { }
课堂{
列出学生名单
教师
教室(教师,列出学生){
教师=_教师;
学生(学生);
}
无效学生(列出学生){
foreach(学生中的学生){
如果(验证){
学生。添加(s);
}否则{
//错误处理逻辑
}
}
}
无效验证(学生){
if(student.parent==教师){
返回false;
}
返回true;
}
}
班级学生:人{
人父母
}
班主任{}

当然,你必须进入数据库和代码库,向所有学生添加“家长”属性。但这也不应该太难。

这不是一个“小”要求。您的代码不是为了跟踪学生的家长或教师的孩子而设计的。您必须添加跟踪和存储该信息的属性,才能使其正常工作,这需要对代码进行大量更改。不要在问题存在之前就解决问题。每个
教室属性前面的
字符串
有什么用?好的。我从零开始重新阅读java,并对此产生了怀疑。这只是一个疯狂的想法。谢天谢地,这是十年来的错误。很抱歉最后一句话让人觉得您根本不想做任何更改(因此不能满足需求)——更好的表述问题的方法可能是“设计应该如何才能使未来的需求更改(不可避免地会发生)只需要代码中的微小更改?”。这个问题没有单一的答案,因为你不知道未来会带来哪些需求,但有许多设计原则可能会有所帮助,例如。Looks awesome!:)但是我不明白比较的步骤。什么类型的学生。家长。。。。它不可能是一根弦,老师也不可能是一根弦。因此,逻辑涉及比较两个不同类型的对象。所以我们需要有一个普遍唯一的属性。。。比如公民身份或类似的东西,以确定父对象和教师对象是相同的。我喜欢你的回答@Skeptor我已经为教师和学生添加了类定义
parent
只是
Student
中的一个公共字段。在本例中,我将添加一个
Person
基类,以便您可以将教师与家长进行比较。