Selle näite raames transleerime klassikalise töövooskeemi korrektseks UML tegevusdiagrammiks. Esmalt alusta sellest, et tutvud pakutava skeemiga ning leiad üles kõik 4 võimalikku tulemust.
Kuna tegu on juba töövoogu kirjeldava skeemiga, siis saame kohe alustada olemasolevate komponentide asendamist standardiseeritud UMLi märgenditega.
Mõtle skeemi vaadates läbi järgmised asjad:
- Kus asetsevad tingimused? Tegu võib olla näiteks küsimustega, millele saab vastata jah või ei. Vaste UML decision node.
- Millised neist on tegevused? Vaste UML action statement.
- Kus asub skeemi alguspunkt? Vaste UML start node.
- Kus asub lõpp-punkt? Kas neid võib olla mitu? Vaste UML end node.
- Mõtle läbi mida ei ole vaja UML tegevusdiagrammile panna! Näiteks tegevuste mitte tegemine – kui mida ei tehta, siis ei eksisteeri ka tegevust kui sellist.
Soovitus: enne edasi minekut, joonista valmis enda versioon skeemist ja siis võrdle enda tulemust meie pakutuga.
Olgu öeldud, et seda UML tegevusdiagrammina on siin mitu erinevat lahendust. Enne korrektsete lahenduste näitamist vaatame üle ja selgitame läbi mõned tüüpilised vead.
Sagedased vead
Enne lahenduse vaatamist veendu, et ei teinud ühtegi järgnevatest vigadest.
- Vastused “Yes” ja “No” ei ole tegevused. Tegevuskasti (action state) saame paigutada tegevusi (vastab küsimusele mida teeb?). Need on vastused küsimustele, mille alusel otsustatakse hargnemine.
- Puuduv koondumine – Kui mitu voogu üheks koonduvad tuleb need liita kasutades elementi merge node. Merge node puudumisel saab kasutada ka elementi decision node. Kindlasti ei tohi kasutada join node’i. Seda tohib kasutada vaid paralleeltegevuste sünkroniseerimiseks.
Lahendus
Järgnevalt pakun välja ühe võimalikest korrektsetest lahendustest.
Variatsioonid
Nagu oli öeldud, siis sellel algoritmil on mitmeid erinevaid korrektseid lahendusi. Toon välja mõned võimalikud muudatused
- Algoritmil võib olla 3 erinevat lõppu – üks, kus ei tehta midagi, teine kus kasutatakse WD40 ning kolmas, kus kasutatakse teipi. Kusjuures lõpule, mille puhul ei tehta midagi, peab eelnema koondumine. Oluline on kõik lõpud kommenteerida näitamaks miks on üks lõpp erinev teisest (nt lõpu kommentaar: “Objekti liikuma saamiseks kasutati WD40).
- Küsimused nagu “Does it move?” jt ei asu kommentaarikastides, vaid on asendatud otseste vastustena noolte (control flow) peal. Näiteks esimese hargnemise puhul oleksid nooltel väited “The object moves” ja “The object does not move“.
- Küsimused võivad olla täiendavalt tegevusena välja toodud – nt “Ask if the object moves”. Sellise küsimuse esitamine tegevusena ei tähenda, et seda tohib tingimuse osast eemaldada! Tegu täiendava lisana skeemile, mis pakutud lahenduses on välja võetud kui liiasus.