Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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. 


PlantUML Macro
title

...

Playlist-eksempel
object "

...

~#1:

...

Playlist" as playlist1 {
	name = "Beatles ballades"
}
note 

...

top: object of type Playlist

object "

...

~#yesterday:

...

Song" as yesterday {
	name = "Yesterday"
	playLength = 123
}

object "

...

~#42:

...

Song" as letitbe {
	name = "Let it Be"
	playLength = 230
}

...


...

playlist1 --> yesterday : songs
playlist1 --> letitbe : songs

...

titleAlternativ representasjon av referanser


object "

...

~#1:

...

Playlist" as playlist2 {
	name = "Beatles ballades"
	songs = {

...

~#yesterday, 

...

~#42}
}

...

note top: compact form



PlantUML Macro
titleDato-eksempel
object "

...

~#p1:

...

Person" as 

...

p1 {
	name = "

...

Hallvard Trætteberg"
	

...

dateOfBirth = 

...

"1966.11.16"
}

...

object "

...

~#2:

...

Date" as 

...

date1 {
	

...

day = 

...

16
	month = 11
	year = 

...

1966
}

...

 

p1 --> date1: dateOfBirth

object 

...

"~#p1:Person" as p2 {
	name = "Hallvard Trætteberg"
	dateOfBirth = "1966.11.16"
}
note top: compact form


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.

PlantUML Macro
hspace100
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
  • Attributter: 

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.)

Referanser

...

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. 



PlantUML Macro
titleKlassediagram
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



PlantUML Macro
titleObjektdiagram
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.


Code Block
languagejava
titleDelvis 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;
}