I’d like to explore the idea that UML could be made more useful to mainstream developers if it were redesigned so that a UML model could directly represent the semantics and terminology of modern programming languages.  For example, if you are working in C#, instead of having Attributes and Operations in your class diagram, you would be offered Fields, Properties, Methods and Events.  Instead of Features you would see Members.  You’d be able to see direct representations of delegates, lambda expressions, constants, variables, and blocks.  Instead of Packages you would see Namespaces and, separately, Assemblies.  All of this would be fully integrated across structural (class, package, component) and behavioural (sequence, activity, state) diagrams.  In a heterogeneous world you’d be able to define models of your systems at a large scale independently of implementation technology, and be able to drill into the detail of particular technologies for different elements of your system.   There would be diagrammatic counterparts for scripting languages and web development technologies.

What do you think?  Tell me your experiences.