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

Storseminarium 4 - Experimentering

Innan seminariet ska du ha gått igenom Inför seminariet nedan och gjort tillhörande quiz. Syftet med detta är att du ska bekanta dig med innehållet så eventuella frågor kan redas ut under seminariet.

Denna sida visar en del av det som kommer att diskuteras på seminariet. Det kan hända att handledarna också tar upp andra uppgifter som inte behöver något specifikt studiematerial och då syns dessa uppgifter inte på sidan.

Inför seminariet

Under seminariet

Ni kommer att arbeta med uppgifterna tillsammans i mindre grupper, där ni diskuterar och förklarar för varandra, handledarna kommer att finnas till hjälp som under vanligt labb pass. Efter varje uppgift går handledarna igenom sin lösning i helklass, då finns möjlighet att ställa frågor och presentera alternativa lösningar.

Övning 1: Definiera klass, skapa instans

Skriv in nedanstående klassdefinition för klassen Contact i en fil. Lägg sedan till kod som skapar två instanser av klassen. Referera till instanserna med separata variabler, c1 och c2.

class Contact:
    def __init__(self, name):
        self.name = name
        self.phone_num = ""

Övning 2: Instansvariabler

Lägg till rader i din kod som sätter värdet på attributet phone_num i c1 till "0701-111111" och phone_num i c2 till "0702-222222". Skriv sedan ut värdet på alla instansvariabler i c1 och sedan alla värden på alla instansvariabler i c2.

Du behöver inte skriva någon metod för att tilldela eller skriva ut attributen, utan du kan referera till dem direkt med punktnotation via objektet, t.ex. c1.name eller c2.phone_num. Varför är det tillåtet i det här fallet?

Övning 3: Metoder

Lägg till en metod till klassen Contact med namnet append_to_name(string_to_append) som lägger till strängen string_to_append till instansvariabeln name i den egna instansen. Lägg sedan till kod i filen som

  1. Efter att instanserna c1 respektive c2 skapats ska strängen ",Efternamn" läggas till båda instansernas attribut name. Använd metoden append_to_name(string_to_append).
  2. Skriver ut värdena på instansvariabeln name från både c1 och c2 (efter att suffixet lagts till).

Övning 4: Instanser i en lista

Lägg till kod som skapar en lista som refereras till med variabeln contact_list samt lägger in tre instanser av klassen Contact i den listan (hitta själv på namn och telefonnummer). Skriv sedan en loop som skriver ut (med print()) varje element i listan contact_list.

Utskrifterna av Contact-instanserna bör se ut som något i stil med <__main__.Contact object at 0x10b9a31d0>.

Övning 5: Metoden __str__

Lägg till metoden __str__ enligt nedan till klassen Contact och kör sedan den existerande koden igen. Nu bör namn och telefonnummer skrivas ut istället. Varför?

    def __str__(self):
        return f"Contact(Name: {self.name}, Phone: {self.phone_num})"

Övning 6: Från klassdiagram till kod

Implementera klassen Vector enligt klassdiagrammet nedan. Vad representerar de olika metoderna? Vad innebär det att _components inleds med ett understreck?

Skapa en vektorinstans v1 med komponenterna 1, 2 och 3. Anropa sedan metoden dimension() på den instansen och skriv ut resultatet.

Övning 7: Skapa instanser från en klassdefinition

Ibland är det meningsfullt att skapa nya instanser av en klass inuti en metod i samma klass. Utöka klassen Vector enligt klassdiagrammet nedan:

Testa att multiplicera vektorn v1 med skalären 3 genom att anropa metoden scalev1 och skicka in värdet 3 som argument. Skriv sedan ut den nya vektorn.

Övning 8: Använda flera instanser av en klass i klassdefinitionen

Ibland behöver vi hantera mer än en instans av klassen i en metod i samma klass. Ett relevant exempel för vektorer skulle vara t.ex. när vi vill beräkna vektoraddition eller skalärprodukt. Utöka klassen Vector enligt klassdiagrammet nedan:

Hur kommer vi åt komponenterna i den andra vektorn inuti add? Kan vi använda instansvariabeln _components direkt eller ska vi använda någon metod för att hämta komponenterna?

Hur skulle du kunna använda metoderna add? Testa att skapa en ny vektor v2 med komponenterna 4, 5 och 6. Använd sedan metoden addv1 för att beräkna summan av v1 och v2. Skriv ut resultatet. Skriv också ut v1 och v2 för att verifiera att de inte har ändrats.


Sidansvarig: Johan Falkenjack
Senast uppdaterad: 2025-10-17