Today, a software architect almost always uses some sort of system modeling tool to graphically represent the architecture of a software system. One of the more common modeling languages in use today is the Unified Modeling Language, or UML. UML is an industry-standard language for specifying, visualizing, constructing, and documenting a software system. With UML, a system architect creates a "blueprint" for construction (design and coding) of the system. UML was created by Grady Booch, Ivar Jacobson, and Jim Rumbaugh of Rational Software. UML represents a collection of "best engineering practices" that have proven successful in the modeling of large and complex systems.
Just as good blueprints are important for constructing an office building, having a model of your software system before you actually start writing code is equally important. For starters, having a good model written in a common modeling language helps foster communication among the project team. Having a model helps you decompose complex software systems into individual pieces that are easier to comprehend. The importance of your software model thus becomes more important as the complexity of your system increases .
The UML consists of:
Model elements fundamental modeling concepts and semantics
Notation visual rendering of model elements
Guidelines idioms of usage within the trade
In designing UML, its developers consolidated a set of core modeling concepts that were used across many existing methods and modeling tools. These concepts are needed in most large projects. In addition, UML provides extensibility and specialization mechanisms to extend its core concepts.
UML is programming language and development tool independent. Many vendors besides Rational Software provide UML tools. Rational's UML modeling tool, discussed in Chapter 15, is called Rational Rose. UML includes a set of high-level development concepts such as collaborations, frameworks, patterns, and components which allow easy exchange of UML models between compliant tools. UML is also software process independent. While UML was certainly designed with object-oriented software architecture in mind, in can also be used to model non object-oriented applications.
In terms of the views of a model, the UML defines the following graphical diagrams:
For a complete set of example diagrams see: http://www.rational.com/products/rose/features.html.
These diagrams provide multiple perspectives of the system under analysis or development. The underlying model integrates these perspectives so that a self-consistent system can be analyzed and built. These diagrams, along with supporting documentation, are the primary artifacts that a modeler sees, although the UML and supporting tools will provide for a number of derivative views.
UML includes features to support modeling of a wide range of modern software techniques, including extensibility mechanisms: stereotypes, tagged values, and constraints; threads and processes; distribution and concurrency (e.g., for modeling ActiveX/DCOM and CORBA); patterns and collaborations; activity diagrams (for business process modeling); refinement (to handle relationships between levels of abstraction); interfaces and components; and a constraint language. Any software architect today who is designing large, complex systems must use a modeling language like UML.