Objekttilstandsdiagrammer er objektdiagrammer knyttet sammen med metodekall-transisjoner, 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 to eksisterende diagramtyper, objektdiagrammer og tilstandsdiagrammer.
Enkelt sagt så rammer en inn objektdiagrammer og knytter disse sammen med piler annotert med metodekall. 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 etter-tilstanden mot forventningene.
PlantUML Macro |
---|
object "#3: Playlist" as playlist31 { name = "Beatles ballades" } object "#yesterday: Song" as yesterday1 { name = "Yesterday" playLength = 123 } object "#2: Song" as song21 { name = "Let It Be" playLength = 230 } object "#4: Song" as song41 { name = "Get Back" playLength = 194 } playlist31 -> yesterday1: songs playlist31 -> song21: songs object "#3: Playlist" as playlist32 { name = "Beatles ballades" } object "#yesterday: Song" as yesterday2 { name = "Yesterday" playLength = 123 } object "#2: Song" as song22 { name = "Let It Be" playLength = 230 } object "#4: Song" as song42 { name = "Get Back" playLength = 194 } playlist32 -> yesterday2: songs playlist32 -> song22: songs playlist32 -> song42: songs playlist31 ..> playlist32: #3.addSong(#4) |
| 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 er rammet inn som en før-tilstand. Metodekallet #3.addSong(#4), altså addSong-metoden kalt på Playlist-objekt med det ensomme Song-objektet som argument, har som effekt å knytte argumentet til Playlist-objektet, slik objektstrukturen som er rammet inn som en etter-tilstand viser. |
Dersom objektstrukturen kun består av ett objekt, så kan en utelate innrammingen og la transisjonspilen gå direkte fra dette objektet. Dette gjør det raskere å tegne diagrammet, men kan også gjøre det verre å skille denne diagramtypen fra vanlige objektdiagrammer.
PlantUML Macro |
---|
object "#1: Person" as p1 { name = null } object "#1: Person" as p2 { name = "Ola Nordmann" } p1 ..> p2: #1.setName("Ola Nordmann") |