Objekttilstandsdiagrammer viser hvordan objekt(struktur)er endres over tid, når en kaller metoder. En kan tenke på objekttilstandsdiagrammer som en blanding av objektdiagrammer, tilstandsdiagram og Sekvensdiagrammer, hvor objekt(struktur)er utgjør tilstander med metodekall-transisjoner mellom, slik at en ser hvordan ulike metodkall endrer tilstanden til objektstrukturer og dermed hvordan objektene endres over tid. Merk at denne diagramtypen ikke er standard UML, men en (oppfinnsom) kombinasjon/hybrid av eksisterende diagramtyper, objektdiagrammer, tilstandsdiagrammer og Sekvensdiagrammer.
Enkelt sagt så knyttes en strukturer av objekter, slik de tegnes i objektdiagrammer, sammen med transisjonspiler annotert med metodekall. Transisjonspilene er stiplede, for å gjøre de lettere å skille fra referanser mellom objekter. Objektstrukturen i fra-enden representerer før-tilstanden og objektstrukturen i til-enden er etter-tilstanden en får dersom metodekallet utføres. Metodekallene skrives slik en gjør i programkode, men med objektidentitet istedenfor variabelreferanser.
Denne diagramtypen kan brukes til å spesifisere hva en metode er ment å gjøre, eller til å dokumentere hva metoden faktisk gjør. Diagrammer av denne typen er lett å oversette til en enhetstest, som jo rigger opp en før-tilstand, utfører koden som skal testes og sjekker at etter-tilstanden er som forventet.
I dette enkle eksemplet ser vi hvordan et Person-objekt (id=1) får satt navnet sitt. Før-tilstanden viser Person-objektet uten navn. Den stiplede transisjonspilen leder til etter-tilstanden, hvor vi ser at navnet nå er satt til "Ola Nordmann". Teksten på transisjonspilen viser at endringen skyldtes et kall til setName-metoden på Person-objektet med "Ola Nordmann" som argument. |
Før- og etter-tilstanden er ofte større objektstrukturer, som vist under.
Den øverste delen av figuren viser en objektstruktur med fire objekter, ett Playlist-objekt og tre Song-objekter, hvorav to av Song-objektene er knyttet til Playlist-objektet og ett Song-objekt er alene. Denne objektstrukturen utgjør før-tilstanden. Den stiplede pilen leder fra objektstrukturen som utgjør før-tilstanden til objektstrukturen som utgjør etter-tilstanden. Teksten på den stiplede pilen angir hva som leder fra før-tilstanden til etter-tilstanden. Her er det metodekallet addSong(#4), altså addSong-metoden kalt på Playlist-objektet med det ensomme Song-objektet som argument, som har som effekt å knytte argumentet til Playlist-objektet, slik (objektstrukturen som utgjør) etter-tilstanden viser. |
"Nytt kjæledyr"-eksempel
Dette objekttilstandsdiagrammet kan leses som følger:
- Først kalles metoden
getName()
påPet
-objektet med identitet 5, og strengen"Klump"
returneres. Her går transisjonspilen i en U-form fraPet
-objektet og tilbake, dette fordi det ikke skjer noen endring i tilstanden til noen av objektene i den øverste objektstrukturen. Altså blir den øverste objektstrukturen både før- og etter-tilstanden. - Deretter kalles
addPet(#8)
, som legger tilPet
-objektet (id=8) tilPerson
-objektet (id=p1) sittpets
-attributt. Her endres tilstanden tilPerson
-objektet p1, og det går dermed en transisjonspil fra p1 i den øverste objektstrukturen til p1 i den midterste. Altså er den øverste objektstrukturen før-tilstanden og den midterste etter-tilstanden. - Videre settes
name
-attributten tilPet
-objektet med identitet 8 ved atsetName("Flomp")
blir kalt. Her endres tilstanden til objekt 8, og dermed går det en transisjonspil fraPet
-objektet (id=8) i den midterste objektstrukturen tilPet
-objektet (id=8) i den nederste.