Хм, кажется, есть несколько аспектов этого вопроса;Я отвечу на ваш первый и основной вопрос:
Всякий раз, когда я слышу слова «Их будет Х, еще будут добавлены позже», мои мысли сразу же обращаются к шаблону стратегии (GoF, google ...Легко найти некоторый UML для этого), который в первую очередь определяет интерфейс для алгоритма.
В этом случае вы бы реализовали 3 экземпляра этого интерфейса, и не было бы проблемой определить и добавить другойАлгоритм позже - он просто будет использовать тот же интерфейс.
Я представляю метод, который выглядит примерно так: public int markPaper(DataStructure mcq)
, если это вам как-то помогает.
РЕДАКТИРОВАТЬ: Да, и проверить«Единственный выбор для множественного выбора» от Schwartzbach & Frandsen - это на google - Самый лучший способ сделать честную маркировку MCQ, и который я страдал в течение прошлого года;)
EDIT2: Хорошо, чтобы сделать это немного более явным;В вашем основном потоке управления у вас может быть метод markPaper ().Поскольку мы хотим, чтобы это было модульным, мы возьмем всю эту функциональность, переместим ее в класс, реализующий интерфейс для алгоритмов классификации.Вы можете написать следующее:
main(){
...
if (difficulty == 1){
[elaborate easy algorithm here...]
else if(...){
[slightly harder algorithm here...]
и так далее.Вместо этого создайте вспомогательный метод, скажем отметьте, и передайте ему экземпляр этого алгоритма:
private int mark(GradingAlgorithmInterface algorithm, DataStructure paper){
algorithm.markPaper(paper);
}
main(){
...
if(difficulty == 1){
mark(new ConcreteEasyAlgorithm(), paper);
} else if () {...
И так далее.Надеюсь, это поможет.