1 Dojo 3 - Abstrakta datatyper
1.1 Förberedelser
Läs på extra i LP-boken om sammansatta datastrukturer, funktioner och hur man importerar egna moduler. Läs även om ADT i PL-boken 11.1-11.3.
Fundera över och hitta en egen lösning på nedanstående problem (åtminstone på skiss/principiell nivå).
1.2 Uppgift
I den mån följande beskrivning saknar information är det upp till dojon att gemensamt hitta bra lösningar.
Dojon fokuserar på att modellera två saker som existerar i den verkliga världen men som det inte finns inbyggt stöd för i Python:
- Spelkort (Ess, Kung, Dam, etc.)
- En kortlek av sådana spelkort.
När vi skapar denna ADT ska speciellt fokus ges till att få rätt abstraktion. Att skilja implmentationen av ADT från användandet av gränssnittet, och försäkra oss om att användandet av ADT'n inte bryter mot gränssnittet. Vi behöver alltså ha på oss två olika hattar när vi programmerar ADT-programmerar-hatten och Användar-programmerar-hatten. Vi tänker alltså på att:
- Skriva pseudokod före konkret kod
- Skapar funktioner för olika delar av källkoden så att varje funktion har enbart ett väl avgränsat syfte. Vi skapar nya funktioner främst av läsbarhetsskäl – för att få rätt abstraktionsnivå i källkoden. Pseudokoden ger ofta ledtrådar till lämpliga funktioner.
- ADTns primitiver ska stödja huvudprogrammets behov, men kan även implementera andra bra funktioner (som troligen är användbara för eller senare).
- Gruppen kan själva välja vilken ordning den arbetar i – antingen genom att göra ADTn först eller huvudprogrammet, eller bägge parallellt.
Vi behöver implementera följande:
- Designa en ADT för spelkort och en kortlek. Detta kan vara en ADT i en modul, två ADTer i en modul, eller två ADTer i två moduler. Se laboration 4 för efterfrågad funktionalitet för en kortlek. Inom ramen för dojon rekommenderar vi att ni gör ett mindre exempel. Välj alltså ett par lämpliga funktioneor att börja med (exempelvis: konstruktor och en selektor) och minimera boilerplate som krävs, kanske kan börja med en kortlek med 2 kort istället för 26 eller 52.
- Huvudprogrammet (programmet som använder vår(a) ADT(er)) ska skrivas så att det tydligt demonsterar att alla funktionerna fungerar som förväntat.
Exempel anrop till adt (där konstruktorn skapar en kortlek med två kort):
import deck my_deck = deck.create() display(my_deck) >>> Ace of Spades, King of Hearts
Om tid finns kvar och ni är klara med ovanstående. Fundera själva ut en lämplig utvidgning eller omdesign av ert program.