Designing Concurrent, Distributed, and Real-Time Applications with UML