Objektdiagrammer viser tilstanden til objekt(struktur)er, med verdiene til attributter og referanser som knytter objekter sammen. Ofte er typene til objektene representert i et eget klassediagram og må forstås i kontekst av det.

Man kan tenke på et objektdiagram som et snapshot av et tenkt program på et bestemt tidspunkt under kjøring. 

Playlist-eksempel#1:Playlistname = "Beatles ballades"object of type Playlist#yesterday:Songname = "Yesterday"playLength = 123#42:Songname = "Let it Be"playLength = 230#1:Playlistname = "Beatles ballades"songs = {#yesterday, #42}compact formsongssongs
Dato-eksempel#p1:Personname = "Hallvard Trætteberg"dateOfBirth = "1966.11.16"#2:Dateday = 16month = 11year = 1966#p1:Personname = "Hallvard Trætteberg"dateOfBirth = "1966.11.16"compact formdateOfBirth

Figuren over viser tre objekter, en instans av Playlist-klassen og to av Song-klassen. Playlist-objektet har et name-attributt med verdien "Beatles ballades", og de to Song-objektene har begge name- og playLength-attributter med sine spesifikke verdier. Playlist-objektet har dessuten to songs-koblinger (eng: link), en til hver av de to Song-objektene.

Komponenter i et objektdiagram

  • Objekter/instanser: Objekter vises som bokser, med en identifikasjonsdel og en innholdsdel. Identifikasjonsdelen viser identiteten og typen, på formen #identity:type

Identiteten er ikke påkrevd, men er nyttig for å kunne referere til objektet uten å bruke piler og evt. fra tekst. Identiteten er som regel et tall uten annen mening enn at den er unik for diagrammet, men kan godt være en kombinasjon av bokstaver og tall, f.eks. playlist1, hvis det gjør diagrammet enklere å lese. Selv om en ikke har med identifikasjonsdelen så skal kolonet stå foran typenavnet, for å gjøre det enklere å skille mellom objekter/objektdiagrammer og klasser/klassediagrammer.#identity:typeattribute = attributeValuemultipleValuedAttribute = {value1, value2, value3}IdentifikasjonsdelInnholdsdel#p1:Personname = "Ola Nordmann"Med identitet:Personname = "Ola Nordmann"Uten identitet

  • Attributter: Attributtene med tilhørende verdier vises i innholdsdelen under identitetsdelen, med ett attributt-/verdi-par pr. linje. 

Attributt-/verdi-par-notasjonen kan brukes til både enkle verdier og til objekt-referanser (koblinger), så lenge verdiene/objektene kan representeres med en passende tekst. F.eks. kan en angi en referanse til en dato som en tekst, selv om datoen egentlig er et eget objekt med egne attributt/verdi-par (se Dato-eksempelet). Merk at en slik tekstlig notasjonen for objekt-referanser gjør det umulig å vise at samme objekt har flere referanser til seg, så det bør bare brukes for objekter som oppfører seg som enkle verdier.
Dersom objektet ikke har en passende tekstlig representasjon, så kan en bruke identiteten. (Se Playlist-eksempelet og kompakt form for songs-attributtet.)
Hvis attributtet har flere verdier (mange-multiplisitet), som f.eks. songs i Playlist-eksempelet, så skrives verdiene etter hverandre i krøllparenteser.

  • Referanser: En referanse/kobling (eng: link) vises som en pil (strek med pilhode) fra (kanten av) boksen/objektet som eier referanser til kanten av boksen/objektet som det refereres til. Navnet på referansen vises ved eller oppå streken, slik at en vet hvilket underliggende attributt som har referansen(e) som verdi. 
    En mer kompakt notasjon er å bruke attributt-notasjonen med navn og identitet(er) som attributt/verdi-par.


Hvordan objektdiagrammer skiller seg fra klassediagrammer

Objektdiagrammer:

  • Har ikke med metodene til klassen/objektet
  • Har ikke med klasser det ikke lages objekt av
  • Har kolon (og evt. id) foran klassenavnet
  • Har med verdier for attributtene

I tillegg viser klassediagrammer klasser, mens objektdiagrammer viser instanser av klasser, dvs. objekter. 


KlassediagramPersonString nameboolean hasBook(Book)int getNumberOfPets()PetString nameint ageBookString titleint pagesprequel: 1books: *pets: *

Objektdiagram#p1:Personname = "Ola Nordmann"#b1:Booktitle = "Alice's Adventures in Wonderland"pages = 96#b2:Booktitle = "Through the Looking-Glass"pages = 121booksbooksprequel

I dette programmet har ikke personen p1 noen kjæledyr, og dermed vises heller ikke noen instans av klassen Pet i objektdiagrammet.

Delvis kode
class Person {
	String name;
	Collection<Pet> pets = new ArrayList<>();
	Collection<Book> books = new ArrayList<>();
	
	boolean hasBook(Book book){
		...
	}
	int getNumberOfPets(){
		...
	}
}

class Book {
	String title;
	int pages;
	Book prequel;
}


class Pet {
	String name;
	int age;
}