Taso ja pistearvo: | C 50 |
---|---|
Lyhyesti: | Yhdistetään projektit EnglishAuction ja DutchAuction. |
Mitä opitaan: | turhan toiston poistoa perintää käyttäen, ohjelman uudelleenrakentamista |
Toteuttamisen vapaus: | Vähäinen. Tässä ei varsinaisesti luoda uutta koodia vaan yhdistetään kaksi vanhaa tietyllä tavalla. |
Realistisuus: | Työtavan osalta korkea. Vanhan koodin muokkaus ja uudelleen rakentaminen ovat tärkeä keino ohjelmakoodin ylläpitämis- ja kehitystyössä. |
Haastavuus: | Keskitasoa. Tehtävän tekeminen edellyttää perinnän ymmärtämistä. |
Työläys: | Kevyehkö. Sujunee useimmilta parissa tunnissa, jos aiempi EnglishAuction-tehtävä on tehty. Muussa tapauksessa siihen perehtymiseen kuluu lisää aikaa. |
Edellisessä tehtävässä oli esillä luokka EnglishAuction
. Projekteista löytyy DutchAuction
ja vastaava luokka. Kumpikin näistä luokista kuvaa huutokauppoja ja luokilla on paljon yhteistä, vaikka ne myös eroavat merkittävästi toisistaan. DutchAuction-projektissa on myös luokka AuctionHouse
, joka kuvaa huutokauppoja järjestäviä huutokauppakamareita. Siitä puuttuu kuitenkin sisältö.
Oletetaan, että olet jo tehnyt edellisen EnglishAuction -tehtävän ja
sinulla on nyt kaksi luokkaa, EnglishAuction
ja DutchAuction
. On ilmeistä,
että luokkien koodissa on paljon toistoa. Huutokauppojen kuvauksia
kuvaava ilmentymämuuttuja on samanlainen molemmissa luokissa, get_starting_price
-metodi
on samanlainen, ja niin edelleen. Tästä turhasta toistosta on tarkoitus päästä eroon käyttäen perintää.
AuctionHouse
, johon yhdistetään kaksi muuta projektia DutchAuction ja EnglishAuction. Kaikki pakettiin auction.
Auction
) joka on yleinen (mutta epätäydellinen)
toteutus erilaisille huutokauppakohteille. Tämä yliluokka toimii
"toteutuksen tukirankana". Siinä on joitakin toteutettuja metodeja, mutta se ei toteuta kaikkia Dutch/EnglishAuction
-luokkien metodeja, vaan ainoastaan ne, jotka ovat yleisesti toteutettavissa kaikille
huutokauppatyypeille (täsmälleen toistensa kopioita).
DutchAuction
ja EnglishAuction
aliluokiksi. Nämä erilaisia huutokauppatyyppejä kuvaavat aliluokat voivat
sitten lisätä tähän rankaan "lihaa luiden päälle" ja toteuttaa sellaiset metodit,
joiden toteutustapa riippuu huutokaupan tyypistä.
bid
ja buy
).
Yritä siirtää mahdollisimman suuri osa toteutuksesta yliluokkaan. Esimerkiksi metodi matches_keyword on toteutettuna vain DutchAuction -luokassa mutta se toimii yhtä lailla englantilaistyylisessäkin huutokaupassa. Siirrä sekin yliluokkaan.
Muista, että EnglishAuction tarvitsee moduulia bid.
Tavoitteet on kuvattu tarkemmin annetussa dokumentaatiossa.
Testaa koodisi.
Palauttakaa laatimanne koodi Gobliniin.