Kap 3.5
UML för objektmodeller
UML hjälper oss planera klasser, attribut, metoder och relationer innan vi kodar.
Mål
Efter lektionen ska du kunna...
- förklara vad ett UML-klassdiagram visar
- tolka enkla klassdiagram
- koppla klassdiagram till Pythonkod
- rita relationer mellan klasser
UML
UML är inte kod
Det är ett visuellt språk för programstruktur.
Du använder det för att planera objektorienterade program.
Diagrammet visar vad som ska finnas i koden.
Klassdiagram
En klassruta har tre delar
- klassens namn
- attribut, alltså fält eller variabler
- metoder, alltså funktioner i klassen
Symboler
Synlighet i UML
+betyder publik-betyder privat#betyder skyddad, alltså protected- Typen visar datatyp, till exempel
stringellerint
Exempel
Klassdiagram för Dog
classDiagram
class Dog {
-string name
-int age
+bark() void
+haveBirthday() void
}
Tolka
Vad visar Dog?
nameär ett privat attribut av typenstring.ageär ett privat attribut av typenint.bark()är en publik metod.haveBirthday()är en publik metod.
Python
Samma klass i kod
class Dog:
def __init__(self, name, age):
self._name = name
self._age = age
def bark(self):
print("Voff!")
def have_birthday(self):
self._age += 1
I Python används ofta snake_case: have_birthday().
Relation
Arv
Arv betyder att en klass bygger vidare på en annan klass.
I Python syns det till exempel som class Dog(Animal):.
Klassdiagram
Arv: Dog och Animal
classDiagram
Dog --> Animal : inherits
class Animal {
+speak() void
}
class Dog {
+bark() void
+speak() void
}
Python
Samma arv i kod
class Animal:
def speak(self):
print("Djuret gör ett ljud.")
class Dog(Animal):
def bark(self):
print("Voff!")
def speak(self):
print("Hunden skäller.")
Dog ärver från Animal och kan skriva över speak().
Relation
Association
Association betyder att två klasser har en koppling.
En skola kan till exempel ha flera studenter.
I kod kan kopplingen visas med en lista av objekt.
Klassdiagram
Association: School och Student
classDiagram
School --> Student : has
class Student {
-string name
-int age
+printInfo() void
}
class School {
-string name
-string city
-list students
+addStudent(student) void
}
Python
Association i kod
class School:
def __init__(self, name, city):
self._name = name
self._city = city
self._students = []
def add_student(self, student):
self._students.append(student)
School sparar Student-objekt i listan _students.
Exempel
Bankapplikation
En bank har kunder.
En kund kan ha konton.
Diagrammet visar klasserna och relationerna mellan dem.
Klassdiagram
Bank, kund och konto
classDiagram
Bank --> Customer : has
Customer --> Account : owns
class Bank {
-string name
-list customers
+addCustomer(customer) void
+findCustomer(name) Customer
}
class Customer {
-string name
-string customerId
-list accounts
+addAccount(account) void
+getAccounts() list
+getName() string
}
class Account {
-string accountNumber
-float balance
+deposit(amount) void
+withdraw(amount) bool
+getBalance() float
}
Relationer
Vad betyder pilarna?
Bank --> Customer : hasbetyder att banken har kunder.Customer --> Account : ownsbetyder att kunden äger konton.- Listorna i koden visar samma relationer.
Kodkoppling
Relationer som listor
self._customers = []
self._accounts = []
Banken sparar kunder i _customers.
Kunden sparar konton i _accounts.
Öva
Analysera och skapa UML
- Skapa klassdiagram för
Customer,AccountochBank. - Visa attribut och metoder i varje klass.
- Rita associationerna mellan klasserna.
- Skriv Python-koden som hör ihop med diagrammet.
- Gör UML av ett tidigare program.
Verktyg
Rita UML
Du kan rita för hand.
Du kan också använda yEd Live.
Välj Palette -> UML för att hitta UML-symbolerna.
Sammanfattning
Kom ihåg
- Klassdiagram visar klasser, attribut och metoder.
- Pilar visar relationer mellan klasser.
- UML hjälper dig planera innan du kodar.
- Diagram och kod ska beskriva samma modell.