title: How can I design a class named allergy?
body: <p>requirement: design a class named allergy that provides information about the allergy of a patient. e.g. who reported the allergy(patient/doctor/relative), different symptoms of the allergy that are detected, severity, method that returns when was that allergy detected in that patient.</p>
  
  <p>I am thinking of something like this: </p>
  
  <pre><code>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;
      }
  }
  </code></pre>
  
  <p>Is this a good design of the class? Is there any way I can improve the design? Or does someone have a better implementation? </p>
  
  <p>I have to be able to explain as many OOP concepts. Can I make use of any other OOP concept here apart from abstract, encapsulation and inheritance that I will be able to use having the current design in my mind? </p>