J'ai un problème de conception:Le champ doit être secret mais la sous-classe doit remplacer la méthode utilisant ce champ?
- classe Question: une question et la réponse (String)
- classe TextQuestion: question normale texte et répondre
- classe NumberQuestion: question (String), réponse (nombre - int, float ...), et vérifier la réponse en utilisant une valeur epsilon
Mais j'ai un problème avec NumberQuestion. Je dois prendre la bonne réponse, la convertir en nombre, et la comparer à la réponse de l'utilisateur. Alors, comment puis-je obtenir la réponse? L'utilisation de la méthode getter n'est pas sécurisée. Ou mon design n'est pas bon? Comment puis-je changer?
public abstract class Question { private String question; private String answer; public Question(String question, String answer) { this.question = question; this.answer = answer; } public boolean checkAnswer(String yourAnswer) { // default implementation } } class TextQuestion extends Question { // Answer and Question is always string type, it's OK, not problem } class NumberQuestion extends Question { // Question is String, OK // Answer: input is number, accept approximately // Ex: Question: 1/3 = ? // Answer: 0.3 or 0.33 or 0.333 are accepted (using an Epsilon value) // so must override checkAnswer public boolean checkAnswer(String yourAnswer) { // HOW can I do? } }
Que signifient par « pas sûr »? Quel genre de risque essayez-vous d'éviter? –
@TedHopp: cela signifie que toutes les classes (sauf ses sous-classes) peuvent obtenir la réponse. –