Nivå och poängvärde: | C 50 |
---|---|
Kort beskrivning: | Vi kombinerar projekten EnglishAuction och DutchAuction. |
Vad vi lär oss: | Att eliminera onödig kod med hjälp av arv, omstrukturering av ett program. |
Frihet i implementationen: | Liten. Här skapar man inte egentligen ny kod, utan kombinerar delar av existerande kod. |
Realism: | Hög. Att redigera gammal kod och att bygga om på nytt är vanligt. |
Utmaning: | Medel. Man måste förstå arv-konceptet för att klara av uppgiften. |
Arbetsmängd: | Tämligen lätt. Borde gå på ett par timmar om den tidigare EnglishAuction-uppgiften är gjord. I annat fall tar det lite längre tid att sätta sig in i hur auktionerna fungerar. |
I uppgift 8.1 var klassen EnglishAuction
aktuell. Bland projekten finns också ett liknande projekt DutchAuction
, som innehåller en klass med samma namn. Båda klasserna beskriver auktioner, och har därför mycket gemensamt. De har dock även märkbara skillnader, eftersom det är två olika sätt att bedriva auktioner. I DutchAuction-projektet finns också klassen AuctionHouse
, som beskriver auktionshus som ordnar "holländska" auktioner.
Vi antar att du redan har gjort EnglishAuction-uppgiften och du har nu två klasser, EnglishAuction
och DutchAuction
. Det är uppenbart att det är mycket kod som "dubbleras" i de två klasserna. T.ex. är instansvariabeln som beskriver auktionen och metoden get_price_ratio
samma, osv. Det är nu meningen att bli av med dessa upprepningar med hjälp av arv.
Det är också praktiskt att ändra klassen AuctionHouse
så att den blir mera allmän, så att man kan använda andra sorts auktioner i den än de holländska. Uppgiften lyder alltså:
AuctionHouse
, dit vi kombinerar de två andra projekten EnglishAuction och DutchAuction.
Auction
som är en allmän (men inte fullständig) implementation för olika typers auktioner. Den här superklassen fungerar som ryggrad för att implementera specifika auktionstyper. Den innehåller några implementerade metoder, men den implementerar inte alla metoder från Dutch/EnglishAuction
. Den har bara de metoder som går att generalisera till alla auktionstyper (dvs. sådana metoder som skulle se exakt likadana ut för alla auktionstyper).
DutchAuction
och EnglishAuction
som subklasser till Auction
. De här subklasserna beskriver nu specifika typer av auktioner och kan lägga mera "kött på benen" med att definiera de metoder som är unika för den auktionstypen.
bid
och buy
). Försök ändå flytta så mycket som möjligt upp i superklassen.
Kom ihåg att EnglishAuction
behöver modulen bid.
Målen är mera specifikt beskrivna i dokumentationen.
Testa din kod.
Lämna in er kod i Goblin.