Laboration 2
Introduktion
Syftet med laborationen är att börja med repetition i form av procedurell programmering som sedan övergår till objektorienterad programmering där ni avslutningsvis kommer skapa ett klassdiagram över den klass ni gjort.
Tips är att ha övning 1 i en egen pythonfil (t.ex repetition.py) och övning 2, 3 och 4 i en annan (t.ex dog.py).
Övning 1 - Repetition
Skapa en variabel i form av en dict (dictionary) med namnet dog. Denna ska ha följande nycklar (keys) med valfritt innehåll (value), nedan listas typerna för dessa nycklar:
name(str) - namnet på hunden (t.ex doug)breed(str) - namnet på hundrasen (t.ex pug)age(int) - ålder på hundenasleep(bool) - om hunden sover eller inte, standardvärde kan varaFalsecolors(list) - enlistinnehållande färgerna på pälsen
Efter ni skapat denna variabel ska ni skapa ett antal funktioner, dessa visas nedan med ett tillhörande exempel för hur ni använder dessa. I dessa fall har vi hunden Doug, som är en mops (pug) och är 8år, samt har färgerna svart, vit och beige på sin päls.
Tänk på att ni måste dokumentera era funktioner med docstrings. T.ex:
1
2
3
4
5
def print_person(person):
"""
Prints out relevant user information
"""
pass
Exemplen förutsätter att ni skapat variabeln med namnet “dog”.
print_info - tar emot hunden som ett argument och skriver ut en sträng enligt följande mall:
1
2
print_info(dog)
# => "Woof! I'm Doug the pug (8 years)."
is_asleep - tar emot hunden som argument och returnerar True eller False om hunden sover eller inte.
1
2
3
4
5
6
7
# If-sats som kontrollerar om hunden sover eller inte
if is_asleep(dog):
print(dog["name"], "is sleeping!")
# => "Doug is sleeping!"
else:
print(dog["name"], "is awake!")
# => "Doug is awake!"
wake_up och sleep - tar emot hunden som ett argument och ändrar på nycklen “asleep” beroende på om hunden sover eller inte.
1
2
3
4
5
6
7
8
9
# Beroende på om hunden sover eller inte så ändrar vi tillståendet på "asleep" nyckeln
if is_asleep(dog):
wake_up(dog)
print(dog["name"], "just woke up!")
# => "Doug just woke up!"
else:
sleep(dog)
print(dog["name"], "is fast asleep!")
# => "Doug is fast asleep!"
print_fur_colors - tar emot hunden som ett argument och skriver ut en sträng enligt följande mall:
1
2
print_fur_colors(dog)
# => "Doug has the following fur colors: black, white, beige."
Övning 2 - Klass
Nu ska ni skapa klassen Dog med följande metoder (funktioner):
__init__- den metod som körs när ni skapar en instans avDog, det räcker med att denna tar emot hundens namn__str__- den metod som körs när ni t.ex skriverprint dog(förutsatt att “dog” är en instans avDog)
Utgå från mallen nedan, ni ska kunna utföra samma sak (dvs. skapa en hund som dog och sedan anropa print dog och få ut hundens namn).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Exempelmall för en klass
class Phone(object):
"""
Beskrivning av klassen
"""
def __init__(self, model):
"""
Beskrivning av metoden
"""
self.model = model
def __str__(self):
return "Phone model is %s" % (self.model)
# Här skapar vi en instans av en klass
p = Phone("iPhone 6s")
print(p)
# => "Phone model is iPhone 6s"
Tänk på att dokumentera era klass och metoder med docstrings.
Övning 3 - Attribut och metoder
Nu ska ni uppdatera er klass Dog med alla de attribut (nycklarna i er dict) som användes i övning 1 - placera dessa i __init__ metoden. Därefter kan ni placera in funktionaliteten från print_info i __str__ metoden. Resterande funktioner som gjordes i övning 1 kan ni konvertera till metoder för er klass. Utöver detta ska ni även lägga till metoden get_name som returnerar hundens namn.
Om ni lyckats skriva korrekt kod kan ni pröva exemplet nedan:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Vår instans av klassen Dog
dog = Dog("Doug", "Pug", 8, ["black", "white", "beige"])
print(dog)
# => "Woof! I'm Doug the pug (8 years)."
# Testa gärna att köra dog.sleep() innan if-satsen
# för att se så att båda delarna ger utskrifter
if dog.is_asleep():
dog.wake_up()
print(dog.get_name(), "just woke up!")
# => "Doug just woke up!"
else:
dog.sleep()
print(dog.get_name(), "is fast asleep!")
# => "Doug is fast asleep!"
dog.print_fur_colors()
# => "Doug has the following fur colors: black, white, beige."
Övning 4 - Iteration
I övning 4 ska ni skapa fem instanser av Dog (dvs. fem individuella hundar), dessa ska sparas i listan dogs. Ni ska därefter gå igenom denna listan med en for-loop och därefter skriva ut information om hunden och hundens päls (print_fur_colors).
Övning 5 - Klassdiagram
Som avslutande övning ska ni skapa ett klassdiagram av er klass Dog med valfritt verktyg, som t.ex Adobe Illustrator och Visual Paradigm eller gratisprogram som DrawIO, Paint, etc.