Tilbake
2.5
UML og modellering

2.5 UML og modellering

Klassediagrammer, sekvensdiagrammer og systemmodellering.

55 min
6 oppgaver
UMLKlassediagramSekvensdiagramModellering
Du leser den tradisjonelle versjonen
Din fremgang i kapitlet
0 / 6 oppgaver

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.

Definisjon
UML (Unified Modeling Language) er eit standardisert modelleringsspråk for å visualisere, spesifisere og dokumentere programvaresystem.

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

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}!")
Definisjon
Relasjonar i klassediagram:

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

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

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.

Definisjon
Sekvensdiagram viser korleis objekt samhandlar over tid.

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

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

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 bok

2. 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.