2012-01-04 62 views
0


我如何模拟这样的东西?

我有这个机器的问题,这里是一个棘手的部分,让我有点困惑。

这是用例:
学生注册一个部分。
系统验证没有计划冲突。
系统验证学生是否已采取所需的先决条件。

所以我创建了4个对象,分别叫做学生,科室,时间表和主题。 我只会向你展示我的“主题”课,因为这是我迷惑的地方。

在那里我感到困惑的部分是这样的:
系统验证该学生已采取必要的先决条件(S)。

我该如何正确建模? 我得到了一个主语对象的先决条件,但是如果主语没有先决条件呢?我犹豫了,因为我不能只让这样的:

Subject math01 = new Subject(1,"math01",null);

我想传递null对象上是不合适的。我想避免空指针异常。我该如何解决这个问题? :( 我觉得我做错了。

public class Subject { 

    //Each subject is worth three (3) units. 
    private int units = 3; 

    private int subjectID; 
    private String subjectName; 
    private Subject prerequisite; //<----How do I express that a subject has a prerequisite? Am I doing this right? 

    public Subject(int subjectID, String subjectName, Subject prerequisite) { 
     this.subjectID = subjectID; 
     this.subjectName = subjectName; 
     this.prerequisite = prerequisite; 
    } 

    public int getUnits() { 
     return units; 
    } 

    public int getSubjectID() { 
     return subjectID; 
    } 

    public String getSubjectName() { 
     return subjectName; 
    } 

    public Subject getPrerequisite(){ 
     return prerequisite; 
    } 

    public boolean conflictWith(Subject newSubject){ 
     return (this.subjectID == newSubject.getSubjectID()); 
    } 

} 
+2

不是使用'Subject prerequisite',而是使用'Set prerequisites'。如果该集合为空,则该主题不具有任何先决条件。 – Marcelo 2012-01-04 16:37:36

+1

特别是因为受试者(/教育班)可能有多个预先需求。为了获得最佳效果,实现'.equals()'和'.hashcode()'(IDE默认值应该没问题)。 – 2012-01-04 16:42:03

+1

感谢兄弟,这似乎是合理的,因为一个主题可以有多个先决条件。如果先决条件大小为0,则表示它没有任何先决条件。 :D – 2012-01-04 16:46:41

回答

0

考虑增加然后你不必从你的API的客户端传递null

我还想添加一个方便的方法hasPrerequisite()来检查主题确实有一个先决条件,那就是客户你的API的s也不需要自己做空检查。

相关问题