  The UML allows us to specify models in a precise, complete and unambiguous
manner. In particular, the UML addresses the specification of all important
decisions regarding analysis, design and implementation. Although UML is not a
visual programming language, its models can be directly connected to a vast
variety of programming languages. This enables a dual approach to software
development: the developer has a choice as to the means of input. UML can be
used directly, from which code can be generated; or on the other hand, that
which is best expressed as text can be entered into the program as code. In an
ideal world, the UML tool will be able to reverse-engineer any direct changes
to code and the UML representations will be kept in sync with the code.
However, without human intervention this is not always possible. There are
certain elements of information that are lost when moving from models to code.
Even then, there are certain aspects of programming language code do seem to
preserve more of their semantics and therefore permits automatic
reverse-engineering of code back to a subset of the UML models.
