Syftet med denna laboration är att ni ska lära er att använda koncept som arv, gränssnitt, overriding (överskuggning), overloading (överlagring) och dynamisk bindning, samt att komma igång med Javadoc och JUnit.
Se till att noga läsa igenom instruktionerna och att följa de regler och krav som uppgifterna föreskriver. Börja med att kolla igenom hela beskrivningen och se vad som krävs för att få godkänt, samt med att ladda ner de filer som behövs.
I första uppgiften bekantar vi oss med den givna Java-koden, samt skapar ny kod. Därefter bygger varje uppgift på den tidigare lösningen. Koden som skrivs och godkänns i denna labb kommer senare att användas i laboration 2.
Börja med att ladda ner följande Java-filerna och kika lite i det: Volvo240.java
och Saab95.java
. Just nu verkar klasserna ha ganska mycket gemensamt, eftersom båda representerar bilar.
Volvo240
och Saab95
ingår som eliminerar all kod-duplicering och i görligaste mån följer open-closed-principen. Gör dessa ändringar utan att ändra på klassernas funktionalitet.
Se till att alla filer kompilerar och fortsätt till nästa uppgift.
I denna uppgift fortsätter vi bygga på föregående genom att vi nu också implementerar ett interface kallat Movable
.
Movable.java
och ge interfacet följande metoder:
void move();
void turnLeft();
void turnRight();
Movable
, med någon lämplig intern representation av deras riktning och position. Metoden move
ska fungera så att beroende på riktning ökas (eller minskas) bilens x- eller y-koordinat med dess currentSpeed
.
Dokumentation och testning är viktigt när man designar program.
Det finns mycket information om Javadoc på nätet om ni behöver ta fram det. När ni är klara bör ni kunna få ut lämpliga API-dokument för ert program som HTML-filer.
Även JUnit har mycket information på nätet som ni kan leta upp. Tänk på att era tester inte behöver testa “allt”; det viktiga är att ni bekantar er med JUnit och förstår hur det fungerar.
Därför behöver ni INTE skriva kodkontrakt för era metoder. Det räcker med att ni skriver testmetoder som testar metodernas funktionalitet med hjälp av assert/equals osv. Därefter testar ni så att alla JUnit-tester går igenom med “Run with coverage”.
Bilklassernas metoder har för närvarande inget sätt att kontrollera hur mycket farten kan öka eller sänkas. Skriv om metoder (och dokumentation) så att:
gas()
och break()
bara accepterar värden i intervallet [0, 1]
,
currentSpeed
alltid ligger i intervallet [0, enginePower]
,
gas()
inte kan resultera i att farten sänks, och
break()
inte kan resultera i att farten höjs.