Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Denne oppgaven inneholder elementer fra kalkulator-oppgavene under Tilstand og oppførsel. Formålet med oppgaven er å bli kjent med arv i objektorientert programmering. Du skal implementere en superklasse for kalkulatorer og underklasser for en vanlig kalkulator og en RPN-kalkulator - og flere hvis du vil - f.eks en PN-kalkulator (polish notation). Superklassen brukes av et kalkulatorprogram. Når kalkulatorprogrammer starter, skal det spørre brukeren om hvilken type kalkulator som skal brukes. Oppgaven er skrever med tanke på å ikke innføre unødvendig kompleksitet. Du trenger ikke å følge oppgaven til punkt og prikke hvis du mener noe kan gjøres på en bedre måte.

Del 1: Calculator-klassen

Implementer en abstrakt klasse Calculator med metodene:

...

På den måten sier du at objekter av MyAbstractClass har en myAbstractMethod, uten å ha bestemt hva den egentlig gjør. takeInputNumber, takeInputOperator, hasOutput og getOutput skal altså ikke defineres i superklassen Calculator.

Del 2: Underklasser

Underklassene SimpleCalculator og RPNCalculator skal arve fra Calculator. De skal ikke være abstrakte, så de er nødt til å implementere de abstrakte metodene i Calculator-klassen. De bestemmer hva som skjer når det kommer inn et tall eller en operator:

SimpleCalculator:

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 intil 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.

RPNCalculator:

Når det kommer inn et tall, skal det gå på stacken.
Når det kommer inn en operator, skal operandene 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.

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 underklasse kan også brukes som overklassen. Et felt av type Calculator kan være både en SimpleCalculator og en RPNCalculator. main-metoden skal kjøre init, så run.