Как мне моделировать что-то подобное? - PullRequest
0 голосов
/ 04 января 2012


У меня проблема с машиной, и вот одна из тех хитрых частей, которая меня немного смущает.

Вот пример использования:
Студент записывается в секцию.
Система проверяет отсутствие графиков конфликтов.
Система проверяет, что учащийся выполнил необходимые предварительные условия.

Итак, я создал 4 объекта: «Студент», «Раздел», «Расписание» и «Тема». Я покажу вам только свой «предметный» класс, потому что именно здесь я запутался.

Часть, в которой я запутался, такова:
Система проверяет, что учащийся выполнил необходимые предварительные условия.

Как мне правильно смоделировать это? У меня есть предварительное условие, которое является предметом объекта, но что, если у субъекта нет предусловия? Я сомневаюсь, потому что я не могу просто сделать что-то вроде:

Subject math01 = new Subject(1,"math01",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 ]

0 голосов
/ 04 января 2012

Рассмотрите возможность добавления второго конструктора, который не требует предварительных условий. Тогда вам не нужно передавать значение null от клиента вашего API.

Я бы также добавил вспомогательный метод hasPrerequisite () для проверки, есть ли у субъекта предварительное условие. Таким образом, клиенты вашего API также не должны сами выполнять проверку на ноль.

0 голосов
/ 04 января 2012

Использовать Шаблон нулевого объекта .Я рекомендую вам использовать библиотеку Guava , чтобы вы могли использовать Необязательный класс. Вот учебник , объясняющий его использование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...