Klassediagrammer, sekvensdiagrammer og systemmodellering.
UML og modellering
Før du byrjar å kode, er det lurt å planleggje. UML (Unified Modeling Language) er eit standardisert visuelt språk for å teikne programvaredesign.
UML-diagram fungerer som "blåkopiar" for kode – dei hjelper deg å tenkje gjennom strukturen før du skriv ei einaste linje Python!
Vi skal sjå på tre viktige diagramtypar: klassediagram, use case-diagram og sekvensdiagram.
Fordelar med UML:
- Gjev ei felles visuell forståing av systemet
- Hjelper med planlegging før koding
- Dokumenterer design for andre utviklarar
- Gjer det lettare å diskutere løysingar
Vanlege diagramtypar:
- Klassediagram – viser klassar og relasjonar
- Use case-diagram – viser funksjonalitet frå brukaren sitt perspektiv
- Sekvensdiagram – viser interaksjon mellom objekt over tid
Eksempel: Klassediagram – Grunnleggjande
Eit klassediagram viser klassar med:
- Namn øvst
- Attributtar (variablar) i midten
- Metodar nedst
Eksempel i UML:
┌─────────────────┐
│ Person │
├─────────────────┤
│ - navn: str │
│ - alder: int │
├─────────────────┤
│ + __init__() │
│ + si_hei() │
└─────────────────┘Symbol:
- - = privat (eller protected i Python: _)
- + = public (standard i Python)
- # = protected
Tilsvarande Python-kode:
class Person:
def __init__(self, navn, alder):
self.navn = navn # + (public)
self.alder = alder # + (public)
def si_hei(self):
print(f"Hei, jeg er {self.navn}!")1. Arv (Inheritance): Pil med kvit trekant
- Student ──▷ Person (Student arvar frå Person)
2. Komposisjon (Composition): Linje med fylt diamant
- Bil ◆──── Motor (Bil "eig" Motor)
3. Aggregering (Aggregation): Linje med tom diamant
- Skole ◇──── Student (Skole "har" Studentar)
4. Assosiasjon (Association): Enkel linje
- Person ──── Adresse (Person "brukar" Adresse)
5. Avhengigheit (Dependency): Stipla pil
- Klasse A ······> Klasse B (A brukar B mellombels)
Eksempel: Klassediagram med relasjonar
┌─────────────────┐
│ Person │
├─────────────────┤
│ - navn: str │
│ - alder: int │
├─────────────────┤
│ + si_hei() │
└─────────────────┘
△
│
│ (arv)
│
┌─────────────────┐
│ Student │
├─────────────────┤
│ - studieprogram │
├─────────────────┤
│ + studer() │
└─────────────────┘
┌─────────────────┐ ┌─────────────────┐
│ Bil │ │ Motor │
├─────────────────┤ ├─────────────────┤
│ - merke: str │ ◆──── │ - hk: int │
├─────────────────┤ ├─────────────────┤
│ + start() │ │ + start() │
└─────────────────┘ └─────────────────┘
(komposisjon)Tilsvarande Python:
class Person:
def __init__(self, navn, alder):
self.navn = navn
self.alder = alder
def si_hei(self):
print(f"Hei, jeg er {self.navn}!")
class Student(Person): # Arv
def __init__(self, navn, alder, studieprogram):
super().__init__(navn, alder)
self.studieprogram = studieprogram
def studer(self):
print(f"Studerer {self.studieprogram}")
class Motor:
def __init__(self, hk):
self.hk = hk
def start(self):
print(f"Motor med {self.hk} hk startet")
class Bil:
def __init__(self, merke, hk):
self.merke = merke
self.motor = Motor(hk) # Komposisjon
def start(self):
self.motor.start()Eksempel: Use case-diagram
Use case-diagram viser funksjonalitet frå brukaren sitt perspektiv.
Eksempel: Nettbank-system
Kunde
│
│ (bruker)
▼
┌───────────────┐
│ Logg inn │
└───────────────┘
│
┌───────────────┐
│ Se saldo │
└───────────────┘
│
┌───────────────┐
│ Overfør penger│
└───────────────┘Komponentar:
- Aktør (strekfigur): Kunde
- Use cases (ovalar): Logg inn, Sjå saldo, Overfør pengar
- Sambindingar (linjer): Viser kven som brukar kva
Use cases skildrar kva systemet gjer, ikkje korleis.
Komponentar:
- Objekt øvst (boksar)
- Livslinjer (vertikale stipla linjer)
- Meldingar (horisontale piler mellom livslinjer)
- Aktivering (tynne boksar på livslinja)
Sekvensdiagram er nyttige for å forstå komplekse interaksjonar og flyten i program.
Eksempel: Sekvensdiagram – Handlekurv
Bruker Handlekurv Vare
│ │ │
│ legg_til() │ │
├────────────>│ │
│ │ get_pris()│
│ ├──────────>│
│ │<──────────┤
│ │ 199 kr │
│ │ │
│ betal() │ │
├────────────>│ │
│ │ sum() │
│ ├──────┐ │
│ │<─────┘ │
│<────────────┤ │
│ "Betalt" │ │Tolking:
1. Brukar kallar legg_til() på Handlekurv
2. Handlekurv spør Vare om pris
3. Vare returnerer 199 kr
4. Brukar kallar betal()
5. Handlekurv reknar ut sum (intern)
6. Handlekurv returnerer "Betalt" til Brukar
Sekvensdiagram viser rekkjefølgja av operasjonar.
Eksempel: Praktisk bruk – Planlegging med UML
Lat oss planleggje eit enkelt biblioteksystem:
1. Use case-diagram (funksjonalitet):
Bibliotekar
│
├── Registrer bok
├── Lån ut bok
└── Ta imot retur
Medlem
│
├── Søk etter bok
└── Reserver bok2. Klassediagram (struktur):
┌─────────────────┐ ┌─────────────────┐
│ Bok │ │ Medlem │
├─────────────────┤ ├─────────────────┤
│ - tittel: str │ │ - navn: str │
│ - forfatter │ │ - medlemsnr │
│ - isbn │ ├─────────────────┤
├─────────────────┤ │ + lån_bok() │
│ + __str__() │ ◇───── │ + lever_bok() │
└─────────────────┘ └─────────────────┘
(aggregering – medlem kan ha bøker)3. Sekvensdiagram (utlånsprosess):
Bibliotekar System Medlem Bok
│ │ │ │
│ lån_ut() │ │ │
├──────────>│ │ │
│ │ sjekk_ │ │
│ ├────────>│ │
│ │<────────┤ │
│ │ OK │ │
│ │ marker_ │ │
│ │ utlånt()│ │
│ ├────────────────>│
│<──────────┤ │ │
│ "Suksess" │ │ │Ved å planleggje med UML unngår du mange feil før du kodar!
Oppsummering
I dette kapittelet har du lært:
- UML er eit standardisert visuelt språk for programvaredesign
- Klassediagram viser klassar, attributtar, metodar og relasjonar
- Use case-diagram viser funksjonalitet frå brukaren sitt perspektiv
- Sekvensdiagram viser interaksjon mellom objekt over tid
- UML hjelper med planlegging, dokumentasjon og kommunikasjon
Med UML kan du tenkje gjennom design før du skriv kode – og kommunisere løysingar visuelt!
Du har no fullført Seksjon 2: Avansert OOP og designmønster!
Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.