After reading this:
Note: Speaking of modeling, I don't think UML is adequate to express first class abstractions. The reason is this. UML defines a set of fixed models (like class diagrams, sequence, activity, state etc) and a limited extension mechanism (such as stereotyping etc). Now to model first class abstractions for compiler such as Lex analyser or parser, one has to use one of the static models to express these concepts. It is like you are starting from implementation (like class diagrams) and going up the abstraction level (like stereotyping) to define the higher level abstractions. I believe, that is not the optimal way to do things. In essence, premise behind UML is that any model can be reduced or derived from the set of core models UML provides. I think this approach will not work and that's precisely the reason, folks are finding UML so difficult to use in practical scenarios.
Makes you think that we are only in the begining of understanding how to do things right, like don box said at the PDC, we are at 1987 comparing SOA to OO.