270 likes | 402 Views
Meer over Toestandmachine en Activiteitdiagram in UML. Meer over de semantiek van basiselementen van TM en AD van UML (er zijn elementen en aspecten die niet door deze slides gedekt zijn). Bronnen. Arlow en Neustadt, UML 2 and the Unified Process, 2005.
E N D
Meer over Toestandmachine en Activiteitdiagram in UML Meer over de semantiek van basiselementen van TM en AD van UML (er zijn elementen en aspecten die niet door deze slides gedekt zijn)
Bronnen • Arlow en Neustadt, UML 2 and the Unified Process, 2005. • UML Spec van 2.2, 2009 Object Management Group www.omg.org
UML • Een groot “taal” . De basis concepten zijn meestal intuïtief, maar er zijn ook allerlei details… • Staat beschreven in de officiële definitie van UML (UML spec), hoewel het niet echt “toegankelijk” is … Handel bestelling af • Het heeft geen beginknoop, is dat ok? • Van wie is de “v” ? • Is eindknoop goed? Bestelling [v < k ] bestel check voorraad lever af
TM vs AD • Gebruik je TM of AD? • Beide om de dynamiek/gedrag van je “module” te beschrijven • AD om te modeleren hoe een functionaliteit door een samenstelling van “acties” gerealiseerd kan worden. groot verschil tussen UML 1 en 2! • TM om te modeleren hoe een module op extrene events moet reageren. Hoe maakt een gebruiker van een Senseoaparaat koffie ? Hoe een eenSenseoaparaat werkt.
TM vs AD • Beide om de dynamiek/gedrag van je “module” te beschrijven. • De concepten van TM en AD bestonden al voor UML • Even expressief, maar de perspectieven zijn heel anders omdat de semantiek heel anders zijn!
Reactief “systeem” • Een systeem die op “events” (externaal of internaal) wacht en daarop reageert. • Het concept van “toestand” is essentieel: • Het hoeft niet te termineren. • Reactief object een object die een reactief systeem implementeert open sluit entry/ x++
Context van TM • Je kunt TM gebruiken om de flow van een usecase of de algoritme van een operatie (visueel) te modeleren. • TM is natuurlijk om het reactieve gedrag van een object te modeleren, dus in de context van een klasse. Naam van TM, hier impliciet ook de naam van de klasse die de TM beschrijft Deur De TM ziet dus de attributen van (een object van) Deur. open sluit entry/ x++ x is een attribuut van Deur.
Toestand • UML-TM is heel uitgebreid. • In een toestand of een overgang mag je ook extra aspecten beschrijven. . • De exacte volgorde van deze acties en activiteit is een beetje ingewikkeld. naam van de toestand Gesloten entry/ actie exit/ actie do/ activiteit atomisch niet atomisch
Werkschema van een toestand S entry/ actie exit/ actie do/ activiteit • Een toestand wordt door een overgang geënterd de toestand wordt actief. • Entry-actie is uitgevoerd. • De do-activiteit begint, als het klaar, dan is de toestand ook “klaar”. • Een event kan echter een uit-overgang laten afvuren, voor de toestand klaar is. De do-activiteit wordt dan geïnterrumpeerd. • De exit-actie is uitgevoerd. • De toestand is verlaten, en is niet meer actief.
Overgang bestelKoffie , bestelThee [ water < 50 ] / “display foutmelding” S T • De overgang vuurt af als: • S actief is, en: • een van de events treedt op, en: • de guard van de overgang geldt • (voor eenvoud, neem ik gewoon aan dat de keuze over de uit-overgangen van S deterministich is) • Bij het afvuren : • S wordt eerst verlaten, en dan: • de actie van de overgang wordt uitgevoerd, dan: • T wordt geënterd.
Keuze en merge pseudotoestand texpr1 texpr1 S U S = U texpr2 T T texpr2 merge pseudotoestand T [ d1 ] e [ c && d1] / a T = e [c] / a S S U U e [ c && d2] / a [ d2 ]
Voorbeeld Klok uur min displayMode mode() 12:01 m k z + auto-overgang: gebeurt zodra de brontoestand klaar is. begintoestand Klok mode() / … inc ()/ min++ inc() / uur++ zet() uur_zetbaar min_zetbaar zet() klaar() klaar()
Composiete toestand • Een manier om je TM te structureren, als het te groot wordt. • Ook om parallel gedrag te modeleren. non-orthogonaleCT orthogonale CT heeft parallelle interne “gebieden” gebied (region)
Enteren en verlaten van composiet toestand error CT a S T c b • met event a wordt CT geënterd. De gebieden starten op respectievelijk begintoestanden, en draait vervolgens parallel. • met event b wordt CT geënterd. Gebied-2 begint meteen in S. Gebied-1 begint in zijn begintoestand. • event error forceert dat CT verlaten wordt, ongeacht in welke toestanden de gebieden zijn. • CT is klaar als beide gebieden klaar zijn; de auto-overgang (rood) verlaat vervolgens C. • op event c kunnen we direct uit toestand T van gebied-2 CT verlaten. Gebied-1 wordt getermineerd, op zijn toestand op dat moment.
Werkschema e CT entry / a exit / b U exit / f T entry / e a • Als T uit buiten de CT geenterd wordt, wordt eerst de entry-actie van S uitgevoerd, en dat T. • Als we van U de CT verlaten, wordt eerst de exit-actie van U uitgevoerd, en dat die van CT. • Analoog als de nesting van CT dieper is.
Voorbeeld Klok uur min displayMode mode() 12:01 m k z + Klok entry/knipper “:” exit/ontknipper “:” inc / min++ mode / … inc / uur++ uur_zetbaar entry/knipper uur exit/ontknipper uur min_zetbaar entry/ knipper min exit/ … zet zet klaar zet entry/wacht 5min
Activiteit diagram • Een activiteit is een “programma” van acties (het specificeert in welke volgorde de acties uitgevoerd worden). • AD is een diagram om een activiteit te beschrijven. • Goed om een “berdrijfsactiviteit” of een “operatie” te modelleren actie … elementair, kan een activiteit aanroepen, niet atomisch Handel bestelling af Bestelling [te weinig] bestel input parameter check voorraad [genoeg] lever af
Waar gebruik je een AD? Shop check_voorraad(bestelling) handelaf(bestelling) Use case : handel bestelling af Primaryactor: Klant Mainflow: Handel bestelling af Bestelling [te weinig] bestel check voorraad [genoeg] lever af AD kun je gebruiken om de flow van een use case te beschrijven, of de algoritme van een operatie/methode van een klasse te beschrijven.
“Actieviteit” knoop • Staat voor een actie • Je mag informeel beschrijven wat de actie doet. • Als de AD concreter moet zijn, kun je ook, bijvoorbeeld: • operaties van je context aanroepen • attributen van de context aanpassen • Of, je kun ook een andere activiteit “aanroepen” een manier om een complexe AD hiërarchisch te structureren.
Waaneer vuurt een actie af? • Token semantiek • Een actie vuurt af als er een token is op alle inputlijnen, en de preconditie van de actie is waar. De tokens worden geconsumeerd. • De actie is uitgevoerd. Als het klaar is, plaatst het een token per outputlijn. dus impliciet fork inherent concurrentie! • De actie is dan klaar. • Controle lijn draag controle tokens over. • Object-flow lijn draagt objecten over token met data • Object-knoop is een buffer van objecten. <<localPrecondition>> … <<localPostcondition>> … actie A C controle lijn D Bestelling Bevestiging object-flow lijn objectknoop actie A Bestelling Bevestiging alternatieve notatie met pins
Lijn (edge) • Een lijn transporteert tokens controle en data tokens • Data tokens zijn objecten, geproduceerd “via” object knoop, of “pin” C A Product D B • Impliciet moeten A en B objecten van klasse Product produceren. • De Product-knoop is een buffer van Product-objecten. Elke inkomende product word in de buffer geplaats. • Elke uitlijn neemt een object uit een buffer, als die niet leeg is (met name, objecten worden niet gedupliceerd op de uitlijnen)
Controle knopen [ conditie-1] B B D A C C [ conditie-2] beslissingknoop: geeft de token door aan een van de uit-lijnen, op basis van de condities. merge-knoop: geeft inkomende token door naar de uit-lijn. B B A D C C jointknoop: wacht tot er een token op ieder in-lijn, en plaats vervolgens een token op de uitlijn. vorkknoop: dupliceert inkomende token naar alle uitlijnen.
Initialisatie A B A B A B Activiteit begint met A In beide situaties, activiteit begint met A en B tegelijk A B A B Activiteit begint met A, als object tokens aanwezig in beide inputpins (UML is hier minder duidelijk) Activiteit begint met B, als object tokens aanwezig in beide inputpins. Tegelijk zal A ook afvuren.
Terminatie A B U V B begint als V klaar is. AD is inherent concurrent! A A B B order order U V U V B begint als U klaar is. Parallel kan V nog bezig zijn. Het kan dus ook zo…
Terminatie A B AD is inherent concurrent! U V Let op dat terminatieknoop een harde-stop is ! Het termineert de hele activiteit. Dus als U nog bezig is, het wordt gestopt. A A B B order order U U V V Dit is waarschijnlijk niet wat je wil (vermoedelijk fout gebruik van terminatieknoop) Waarschijnlijk is dit wat je bedoelt…
Swimlanes A B F C D E Anders dan bij gebieden in TM, hebben swim lanes geen speciale betekenis, omdat AD is al concurrent.
That’s all folk! Good luck with the exam!