package gradebook;
import items.*;
import people.*;

/**
 * A RawScore represents the raw score given to a student for a particular
 * assignment.
 */
public abstract class RawScore {
   /**
    * The student to whom the score belongs.
    */
   Student student;

   /**
    * The assignment for which the student got the raw score.
    */
   Assignment assignment;

   /**
    * The actual raw score for the gradable item.
    */
   public double score;

   /**
    * Gets the student associated with this score.
    * @return Student.
    *                                                             <pre>
    post:
      //
      // The returned student must be this raw score's student.
      //
      return.equals(this.student);
    */
   Student getStudent() {
       Student return_ = null;
       return_.equals(this.student);
       return null;
   }
    /* SPEST PROBLEM:
	It looks like return.equals in the postcond should be OK, but checker
	gives these errors:

   Invalid invocation: equals(antlr.TestGenerator$arguments_return@21dbe291) at line: 33  at character: 13
   Invalid invocation: equals(antlr.TestGenerator$arguments_return@6051448e) at line: 57  at character: 13

     */

   /**
    * Gets the gradable item associated with this score.
    * @return assignment
    *                                                             <pre>
    post:
      //
      // The returned assignment must be this raw score's assignment.
      //
      return.equals(this.assignment);
   	*/
   public abstract Assignment getAssignment();

   /**
    * Gets the raw numerical score.
    * @return raw numerical score.
    *                                                             <pre>
    post:
      //
      // The returned score must be equal to this raw score's score.
      //
      return == this.score;
    */
   abstract double getScore();

   /**
    * Sets the raw numerical score.
    * @param score new numerical score.
    *                                                             <pre>
    post:
      //
      // This raw score's score must equal the parameter.
      //
      this.score' == score;
    */
   abstract void setScore(double score);
}