UML For The C Programming Language
UML For The C Programming Language
White paper
June 2009
Executive summary
Contents
Unified Modeling Language (UML) has been highly successful in the modeling
of software-intensive systems, including systems-oriented models and realtime
2 Executive summary
and embedded designs. The most common implementation for these models
3 FunctionalC UML profile
has been C++, with the C language in second place. On one hand, this is
4 Functional development
surprising because the most common implementation language for realtime
within UML
and embedded systems overall by far is the language C. On the other hand,
FunctionalC diagrams
UML is used almost exclusively for object-oriented systems development, and
Validating the design using
most realtime and embedded designs are functionally oriented.
the model
Generating code from the model
There are three strategies for using UML for developing C realtime and
12 Ensuring that the model and the
embedded applications:
code are always synchronized
12 Conclusion
• Object-oriented modeling
• Object-based modeling
• Functional-based modeling
Object-oriented modeling, Object-oriented modeling uses the full richness of UML to represent the system
object-based modeling and and then forward-generates C code. This is straightforward, and the only tricky
functional-based modeling vary aspect of this is the mapping of the truly object-oriented features of UML into C
in how completely they use the code. There are some common idioms that make this transformation simple:
power and richness of UML. Classes become structs containing data elements and pointers to “member”
functions; generalization is implemented by the nesting of the structs
representing the base classes; polymorphic operations are generated by
producing virtual function tables with name-mangled member functions; and
so on.
Object-based designs are even simpler because they don’t use the full richness of
UML; specifically, they disallow the use of generalization and polymorphism. This
results in designs that more directly and obviously map to the C language features
but don’t take advantage of all the conceptual tools available within UML.
UML for the C programming language
Page 3
The last approach, functional-based modeling, is the focus of this paper. There
Highlights are many reasons developers may want to avail themselves of the power of UML
to represent the different aspects of their systems (e.g., functional, behavioral,
interactive and structural) and yet eschew the use of object features completely,
such as:
• The developers may wish to represent legacy C code in models without requiring its
UML can be a powerful tool for re-architecture.
developers who do not use object • The developers may be more comfortable with more traditional C concepts of files,
features in their system designs. functions and variables than they are with classes, operations and attributes.
• The system under development may be safety critical, and safety-critical designs are
more difficult to certify under standards like DO-178B, Software Considerations in
Airborne Systems and Equipment Certification.
A file is a UML stereotype that acts The code generated from the model appears very similar to the structural
as a graphical representation of a coding styles with which C programmers are familiar. The profile represents .c
source file and contains elements and .h files that have the same name and couples them together as one element
familiar to C developers, such as on a diagram called a file. If you do not use the .c and .h file coupling in your
variables, functions and types. code, then we can represent a .c or .h file individually on the diagram. This
means that developers do not need to learn how to do OO design, but can just
bring the concepts that they have always used into the next level of abstraction,
the model. In essence, using the concepts of files, variables and functions in the
model enables C developers to graphically describe their program and generate,
“what you see is what you get” (WYSIWYG) code from the graphics. In addition,
the C developer can simulate the design at the graphical level on the host PC by
executing UML model before going to the target to ensure that the behavior and
functionality are correct.
UML for the C programming language
Page 5
Let’s take the example of a timer file. This file could have the responsibility to
keep track of time. It could have variables such as minutes and seconds, and
perhaps functions such as reset and tick. The reset function could initialize the
variables to zero, and the tick function could increment the time by one second.
In the FunctionalC profile, we can create a simple file diagram such as the
following that shows a single file called “Timer” that has variables minutes and
seconds of type integer, as well as public functions tick() and reset().
Timer <File>
+mins : int +secs : int
-tick():void -Reset():void
The C code for this file would look just as you would expect a typical C program
to look:
This code looks the same as what a C programmer might write, except it was
generated from adding these elements into the diagram above.
Highlights
FunctionalC diagrams
Use case diagrams are a powerful Use case diagrams are used to render coherent sets of requirements (called use
way to organize and manage a cases) and their relations to external elements (called actors). This is the same
system’s requirements. as standard UML and is a powerful way to organize and manage a system’s
requirements.
Highlights
The build diagram represents the artifacts constructed via the compilation and
link process and how they relate to each other.
The call graph shows the relations among functions and variables.
Highlights
A state diagram represents the set of sets achievable by a file (or use case), the events
Highlights it receives and the transitions that occur as a result of those event receptions.
Figure 8: Flowchart.
UML for the C programming language
Page 11
to the code to be “round-tripped” back into the model, helping to ensure IBM, the IBM logo, and ibm.com are trademarks or reg-
istered trademarks of International Business Machines
that the code and the model are in sync at all times. This is so important Corporation in the United States, other countries, or
during the maintenance phase, as well as when features need to be added both. If these and other IBM trademarked terms are
marked on their first occurrence in this information with
to a new version. a trademark symbol (® or ™), these symbols indicate
U.S. registered or common law trademarks owned by
IBM at the time this information was published. Such
Conclusion trademarks may also be registered or common law
The introduction of natural C concepts such as files, functions and trademarks in other countries. A current list of IBM
trademarks is available on the Web at “Copyright and
variables into UML as a profile helps C developers to receive the benefits trademark information” at
of model-driven architecture while thinking and working in the manner ibm.com/legal/copytrade.shtml
to which they are accustomed. Through the process of visualization, it is Other company, product, or service names may be
trademarks or service marks of others.
now possible to incorporate legacy code into the development environment
References in this publication to IBM products and
without changing a single line, enabling C developers to reuse their legacy services do not imply that IBM intends to make them
code (IP), either as is or as a starting point. Generation of production- available in all countries in which IBM operates.
quality structured code directly from the model helps lower risk even The information contained in this documentation is
provided for informational purposes only. While efforts
further by allowing UML and model-driven architecture (MDA) to fit into were made to verify the completeness and accuracy
existing processes. This helps to further reduce the risk involved in of the information contained in this documentation, it is
provided “as is” without warranty of any kind, express or
adopting these technologies and can help cut development time implied. In addition, this information is based on IBM’s
immensely. Many companies have already been doing development with current product plans and strategy, which are subject
to change by IBM without notice. IBM shall not be
UML-based MDA and are finding that they are might be able to reduce the responsible for any damages arising out of the use of,
development cycle substantially in some cases. or otherwise related to, this documentation or any other
documentation. Nothing contained in this documenta-
tion is intended to, nor shall have the effect of, creating
For more information any warranties or representations from IBM (or its sup-
pliers or licensors), or altering the terms and conditions
To learn more about UML for the C programming language, contact your of the applicable license agreement governing the use
IBM representative or IBM Business Partner, or visit: of IBM software.
ibm.com/software/rational
RAW14058-USEN-01