Presentationer Slide 1/1

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

  1. klassens namn
  2. attribut, alltså fält eller variabler
  3. metoder, alltså funktioner i klassen

Symboler

Synlighet i UML

  • + betyder publik
  • - betyder privat
  • # betyder skyddad, alltså protected
  • Typen visar datatyp, till exempel string eller int

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 typen string.
  • age är ett privat attribut av typen int.
  • 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 : has betyder att banken har kunder.
  • Customer --> Account : owns betyder 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

  1. Skapa klassdiagram för Customer, Account och Bank.
  2. Visa attribut och metoder i varje klass.
  3. Rita associationerna mellan klasserna.
  4. Skriv Python-koden som hör ihop med diagrammet.
  5. 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.