Klassediagrammer er en illustrasjon av innholdet i og sammenhengen mellom klasser, og fungerer som et supplement til tekstlig kode. Et klassediagram viser klasser som bokser, attributter og operasjoner som tekstlinjer inni boksene (i hver sine deler) og assosiasjoner og arv som streker med og uten piler. I tillegg annoteres assosiasjonsstreker med informasjon om navn og såkalt multiplisitet (også kalt kardinalitet). Figuren under viser et enkelt klassediagram med tilsvarende Java-kode til høyre.
|
| Figuren til venstre viser et UML-klassediagram med to klasser: Person og Car. Person-klassen har to attributter (firstName og familyName) og én metode (getFullName()), mens Car-klassen har ett attributt (brand). Klassene er knyttet sammen gjennom en ownership-assosiasjon, som viser et en-til-mange-forhold mellom Person og Car. Assosiasjonen er annotert med:
Dette betyr at navigasjonen kan foregå slik:
Diagrammet tilsvarer Java-koden til høyre, hvor:
Assosiasjoner i UML har ingen direkte Java-motstykke, men implementeres typisk ved hjelp av referanser mellom objekter. Når én instans kan være koblet til flere andre instanser, brukes Collection, List, Set, eller array i stedet for en enkel variabel. Dersom en assosiasjon hadde et pilhode (retningsbestemt assosiasjon), ville det bety at navigasjonen kun er mulig én vei. I praksis betyr dette at klassen i pilhode-enden ikke ville ha en referanse tilbake til den andre klassen. Hvis for eksempel assosiasjonen i diagrammet pekte fra Person til Car, ville ikke Car-klassen trengt et owner-felt. |
Arv gjør at nye klasser kan bygge på eller utvide andre klasser. I klassediagrammer angis det med en spesiell pil fra subklassen til superklassen, med et litt stort pilhode som ikke er fylt. En bruker stiplet linje hvis det er snakk om implementasjon av grensesnitt, og ikke vanlig arv mellom klasser (eller mellom grensesnitt).
| Figuren til venstre viser et UML-klassediagram for Observatør-observert-teknikken (Observer Pattern). Dette mønsteret brukes for å etablere en en-til-mange-relasjon mellom objekter, der flere observatører kan abonnere på oppdateringer fra et observerbart objekt.
Synlighetsmodifikatorer i diagrammet:
Koden under diagrammet:
Merknader om navnekonvensjoner:I Java brukes ofte "Listener" som suffiks for observatørgrensesnitt, og dermed også for relaterte variabler og metoder:
|
Mellom boksene kan man ha streker og/eller piler som representerer relasjonene mellom klassene. De vanligste er:
class Vehicle{
int speed
int passengers
String fuelType
boolean isCorrectFuel(String)
}
class Car{
String brand
int doors
}
Vehicle <|-- Car |
interface Database<E>{
void add(E)
void remove(E)
boolean contains(E)
}
class BookDatabase<Book>{
Map<Book, Integer> allBooks
int getNumberOfBooks()
}
Database <|.. BookDatabase |
![]()
Synlighetsmodifikatorer for attributter og metoder har følgende symboler:
De kan også representeres med følgende symboler:
class Visibility{
+ publicAttribute
# protectedAttribute
- privateAttribute
+ publicMethode()
# protectedMethode()
- privateMethode()
} |
![]()