ADT
Abstrakta Datatyper (ADT)
Hittills har ni bara arbetat med väldigt vanligt förekommande datatyper som strängar och tal men det är inte alltid tal och strängar räcker för att beskriva ett problem på ett bra sätt. Abstrakta datatyper (ADT) är ett sätt att beskriva sådana problem som annars inte kan beskrivas med de datatyper som redan finns i språket. Ett spelkort har till exempel två attribut som krävs för att representera kortet (färg/suit och valör/value). När man hanterar ett sådant spelkort kan man låta en sammansatt datatyp såsom lista, dictionary eller en tupel representera kortet. Utan funktioner som tydligt förmedlar att man hanterar ett spelkort och inte vilken lista eller tupel som helst kan det dock bli svårt att komma ihåg hur man representerade kort när man står i begrepp att skapa nya och för andra kan det bli svårt att läsa ens program. Därför är det viktigt att skapa en uppsättning funktioner som låter en manipulera och visa spelkort.
Vanligen definierar man en abstrakt datatyp genom funktioner för att skapa, modifiera, extrahera data ur och visa datatypen. Finns dessa fyra funktioner är det möjligt att arbeta med er datatyp och utöka den allt eftersom ert program kräver det. Det är också bra att ha funktioner som kan verifiera att datan i er nya datatyp är korrekt, men det är inget krav för att kunna arbeta med datatypen. Som övning inför den här laborationen ska ni skapa två datatyper: spelkort (card) och kortlek (deck). Nedan anges körexempel på hur datatyperna hanteras.
Körexempel:
>>> python3 -i lab3.py
>>> three_of_spades = create_card(3, 2)
>>> get_value(three_of_spades)
3
>>> get_suit(three_of_spades)
2
>>> display_card(three_of_spades)
"3 of Spades"
>>> card = create_card(13, 2)
>>> display_card(card)
13 of Spades
Eftersom ett spelkort är oföränderligt i verkligheten skapar ni inte funktioner för att modifiera det. När ni däremot ska skapa funktioner för att modellera en hel kortlek kommer ni behöva funktioner för att skapa en lek eftersom en kortlek inte alltid behöver innehålla alla spelkort och ordningen på spelkorten kan spela roll beroende på sammanhang. Nedan visas exempel på funktioner för att skapa och extrahera data ur en kortlek. Behövs det fler för att modellera en kortlek? Implementera funktionerna i körexemplet och tänk på huruvida fler funktioner skulle kunna vara användbara när ni implementera algoritmerna i inlämningsuppgifterna.
Körexempel:
>>> python3 -i lab3.py
>>> deck = create_deck()
>>> print(deck)
['deck', [(1, 1),(2, 1), ...]]
>>> pick_card(deck)
(1, 1)
>>> three_of_spades = create_card(3, 2)
>>> insert_card(three_of_spades, deck)
['deck', [(3, 2),(1, 1),(2, 1), ...]]
Python
Emacs
Laborationer och material
Sidansvarig: Pontus Haglund
Senast uppdaterad: 2023-08-15