Sekvensdiagram
Ett sekvensdiagram visar vem som pratar med vem, i vilken ordning. Tiden går uppifrån och ner, och varje pil är ett anrop eller ett svar. Där klassdiagrammet visar hur koden ser ut, visar sekvensdiagrammet hur den beter sig när något händer.
När du läst detta ska du kunna
- Känna igen och namnge delarna i ett sekvensdiagram
- Skilja på anrop och svar
- Rita ett flöde där ett villkor styr vad som händer (
alt) - Översätta ett sekvensdiagram till metodanrop i C#
Vad används det till?
- Förstå befintlig kod — vem anropar vem när användaren klickar “Köp”?
- Planera ett nytt flöde innan du kodar — inloggning, betalning, API-anrop
- Förklara för andra — i en kodgranskning eller dokumentation av ett API
- Hitta problem — onödigt många anrop, eller ett objekt som gör för mycket
Delarna och vad de heter
| Del | Hur den ritas | Vad den betyder |
|---|---|---|
| Deltagare (participant) | Ruta högst upp | Ett objekt, en klass, en tjänst eller en person som deltar |
| Livslinje (lifeline) | Streckad lodrät linje | Deltagarens “tidslinje” — tiden går nedåt |
| Aktiveringsstapel | Smal stapel på livslinjen | Deltagaren håller på att utföra något just nu |
| Synkront anrop | Heldragen pil, fylld spets | “Gör det här — jag väntar på svaret” (ett vanligt metodanrop) |
| Asynkront anrop | Heldragen pil, öppen spets | “Gör det här — jag väntar inte” (t.ex. ett meddelande på en kö) |
| Svar (return) | Streckad pil, öppen spets | Returvärdet som skickas tillbaka |
| Självanrop | Pil som går ut och tillbaka till samma livslinje | Objektet anropar en egen metod |
| Kombinerat fragment | Ram med etikett i hörnet | En del av flödet med särskild regel: alt (om/annars), opt (kanske), loop (upprepas) |
| Villkor (guard) | Text inom [hakparenteser] | Villkoret som måste vara sant för att fragmentet ska köras |
Siffrorna framför anropen (1:, 2:, 3:) är frivilliga, men gör det lättare att prata om diagrammet: “i steg 2 frågar kassan lagret…”.
Exempel — inloggning
En användare loggar in. LoginController frågar AuthService, som hämtar användaren från databasen. Stämmer lösenordet får användaren en token — annars ett felmeddelande. Ramen alt med en streckad skiljelinje är sekvensdiagrammets if/else.
Samma flöde i C# — varje heldragen pil blir ett metodanrop, varje streckad pil ett return:
public class LoginController{ private readonly AuthService _auth;
public LoginController(AuthService auth) => _auth = auth;
public string LogIn(string name, string password) { string? token = _auth.Validate(name, password); // validera(namn, lösen) return token ?? "Fel användarnamn eller lösenord"; // resultat }}
public class AuthService{ private readonly UserDatabase _db;
public AuthService(UserDatabase db) => _db = db;
public string? Validate(string name, string password) { User? user = _db.GetUser(name); // hämtaAnvändare(namn)
if (user != null && CompareHash(user, password)) // jämförHash() + alt { return CreateToken(user); // [lösenord stämmer] → token }
return null; // [annars] → null }
private bool CompareHash(User user, string password) { /* ... */ return true; } private string CreateToken(User user) { /* ... */ return "abc123"; }}När ska du välja ett sekvensdiagram?
| Välj sekvensdiagram när… | Välj något annat när… |
|---|---|
| Ordningen mellan anrop är det viktiga | Du vill visa vilka klasser som finns → klassdiagram |
| Flera objekt eller tjänster samarbetar | Det är ett objekts logik med många beslut → flödesschema |
| Du dokumenterar ett API-anrop eller en integration | Du vill visa vilka lägen något kan vara i → tillståndsdiagram |
Vanliga misstag
- För många deltagare. Fler än 5–6 livslinjer blir oläsligt. Rita ett diagram per scenario istället.
- Glömda svar. Det är lätt att rita anropen men hoppa över returpilarna — då syns inte vad som skickas tillbaka.
- Varje rad kod som en pil. Rita de anrop som är intressanta för den som läser, inte varje
ToString().
Övning
Rita ett sekvensdiagram för när en kund tar ut pengar i en bankomat: Kund, Bankomat, Bank. Kunden sätter in kortet och anger PIN, bankomaten frågar banken om PIN stämmer och om det finns täckning. Använd ett alt-fragment för “täckning finns” / “annars”.
TL;DR
| Begrepp | Vad det är |
|---|---|
| Sekvensdiagram | Vem pratar med vem, i vilken ordning — tiden går nedåt |
| Heldragen pil | Anrop |
| Streckad pil | Svar |
alt / opt / loop | Om/annars, kanske, upprepning |