[UML] Samenhang tussen diagrammen correct?

Pagina: 1
Acties:
  • 165 views sinds 30-01-2008
  • Reageer

  • F-Tim
  • Registratie: November 2003
  • Laatst online: 14-02 11:43
Goede avond mede tweakers,

recentelijk werd mij verzocht om middels een Trein Simulatie voorbeeld aan te geven dat ik een realtime systeem kon weergeven in enkele UML diagrammen. De keuze voor de te gebruiken modellen was vrij, je moest het alleen kunnen verdedigen waarom nu juist deze.

De case is als volgt:
Je hebt een tunnel, aan weerszijden van de tunnel is een ingaand en een uitgaand spoor. Treinen kunnen maar in 1 richting rijden, op elke in/uitgang staat een sensor welke aangeeft dat daar een trein staat, en aan weerszijden van de tunnel is een stoplicht. Vrij simpel allemaal, maar hieronder volgt een plaatje om het eventueel te verduidelijken.
Afbeeldingslocatie: http://img184.imageshack.us/img184/6936/tunnel0fk.png

Nu heb ik gekozen voor een Klassendiagram zoals dit hieronder te zien is. Je kunt duidelijk zien dat er gekozen is voor een scheiding tussen een Embedded systeem en een Simulatie systeem.
Afbeeldingslocatie: http://img230.imageshack.us/img230/2695/klassendiagram5bm.th.png

Om dit te ondersteunen heb ik ook nog gekozen voor een Statechart. Je kunt hierin zien dat de tunnel 3 statussen kan aannemen. TunnelGesloten, TunnelOpenLinks en TunnelOpenRechts, afhankelijk van de status wordt ook een method uitgevoerd, wat ook direct te zien is. Deze wordt slechts 1 maal uitgevoerd, enkel en alleen zodra de status geinitieerd wordt.
Afbeeldingslocatie: http://img230.imageshack.us/img230/5078/statechart1vp.th.png

En nog een Use Case Diagram
Afbeeldingslocatie: http://img386.imageshack.us/img386/6057/usecasediagram1ew.th.png

Ik krijg echter het gevoel dat ik de samenhang tussen de diagrammen mis, en of dat mijn diagrammen incompleet zijn. Een voorbeeld hiervan is bijvoorbeeld bij het Statechart diagram. Als de tunnel de status TunnelOpenLinks heeft, en sensor 2 voor de andere kant getriggerd wordt, hoe ik dan kan weergeven dat de Tunnel eerst wacht tot de tunnel gesloten is, (dus alle treinen eruit zijn) en dan pas de tunnel weer vrij geeft?

Tot slot heb ik ook nog 3 Use Case Beschrijvingen gemaakt, om het een en ander nog tekstueel te verhelderen.

TunnelOpenRechts
Actoren: Sensor 1
Preconditie: Tunnel status is TunnelGesloten
Beschrijving:
1. Sensor 1 geeft een puls
2. Simulator stuurt een SendEventTunnel
3. GUI ontvangt SendEventTunnel, en stuurt deze naar Tunnel
4. Tunnel bepaalt de nieuwe status en stuurt deze naar de GUI met SendTunnelState
5. GUI stuurt de SendTunnelState naar de Simulator
6. Simulator voert StoplichtRGroen uit
Postconditie: Tunnel status is OpenTunnelRechts

TunnelOpenLinks
Actoren: Sensor 2
Preconditie: Tunnel status is TunnelGesloten
Beschrijving:
1. Sensor 2 geeft een puls
2. Simulator systeem stuurt een SendEventTunnel
3. GUI ontvangt SendEventTunnel, en stuurt deze naar Tunnel
4. Tunnel bepaalt de nieuwe status en stuurt deze naar de GUI met SendTunnelState
5. GUI stuurt de SendTunnelState naar de Simulator
6. Simulator voert StoplichtLGroen uit
Postconditie: Tunnel status is OpenTunnelLinks

TunnelSluiten
Actoren: Sensor 3 óf Sensor 4
Preconditie: Tunnel status is OpenTunnelLinks óf OpenTunnelRechts
Beschrijving:
1. Sensor 3 óf 4 geeft een puls
2. Simulator stuurt een SendEventTunnel
3. GUI ontvangt SendEventTunnel, en stuurt deze naar Tunnel
4. Tunnel bepaalt de nieuwe status, en stuurt deze naar GUI met SendTunnelState
5. GUI stuurt SendTunnelState naar Simulator
6. Simulator voert StoplichtLRood uit
7. Simulator voert StoplichtRRood uit
Postconditie: Tunnel status is TunnelGesloten

Indien iemand hier met voldoende UML kennis aanwezig is om me op de goede weg wil helpen zou ik hem/haar zeer dankbaar zijn. Ook als iemand me kan zeggen welke diagrammen ik eventueel nog extra kan maken om het hele verhaal te ondersteunen zal ik me hier eens in verdiepen. Ik wil namelijk wel een goed voorbeeld neer te zetten waarmee ik ook kan aantonen dat ik met UML kan omgaan, en dat áls ik iets fout doe, dat ik ook snap wát er precies fout gaat in mijn gedachtengang.

Gracias alvast :)

Wanna play?


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

In je statechart hou je onvoldoende rekening met de queues aan elke zijde. Als er een wachtrij is aan de linkerkant en de rechterkant heeft lang genoeg op groen gestaan, dan moet links groen krijgen. Als er echter niks staat te wachten kan rechts groen blijven houden tot er aan de andere kant een trein staat te wachten. Je zal dus wat extra states moeten opnemen.

Je klassenmodel zou ik ook heroverwegen. Je hebt alleen een GUI, een Tunnel en een Simulator. Je kan het beter iets generieker aanpakken. Aangezien ik dezelfde opdracht heb gehad mag je mijn modellen wel inzien:
Klassendiagram
Collaboratiediagram
STD analyse-fase
Implementatiemodel van het STD
Let wel, oude modellen, ik zou ze momenteel waarschijnlijk deels anders aanpakken.

Overigens zijn use case diagrammen zoals die wat jij gemaakt heb vrij trivaal en dus betekenisloos. En dat zal meneer Wauben je ook vertellen. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.