Exercise-panelet

Bruk av Exercise-panelet er obligatorisk for denne øvingen. Du må ha panelet åpent med CalculatorInheritance.ex-filen (tests > inheritance > CalculatorInheritance.ex) i før du begynner med oppgaven. For mer informasjon/hjelp, se nederst på forrige side, altså hovedsiden for Øving 9.

 

Oppgaven handler om å lage en enkel kalkulator og en RPN-kalkulator som arver fra den.

Denne oppgaven inneholder elementer fra oppgavene Calculator og RPN-kalkulator under Tilstand og oppførsel. Formålet med oppgaven er å bli kjent med mekanismen for arv. Du skal implementere en SimpleCalculator som fungerer som en vanlig enkel kalkulator. Denne skal også brukes som en superklasse for en RPN-kalkulator. Når kalkulatorprogrammer starter, skal det spørre brukeren om hvilken type kalkulator som skal brukes.

Del 1: SimpleCalculator-klassen

Implementer en klasse SimpleCalculator med metodene:

  • protected void setLeftOperand(double operand): skal sette venstre operand
  • protected void setRightOperand(double operand): skal sette høyre operand
  • protected void setOperator(char operator): skal sette operatoren til en av '+', '-', '*', '/'
  • protected double getResult(): skal returnere resultatet av utregningen
  • public void takeInputNumber(double number): brukes til å ta inn et tall skrevet inn
  • public void takeInputOperator(char operator): brukes til å ta inn en operator skrevet inn

  • public boolean hasOutput(): returnerer om det er på tide å lese av et svar

  • public double getOutput(): returnerer svaret

SimpleCalculator skal fungere slik:

Når det kommer inn et tall, og det forrige som kom inn ikke var en operator, skal tallet tas til å være venstre operand.
Når det kommer inn et tall, og der forrige som kom inn var en operator, skal tallet tas til å være høyre operand, og inntil noe annet kommer kommer inn, skal hasOutput returnere true og getOutput skal være resultatet av utregningen. Resultatet skal også tas til å være venstre operand til neste gang.
Når det kommer inn en operator, skal det selfølgelig tas til å være operatoren skal skal brukes i utregningen.

Testkode for SimpleCalculator finner du her: inheritance/SimpleCalculatorTest.java. Originalkoden (jextest) for testen finner du her: inheritance/SimpleCalculator.jextest.

Del 2: Subklasser

Lag en subklasse RPNCalculator. Denne skal arve fra SimpleCalculator, og skal redefinere takeInputNumber, takeInputOperator, hasOutput og getOutput. Her skal du gjenbruke resten av metodene fra SimpleCalculator.

RPNCalculator skal fungere slik:

Når det kommer inn et tall, skal det gå på stacken.
Når det kommer inn en operator, skal de første to tallene komme av stakken og bli regnet sammen, hasOutput returnere true og getOutput skal være resultatet av utregningen inntil noe annet kommer inn. Resultatet skal også inn på toppen av stakken.

Testkode for RPNCalculator finner du her: inheritance/RPNCalculatorTest.java. Originalkoden (jextest) for testen finner du her: inheritance/RPNCalculator.jextest.

Del 3: Main-metode eller hovedprogramklasse

Lag en main-metode eller en hovedprogramklasse kalt CalculatorProgram. Her skal du spørre brukeren om hvilken type kalkulator som skal brukes og kjører denne med input og output. Husk at en subklasse kan også brukes som superklassen. Et felt av type SimpleCalculator kan være både en SimpleCalculator og en RPNCalculator. Bruk dette ved å f.eks. sette SimpleCalculator calc = new SimpleCalculator(); eller SimpleCalculator calc = new RPNCalculator(); avhenging av hvilket valg brukeren tar.

Exercise-panelet

Bruk av Exercise-panelet er obligatorisk for denne øvingen. Du må ha panelet åpent med CalculatorInheritance.ex-filen (tests > objectstructures CalculatorInheritance.ex) i før du begynner med oppgaven. For mer informasjon/hjelp, se nederst på forrige side, altså hovedsiden for Øving 9.