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.
Tester for SimpleCalculator kommer snart
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 komme av stakken, og hasOutput returnere true og getOutput skal være resultatet av utregningen inntil noe annen kommer inn. Resultatet skal også inn på toppen av stakken.
Tester for RPNCalculator kommer snart.
Del 3: Hovedprogramklasse
Lag en hovedprogramklasse med init- og run-metoder som spør 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.
Lag en main-metode i hovedprogramklassen som kjører init og run.