Objektorienterad modellering programmering och analys Föreläsning 6 Innehåll Unified Modelling Language - den dynamiska modellen Interaktionsdiagram sekvensdiagram samarbetsdiagram Tillståndsdiagram Små exempel Analysexempel: Ett billarm - 1 -
Dynamiska modellen Tid Sekvensiering, synkronisering Består av tillståndsdiagram (state diagrams) som beskriver objektens inre tillstånd, och sekvensdiagram (sequence diagrams) samarbetsdiagram (collaboration diagrams) aktivitetsdiagram (activity diagrams) För att ta fram dessa diagram utgår man från specifika exempel. Dessa beskrivs först verbalt i scenarior - 2 -
Inre tillstånd Varje objekt befinner sig i varje ögonblick i ett visst tillstånd (state). Objektets tillstånd bestämmer hur objektet reagerar på indata och yttre händelser (events). Exempel: Knapp i ett grafiskt användargränssnitt. Save Save Save Save Save När markören flyttas in över knappen markeras ramen. När musens vänsterknapp trycks ned inverteras färgerna och operationen utförs. När knappen släpps upp återställs färgerna. När markören flyttas bort återgår ramen till normal tjocklek. - 3 -
Inre tillstånd, forts Knappen kan befinna sig i tre olika tillstånd, som kan namnges: Inactive Active Down Active Inactive Save Save Save Save Save Grafiskt kan tillstånden ritas som ovaler, och övergångarna (transitions) som pilar. Inactive Active Down Klasstillhörigheten avgör vilka tillstånd som objektet kan befinna sig i. Varje objekt befinner sig i exakt ett av tillstånden. Olika instanser av samma klass kan befinna sig i olika tillstånd vid samma tidpunkt. - 4 -
Inre tillstånd, forts De händelser som gör att objektets tillstånd ändras kan också namnges, och placeras ut i diagrammet: enter Inactive Active leave release press(n) Down Händelserna kan vara associerade med data (argument). T ex är n knappens nummer (1, 2 eller 3). Tillståndsdiagrammet ska visa alla tillåtna tillstånd och övergångar. Men vad händer om markören flyttas ut innan knappen släpps upp? Inactive Active Down Down Active Save Save Save Save Save - 5 -
Inre tillstånd, forts Knappen reagerar inte på händelsen leave när den befinner sig i tillståndet Down. Sluttillståndet blir i detta fall Active. Komplettera med en övergång till: enter Inactive Active leave release press(n) leave Down Inactive Active Down Inactive Inactive Save Save Save Save Save - 6 -
Villkorliga övergångar Antag att knappen kan kopplas till en meny. Musens högerknapp visar menyn, vänsterknappen väljer ett standardalternativ: Inactive Active Menu Menu Inactive Edit Edit Edit Edit Edit Undo Cut Copy Paste Undo Cut Copy Paste release Menu press(n)[n=3] Inactive leave enter leave release Active villkor (guard) Down press(n)[n=1] - 7 -
Objektets beteende Objektet kan reagera på en händelse med en handling (action). Handlingar är knutna till tillståndsövergångar. Händelser momentana handlingar momentana Handlingar kan alltså inte ha någon utsträckning i tiden. release /invert, unhighlight Inactive Menu do/ show menu enter/highlight press(n)[n=3] /invert Active leave /invert, unhighlight leave/unhighlight release /invert press(n)[n=1] Down /invert Aktiviteter (activities) är knutna till tillstånd. De pågår så länge objektet befinner sig i tillståndet. Tar tid. Skrivs efter do/ i tillståndet. - 8 -
Ingångs/utgångshandlingar För att slippa repetera samma handling vid flera övergångar kan de knytas till tillståndets ingång eller utgång. De kallas då ingångshandlingar (entry actions) respektive utgångshandlingar (exit actions). OBS! De är (som alla handlingar) momentana. release Inactive entry/unhighlight leave Down entry/invert exit/invert Menu entry/invert exit/invert do/ show menu enter leave release press(n)[n=1] press(n)[n=3] Active entry/highlight - 9 -
Tillståndsdiagram: notation Start Start Övergång State name event(arguments)[condition] / action State name variable: Type = initialvalue entry / action do / activity exit / action event / action(arguments) Tillstånd Tillstånd Slut Slut - 10 -
Fler exempel Idle keypress Running shutdown finished after(2 seconds)/send c.isalive ovillkorliga övergångar noise Idle Searching Engaging targetat(p) [isthreat]/ t.addtarget(p) Tracking contact Engaging - 11 -
Underordnade diagram För att slippa repetera likadana övergångar från många till ett tillstånd: A E A B D B D C C E kallas supertillstånd. Alla tillstånd inom E har övergången från E till D. Objekten befinner sig egentligen aldrig i själva supertillståndet, utan i ett av de subtillstånden A, B eller C. Övergången från D till E går egentligen till A, eftersom A är markerad som starttillstånd i E. Starttillstånd (initial state) Här dör objektet Sluttillstånd (final state) - 12 -
Underordnade diagram, forts Exempel: Nummermottagare i en telefonväxel: Idle off-hook on-hook Busy do/ collect digits Idle off-hook on-hook Busy DialTone key(n) Dialing /add n to key(n) number /set number to n [number complete] Conversation Connecting do/ connect - 13 -
Fler exempel shutdown Idle tocold(desiredtemp) tohot(desiredtemp) attemp Heating attemp Cooling Activating ready/turnon() tohot(desiredtemp) Active tocold(desiredtemp) Idle cardinserted Active maintain cancel Validating [continue] Maintenance Selecting Processing [not continue] Printing entry/readcard exit/ejectcard - 14 -
Varifrån kommer händelser? Händelser upptäcks eller genereras oftast i andra objekt. enter Inactive Active leave Button leave release press(n) Down invert, highlight, unhighlight Button save enter, leave, press(n), release Window Document Det nedre diagrammet kallas händelseföde (event flow, men är inte en dek av UML. Det kan ändå vara bra att på liknande sätt identifiera komponenternas "kommunikationsvägar" på liknande sätt - 15 -
Vad är handlingar och aktiviteter? Handlingar kan vara: Operationer i klassdiagrammet som inte tar någon tid. Meddelanden om nya händelser (send). Aktiveteter är: Operationer i klassdiagrammet som tar tid. enter/highlight Button Inactive Active leave leave release Down press(n) /send invert to window, send save to document Editing save Saving do/ write file Document Ofta är send... to och destinationen underförstådda. - 16 -
Exempel: Flaskfyllning Fyller Ej fylld fyll(n) [innehåll + n >= kapacitet] Full avbrott kapsyl på fyll(n) [innehåll + n < kapacitet] Fel Försluten - 17 -
Exempel: telefon (igen) Uppringning Deltillståndet dialing - 18 -
Exempel: lösenord Man kan definiera egna händelser i tillstånden - 19 -
Exempel: Automatlåda Växel Neutral välj B välj N Back välj N välj F Framåt stopp Ett växla upp växla ner Två växla upp växla ner Tre Omgivande tillstånd ärvs av deltillstånd så om N väljs i något tillstånd i Framåt övergår Växeln i neutralt läge Händelse från kanten av ett tillstånd ärvs av alla deltillstånd så oberoende av framåtväxel ger stopp en övergång till Ett. - 20 -
Parallella undertillstånd Hela tillståndet övergår inte till "passed" förrän alla undertillstånd är klara. - 21 -
Parallellism Parallellism finns i sammansatta objekt (aggregat). Delarna växlar tillstånd självständigt. Edit + Undo Cut Copy Paste = Edit Undo Cut Copy Paste MenuButton Menu Button Parallellism kan också finnas inom samma objekt, t ex en godisautomat: /return coin coin inserted ReturningChange Idle Dispensing do/ dispense item - 22 -
Sekvensdiagram, forts Villkor kan skrivas i kanten - 23 -
Sekvensdiagram, forts Sekvensdiagram finns också på följande form. För fler detaljer se Bruegge kapitel 2 och 5 och/eller www.rational.com/uml. - 24 -
Sekvensdiagram, forts Man kan också ange om ett meddelande är synkront eller asynkront. object 1 object 2 object 3 synchronous call asynchronous call - 25 -
Samarbetsdiagram : Order Entry Window : Order Macallan line : Order Line Macallan stock : Stock Item : Delivery Item : Reorder Item Meddelanden, sekvensnumrering nästa sida. - 26 -
...samarbetsdiagram (forts) : Order Entry Window 1:prepare() : Order 5:needToReorder() 2*:prepare() Macallan line : Order Line 3:check() 4:[check()==true]remove() Macallan stock : Stock Item 4:[check()==true]new 6::new : Delivery Item : Reorder Item - 27 -
Samarbetsdiagram: exempel - 28 -
Dynamisk modell - metodik Identifiera användningsfall Gör ett eller flera scenarior. Identifiera händelser. Rita ett händelseflöde. Skapa ett händelseförlopp för varje scenario. Identifiera tillstånden i händelseförloppen. Skapa sekvensdiagram. - 29 -
Exempel: telefonsamtal Scenario uppringande part (U) lyfter luren rington börjar u slår 6 rington slutar u slår 2 u slår 7 u slår 7 uppringda telefonen (M) ringer uppringningston hörs hos U M svarar M slutar ringa uppringningston upphör hos U telefonerna är anslutna M lägger på telefonerna är inte anslutna U lägger på - 30 -
telefonsamtal forts Sekvensdiagram U lyfter luren U öppna linjen Telfonlinje M rington på slå(6) rington av slå(2) slå(7) slå(7) uppringningston på telefon ring M svarar telefonerna anslutna M lägger på U lägger på ton av bryt anslutningen ringning sluta bryt anslutningen - 31 -
Konstruktion av dynamisk modell lysdiod detektor mottagare siren lås sändare Larmet aktiveras av en signal från sändaren. Bilen låses och lysdioden börjar blinka. Nästa signal deaktiverar larmet. Bilen låses upp och lysdioden släcks. När larmet är aktiverat kommer en signal från detektorn att sätta igång sirenen. Lysdioden övergår till fast sken. Sirenen ska tystna efter 3 sekunder. Larmet ska dock fortfarande vara aktiverat, och lysdioden ska fortsätta lysa med fast sken. Man ska kunna deaktivera larmet även när sirenen tjuter. - 32 -
Billarm - objektmodell Transmitter Receiver Detector Siren Alarm LED Lock - 33 -
Billarm - scenario Mottagaren tar emot signal från sändaren. Dörrarna låses, lysdioden börjar blinka. Mottagaren tar emot signal från sändaren. Dörrarna låses upp, dioden släcks. Mottagaren tar emot signal från sändaren. Dörrarna låses, lysdioden börjar blinka. Detektorn känner av vibrationer. Sirenen börjar tjuta. Dioden går över till fast sken. Sirenen slutar tjuta. Mottagaren tar emot signal från sändaren. Dörrarna låses upp, dioden släcks. Mottagaren tar emot signal från sändaren. Dörrarna låses, lysdioden börjar blinka. Detektorn känner av vibrationer. Sirenen börjar tjuta. Dioden går över till fast sken. Mottagaren tar emot signal från sändaren. Sirenen slutar tjuta, dörrarna låses upp, dioden släcks. - 34 -
Billarm - händelsflöde Receiver transmission Transmitter Detector transmission vibration Siren on, off Alarm flash, steady, out LED lock, unlock Lock - 35 -
Billarm - händelseförlopp receiver detector alarm lock siren LED transmission lock flash transmission unlock out transmission lock flash vibration on steady off transmission unlock out transmission lock flash vibration on steady transmission unlock off out - 36 -
Billarm - larmtillstånd receiver detector alarm lock siren LED transmission lock flash Active transmission unlock out Inactive transmission lock flash Active vibration on steady Sounding off Active transmission unlock out Inactive transmission lock flash Active vibration on steady Sounding transmission unlock off out Inactive - 37 -
Billarm - diodens tillstånd receiver detector alarm lock siren LED transmission lock flash Flashing transmission unlock out Out transmission lock flash vibration Flashing on steady off Steady transmission unlock out Out transmission lock flash vibration on steady transmission unlock off out - 38 -
Billarm - tillståndsdiagram Inactive entry/unlock, out exit/lock, flash Alarm trans- mission transmission transmission Sounding entry/on, steady exit/off do/ wait 3s Active vibration LED Out flash out Steady do/ light Flashing do/ flash steady out - 39 -