Требование: разработать класс с названием аллергия, который предоставляет информацию об аллергии пациента. например, кто сообщил об аллергии (пациент/врач/родственник), различные симптомы обнаруженной аллергии, степень тяжести, метод, который возвращается, когда была выявлена аллергическая реакция у этого пациента.
Я думаю о чем-то подобном:
public abstract class Allergy{
private String reporter;
private String symptoms;
private int timeReported;
private int severity;
//Higher the number, higher the severity
public Allergy(String reporter, String symptoms, int timeReported, int severity){
this.reporter=reporter;
this.symptoms=symptoms;
this.timeReported=timeReported;
this.severity=severity;
}
public void setReporter(String reporter){
this.reporter=reporter;
}
public void setSymptoms(String symptoms){
this.symptoms=symptoms;
}
public void setSeverity(int severity){
this.severity=severity;
}
public void setTimeReported(int timeReported){
this.timeReported=timeReported;
}
public String getReporter(){
return reporter;
}
public String getSymptoms(){
return symptoms;
}
public int getSeverity(){
return severity;
}
public int getTimeReported(){
return timeReported;
}
}
Это хороший дизайн класса? Есть ли способ улучшить дизайн? Или кто-то имеет лучшую реализацию?
Я должен уметь объяснять так много концепций ООП. Могу ли я использовать любую концепцию ООП здесь, кроме абстрактных, инкапсуляции и наследования, которые я смогу использовать, имея в виду текущий дизайн?
как об использовании перечисления для серьезности (низкий, высокий, средний) и использования перечисления для репортера (пациента, врача, члена семьи, другого) и использования HashSet для симптомов.
Лучший способ получить Pojo от аллергии и пациента. У пациента есть аллергия. Однако; пациент может иметь аллергию, тогда вы можете добавить структуру данных, такую как arrayList аллергии.
Помимо синтаксических ошибок, упомянутых в комментарии, и предполагая, что вы не должны использовать наследование, наиболее понятной вами концепцией является интерфейс. Итак, что вы могли бы включать в себя интерфейс Disease (называемый IDisease) и позволить классу Allergy реализовать его, т.е.
public interface IDisease{
void setReporter(String reporter);
//other methods
}
}
public class Allergy implements IDisease{
public Allergy(String reporter, String symptoms, int timeReported, int severity){
this.reporter=reporter;
this.symptoms=symptoms;
this.timeReported=timeReported;
this.severity=severity;
}
public void setReporter(String reporter){
this.reporter=reporter;
}
public void setSymptoms(String symptoms){
this.symptoms=symptoms;
}
public void setSeverity(int severity){
this.severity=severity;
}
public void setTimeReported(int timeReported){
this.timeReported=timeReported;
}
public String getReporter(){
return reporter;
}
public String getSymptoms(){
return symptoms;
}
public int getSeverity(){
return severity;
}
public int getTimeReported(){
return timeReported;
}
}
Использование интерфейса здесь может быть оправдано, если позже вы хотели бы написать алгоритм для анализа всех различных видов заболеваний (включая аллергии) и хотели бы, чтобы алгоритм был отделен от фактических данных о конкретном заболевании.
p
дляpublic
. И, возможно,timeReported
может бытьDate
(если это Java 7 или ниже) илиInstant
(если это Java 8) вместоint
.