UML 3 dilemmas
I’m back from the OMG meeting in Santa Clara. We talked a lot about the future of UML. Just about everybody is agreed that we need to create UML 3, but there are some real practical dilemmas. Currently UML is complicated and it can take a lot of expertise to apply it successfully to any particular situation: “Jack-of-all-trades and master of none”. OO class modelling is its original domain, but since then it has been bent to apply to many situations including business modelling, requirements, executable models for real time systems, and as a basis for new languages such as SysML. But even when applied to OO modelling it is not a particularly good fit to any particular OO programming language: C#, C++, and Java are all poorly represented using “vanilla” UML class diagrams.
The way to resolve this is to build a flexible kernel of very fundamental concepts, and provide rich features for extension into multiple domains. The kernel should make as few semantic commitments as possible: for example, no commitment to the meaning of visibility, no distinction between “structural” and “behavioural” features of a classifier, flexible concepts of parameterization, and so on. For backwards compatibility, existing UML can be defined through one or more profiles or viewpoints on this kernel, which will also enable extensions into many new domains and better matching to existing domains.
The main dilemma is that constructing such a kernel may not carry sufficient business value to get it adopted on its own. There is a lot of investment in UML as it is, and we need to do enough of UML 3 that the new features provide compelling value. Customers tell me that they would really value deep integration of UML with managed and native code, Entity Framework, Windows Workflow Foundation and other aspects of our platform. That’s a good incentive for me: define UML 3 so that a first class .Net Profile for UML can be deeply integrated into our tools. I’ll expect other stakeholders to be able to do the same for their platforms, programming and modelling languages.