Das heikelste Thema in der UML ist die Code-Generierung. Seltsamerweise werden die Code-Generatoren von Tools wie Matlab-Simulink akzeptiert. Auch Compilern vertraut man blind. Nun sollte man aber eines Wissen: Bei guten UML-Tools kann man den Code-Generator zu 100 % kontrollieren und verliert daher nicht die Kontrolle über den generierten Code.
Die UML definiert zwar nicht von Hause aus unterschiedliche Ausprägungen von Klassen, jedoch hat man die Freiheit, mit Hilfe von Stereotypen unterschiedliche Implementierungen zu ermöglichen. Klassen können mehrfach instanziiert werden; so kann die gleiche Funktionalität wieder verwendet werden. Dieses Konzept wird oft nicht richtig verstanden, weil man das mit dynamischer Speicherverwendung gleichsetzt. Das ist aber nicht notwendigerweise der Fall. Mit Hilfe von Files kann man herkömmlichen C-Code abbilden (Bild 4). Files sind Container für Typ-Definitionen, Variablen und Funktionen. Somit existiert kein Unterschied zu handgeschriebenem Code.
Klassen sind in Sprachen wie C++ oder Java bereits vorhanden. In C werden diese als Strukturen abgebildet. Die Attribute einer Klasse bilden die Attribute der Struktur (Bild 5). Eine Instanz der Struktur wird an die Funktionen übergeben. Diese entspricht dem this-Pointer aus C++.
Manche Dinge lassen sich nur mit viel Aufwand in der UML darstellen. Die beliebten Präprozessor-Anweisungen für Varianten-Handling gehören dazu. Mit einer etwas anderen Struktur lässt sich das Problem aber viel eleganter und ohne Präprozessor-Anweisungen lösen.