Göm meny
Gäller för: VT25

Laboration 6: Objektorienterad problemuppdelning

I laboration 6 kommer ni fortsätta öva på att skapa egna klasser. Denna gång ska ni dock lagra instanser av klasser i andra instanser, samt skapa metoder som delegerar vidare den uppgift som ska lösas.

Redovisning och kompletteringar

  • Information om den muntliga redovisningen, samt eventuella kompletteringar kan ni läsa om på sidan Redovisning.
  • Vid inlämning av era filer, se till att ni laddar upp alla era filer med kod. Se även till att allt fortfarande fungerar om ni har fått komplettering för något och ändrat i koden sedan redovisningstillfället.

Lärandemål

  • kunna ge exempel och förklara hur ett programmeringsproblem kan brytas ner när man använder sig av objektorienterad programmering (t.ex. delegering av uppgifter, ansvarsuppdelning m.m. se föreläsning)
  • kunna peka ut exempel i egen objektorienterad kod på hur ett problem brutits ner i mindre delar
  • kunna skriva ett objektorienterat program med egna klasser där instanser av en egenskriven klass lagras i en instans av en annan egenskriven klass
  • kunna skriva ett skript med interaktivt text-gränssnitt med felhantering

Krav för godkänd kod på Del 1-2

  • Koden ska följa PEP 8.
  • Moduler (själva filen), funktioner, klasser och metoder ska kommenteras enligt PEP 257.
  • Koden ska följa koddispositionen nedan.
  • Koden ska utföra uppgifterna enligt respektive uppgiftsbeskrivning.
  • Koden ska vara uppdelad i olika filer enligt instruktionerna för respektive uppgift.

För hjälp med kontroll av PEP, se PEP 8 och PEP 257.

Del 0: SMoL Tutor 5-8 (enskilt)

I samband med Laboration 5-7 skall ni individuellt göra övningarna i SMoL Tutor som ni finner här. SMoL Tutor är ett system för att öva på att läsa och förstå kod samt för hjälpa er att bygga upp en mental modell över vad som händer under ytan när Python-kod körs. Övningarna tar i genomsnitt 10-20 minuter vardera och ingen enskild övning bör ta mer än 30 minuter att genomföra.

Verktyget är tillgängligt på engelska och era fullt anonymiserade svar kan komma att användas i kursutvecklingssyfte. Era anonymiserade svar kan eventuellt också komma att användas i forskningssyfte, om ni inte vill att era svar ska kunna användas i forskningssyfte så kontakta examinator. Övningarna är obligatoriska att genomföra, men det är inte tänkt att ni ska arbeta med dem under schemalagd labbtid då ni istället förväntas arbeta tillsammans med er labbpartner på de gemensamma delarna av labben.

Övningarna är:

  1. Definitions
  2. More definitions
  3. Even more definitions
  4. Mutable arrays
  5. More mutable arrays
  6. Even more mutable arrays
  7. Mutable variables
  8. More mutable variables
  9. Functions as values
  10. More about functions as values
  11. Lambda expressions

Ni kan göra övningarna när som helst under VT2, men i Webreg rapporteras de i grupper 1-4, 5-8 och 9-11 som är rekommenderat att göra i samband med Laboration 5, 6 respektive 7.

I samband med Laboration 6 bör ni åtminstone arbeta er igenom del 5-8.

Del 1: Representation av text

Här ska ni skapa tre klasser som representerar olika beståndsdelar av en text. Varje klass tar hand om uppgifter på sin nivå och delegerar vidare uppgifter till instanser på lägre nivåer.

Utskrift

När ni läst in texten och skapar instanserna skriver ni ut något i stil med nedanstående. Mellanslag och radbrytningar behöver inte räknas in i antalet tecken (olika utskriftsalternativ finns längre ner på sidan).

Texten innehåller 15 meningar, 133 ord/skiljetecken, 676 tecken.
Mening 1 innehåller 22 ord/skiljetecken (105 tecken)
Mening 2 innehåller 7 ord/skiljetecken (35 tecken)
Mening 3 innehåller 8 ord/skiljetecken (44 tecken)
Mening 4 innehåller 6 ord/skiljetecken (32 tecken)
Mening 5 innehåller 6 ord/skiljetecken (33 tecken)
Mening 6 innehåller 8 ord/skiljetecken (35 tecken)
Mening 7 innehåller 8 ord/skiljetecken (44 tecken)
Mening 8 innehåller 7 ord/skiljetecken (29 tecken)
Mening 9 innehåller 10 ord/skiljetecken (57 tecken)
Mening 10 innehåller 10 ord/skiljetecken (47 tecken)
Mening 11 innehåller 9 ord/skiljetecken (44 tecken)
Mening 12 innehåller 6 ord/skiljetecken (34 tecken)
Mening 13 innehåller 10 ord/skiljetecken (50 tecken)
Mening 14 innehåller 7 ord/skiljetecken (41 tecken)
Mening 15 innehåller 9 ord/skiljetecken (46 tecken)

Klasser

Följande klasser ska skapas:

  • Klassen Tokenrepresenterar ett ord eller ett skiljetecken och ska ha en sträng som instansvariabel som innehåller ordet/skiljetecknet. En instans skapas med Token(value) där value är en sträng med är ett ord eller ett skiljetecken. I den här labben räknas allt som föregås eller följs av ett mellanslag eller en radbrytning som ett token. Dvs. även punkter och komman är tokens och skall representeras av Token-objekt.
  • Klassen Sentence representerar en mening och ska innehålla instanser av klassen Token. En instans skapas med Sentence(value) där value är en sträng med en mening. Det är tillåtet att göra det förenklande antagandet att varje rad i den givna texten nedan motsvarar exakt en mening.
  • Klassen Text representerar hela texten och ska innehålla instanser av klassen Sentence. En instans skapas med Text(value) där value är en sträng som innehåller hela texten (se nedan). OBS! Ska inte känna till instanser av Token.

Informationen kommer alltså att lagras på ett trädstrukturliknande sätt. Notera att själva strängarna med ord eller skiljetecken endast lagras i instanser av klassen Token.

Del 2

I del 2 ska ni skriva ett objektorienterat skript som låter användaren skriva in uppgifter att göra (en att-göra-lista) via ett text-gränssnitt.

Del 2 består av 3 uppgifter. Lös uppgifterna i ordning.

Frivilliga extrauppgifter


Sidansvarig: Johan Falkenjack
Senast uppdaterad: 2025-04-13