Grundläggande komponenter i ett klassdiagram
Beroende på sammanhanget kan klasser i ett klassdiagram representera huvudobjekten, interaktioner i applikationen eller klasser som ska programmeras. För att svara på frågan "Vad är ett klassdiagram i UML?" bör du först förstå dess grundläggande uppbyggnad.
- Klasser: En mall för att skapa objekt och implementera beteenden i ett system. I UML representerar en klass ett objekt eller en uppsättning objekt som delar en gemensam struktur och ett gemensamt beteende. De representeras av en rektangel som innehåller rader för klassens namn, dess attribut och dess operationer. När du ritar en klass i ett klassdiagram behöver du bara fylla i den översta raden – de andra är valfria om du vill ge mer detaljerad information.
- Signaler: Symboler som representerar asynkron enkelriktad kommunikation mellan aktiva objekt.
- Datatyper: Klassificerare som definierar datavärden. Datatyper kan modellera både primitiva typer och uppräkningar.
- Paket: Former utformade för att organisera relaterade klassificerare i ett diagram. De symboliseras av en stor flikförsedd rektangelform.
- Gränssnitt: En samling operationssignaturer och/eller attributdefinitioner som definierar en sammanhängande uppsättning beteenden. Gränssnitt liknar klasser, förutom att en klass kan ha en instans av sin typ, medan ett gränssnitt måste ha minst en klass som implementerar det.
- Uppräkningar: Representationer av användardefinierade datatyper. En uppräkning innehåller grupper av identifierare som representerar värden för uppräkningen.
- Objekt: Instanser av en eller flera klasser. Objekt kan läggas till i ett klassdiagram för att representera antingen konkreta instanser eller prototyper.
- Artefakter: Modellelement som representerar de konkreta entiteterna i ett programvarusystem, såsom dokument, databaser, körbara filer, programvarukomponenter etc.
Delar i en klass
Standardklassen bestär av tre delar:
Övre delen
Innehåller klassens namn. Den här delen är alltid obligatorisk, oavsett om du pratar om klassificeraren eller ett objekt. Klassnamnet bör:
- Börja med stor bokstav.
- Vara formaterat med fetstil.
- Vara centrerat i den övre delen.
- Vara beskrivande.
Mellersta delen
Innehåller klassens attribut. Använd den här delen för att beskriva klassens egenskaper. Detta krävs endast när du beskriver en specifik instans av en klass.
Nedre delen
Innehåller klassoperationer (metoder). De visas i listformat och varje operation tar upp en egen rad. Operationerna beskriver hur en klass interagerar med data. Texten i de två nedre delarna är vanligtvis vänsterjusterad och skrivs med liten begynnelsebokstav.
Åtkomstmodifierare för medlemmar
Alla klasser har olika åtkomstnivåer beroende på åtkomstmodifieraren (synlighet). Här är åtkomstnivåerna med motsvarande symboler:
- Publik (+)
- Privat (-)
- Skyddad (#)
- Paket (~)
- Härledd (/)
- Statisk (understruken)
Medlemsomfång
Det finns två omfång för medlemmar: klassificerare och instanser.
Klassificerare identifieras ofta som statiska, vilket innebär att attributvärdena förblir desamma i alla instanser, och metodanrop påverkar inte instansens tillstånd. Som jämförelse innehåller instanser metoder som kan ändra instansens tillstånd och attributvärden som kan variera mellan instanser. För att indikera en klassificerare understryker du bara dess namn; lämna texten som den är för att indikera en instans.
Interaktioner
Termen "interaktioner" syftar på de olika relationer och länkar som kan finnas i klass- och objektdiagram. Några av de vanligaste interaktionerna inkluderar:
Arv: Processen där en underklass ärver funktionaliteten från en överklass, även kallat generalisering. Det symboliseras med en rät ansluten linje med en stängd pilspets som pekar mot överklassen.

I det här exemplet ärver objektet "Bil" alla attribut (hastighet, antal passagerare, bränsle) och metoder (kör(), stanna(), ändraRiktning()) från överklassen ("Fordon") utöver de specifika attributen (modelltyp, antal dörrar, biltillverkare) och metoderna för den egna klassen (Radio(), vindrutetorkare(), ac/värme()). Arv visas i ett klassdiagram med en heldragen linje med en stängd, ihålig pil.
Dubbelriktad association: Standardrelationen mellan två klasser. Båda klasserna är medvetna om varandra och sin relation till den andra. Denna association representeras av en rät linje mellan två klasser.

I exemplet ovan är klasserna Bil (Car) och RoadTrip relaterade till varandra. I ena änden av linjen antar klassen Bil associationen "assignedCar" med multiplicitetsvärdet 0..1, så när instansen av RoadTrip finns kan den antingen ha en instans av Bil associerad med sig eller inga bilar associerade med sig. I det här fallet behövs en separat Caravan-klass med ett multiplicitetsvärde på 0..* för att visa att en RoadTrip kan ha flera instanser av bilar associerade med sig. Eftersom en Bil-instans kan ha flera "getRoadTrip"-associationer – med andra ord kan en bil åka på flera roadtrips – är multiplicitetsvärdet inställt på 0..*
Enkelriktad association: En något mindre vanlig relation mellan två klasser. En klass är medveten om den andra och interagerar med den. Enkelriktad association modelleras med en rät anslutande linje med en öppen pilspets som pekar från den kännande klassen till den kända klassen.

Som ett exempel kan du på din roadtrip köra förbi en fartkamera som registrerar din körning, men du märker det inte förrän du får ett meddelande på posten. Det är inte inritat i bilden, men i det här fallet skulle multiplicitetsvärdet vara 0..* beroende på hur många gånger du kör förbi fartkameran.