Model-driven development uses precise, complete, and executable models as the central artifacts in software development. Technology-independent models can be directly interpreted or used to generate code. The Unified Modeling Language enables model-driven development by supporting the modeling of structure with classes and relationships, dynamics with state machines, and behavior with action semantics - a textual notation for specifying the behavior of basic modeling elements like actions, activities, and data flows.