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.
|
|
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.
#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.
object "~#identity:type" as id{
attribute = attributeValue
multipleValuedAttribute = {value1, value2, value3}
}
note top of id: Identifikasjonsdel
note bottom of id: Innholdsdel
object "~#p1:Person" as p1{
name = "Ola Nordmann"
}
note top of p1: Med identitet
object ":Person" as p2{
name = "Ola Nordmann"
}
note top: Uten identitet |

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.
Objektdiagrammer:
I tillegg viser klassediagrammer klasser, mens objektdiagrammer viser instanser av klasser, dvs. objekter.
class Person{
String name
boolean hasBook(Book)
int getNumberOfPets()
}
class Pet{
String name
int age
}
class Book{
String title
int pages
}
Book "prequel: 1" <-- Book
Person --> "books: *" Book
Person --> "pets: *" Pet |
![]()
object "~#p1:Person" as p1{
name = "Ola Nordmann"
}
object "~#b1:Book" as b1{
title = "Alice's Adventures in Wonderland"
pages = 96
}
object "~#b2:Book" as b2{
title = "Through the Looking-Glass"
pages = 121
}
p1 --> b1: books
p1 --> b2: books
b2 --> b1: prequel |
I dette programmet har ikke personen p1 noen kjæledyr, og dermed vises heller ikke noen instans av klassen Pet i objektdiagrammet.

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;
} |