Nivå och poängvärde: | B 240 |
---|---|
Kort beskrivning: | Vi implementerar från grunden en klass som beskriver bilar, som används i ett simulatorprogram. |
Vad vi lär oss: | Att skriva en klassdefinition helt själv, att använda instansvariabler som hänvisar till andra objekt, att använda sig av samlarvariabler, att implementera metoder som är en aning mer komplicerade än tidigare. |
Frihet i implementationen: | Medel. Programmets allmänna struktur och själva problemet är noggrannt utstakade, men själva lösningen kan och bör man hitta på helt själv. |
Realism: | Tämligen hög. Här försöker man skapa en klass enligt en viss specifikation, som är väldigt typiskt också i arbetslivet. Däremot är CarSim-programmet bara ett "leksaksexempel" som skapats för denna kurs. |
Utmaning: | Hög. För de som programmerat förut är (även) denna uppgift lätt, men för en nybörjare är det synnerligen utmanande att definiera en hel klass för första gången. |
Arbetsmängd: | Hög. Mängden kod som ska skrivas är inte enorm, men nybörjaren bör reservera tid till att fundera, experimentera och koda. De flesta använder 3-5 timmar till detta. |
Bilsimulatorprogrammet CarSim är inte färdigt. Det har gjorts en GUI (grafiskt användargränssnitt) och färdigt står också klassen Location
som beskriver bilars och andra ställens position. Däremot är programmets kärna, d.v.s. klassen Car
som beskriver bilarna, helt ogjord.
Er uppgift är att implementera klassen Car
så att den fungerar enligt den givna Epydoc-dokumentationen.
Lämna in filen car.py
i Goblin.
src.carsim.gui
) producerar till en början felmeddelanden. Det här beror på att programmet försöker anropa sådana metoder i Car
-klassen som ännu inte existerar (t.ex. drive
, fuel
) eftersom ni ännu inte gjort denna uppgift. Man behöver alltså inte oroa sig över dessa felmeddelanden.
Car
-klassen där initieringsmetoden och alla andra metoder har definierats, utan att de gör någonting vettigt. Dessa s.k. dummy-metoder kan skrivas på följande vis:
def drive(self, destination): return False # TODO: komplettera detta senare def fuel(self, amount): return 0 # TODO: komplettera detta senare
Användandet av dessa dummy-metoder är ett vanligt programmeringstrick och kan vara praktiskt i många andra uppgifter.
Location
ska inte ändras.
Car
är mer komplicerad än någon annan klass som hittills har skrivits på kursen. Men ingen fara; varje lång resa börjar med ett steg. Vi rekommenderar följande strategi:
Car
- och Location
-klassernas Epydoc-dokumentation. Car
-klassens beskrivning fungerar som specifikation för det som ska göras i denna uppgift. Notera att klassen Location
har en metod för att räkna ut avståndet mellan två punkter. Detta kommer att komma väl till pass i uppgiften...
Car
och börja skriva den stegvis. Fundera först hurudana instansvariabler det behövs för att hålla reda på bilens egenskaper och status. Åtminstone positionen, tankens storlek, ... vad mer? Skriv in instansvariablerna i koden.
__init__
-metod.
getLocation
-metoden. Den borde endast returnera bilens nuvarande position.
car_sim_GUI
.) Fast bilen ännu inte kan röra sig någonstans (eftersom drive
-metoden inte är implementerad än), kan ni prova att skapa och placera bilar i gränssnittet.
drive
och testa den. Nedan är några extra tips för körningsmetoden.
Location
-objekt. Varje bil behöver alltså en instansvariabel med vilken man kan hänvisa till bilens position. Den här instansvariabeln fungerar som en ihopsättare (gatherer); den får nya värden då bilen kör omkring. Nya värden beräknas alltid på basis av den gamla positionen samt längden och riktningen som bilen rört sig i. När bilens position ändras: räkna först ut den nya positionens koordinater, skapa ett nytt positionsobjekt med dessa koordinater, och placera slutligen detta objekt i instansvariabeln. (drive
-metoden skapar alltså nya positionsobjekt varje gång bilen byter ställe).
Location
-klassens metoder.