I am coming from an Ada background, but daily live in Java business apps now.
Ada is good OO, but requires one leap to get to code. Java has 99% matching of UML constructs to language constructs (UML still uses "variable : Type"), and this can be a huge deal for people learning OO.
The biggest advantage of UML is when you are dealing with programmers barely qualified to write the code, much less design as system, much less provide solid architectural decisions. I am a fighter for less diagrams that represent what happens in code and more for why it happens in code, but often the approach is to create documentation that would let a true 'coder' take the diagram and draw out code. At that level of thinking, there is no need for a big picture, just how do I implement this single use case.
Is this right? Sure, if you have a bunch of 35-40K coders who learned Java (only) at community college following the lead of a handful of senior architects. It is really no more rigorous than 'coding' the entire module in pseudo code comments before implementing the actual code, which was a common practice at my former employer, a nearly 100% Ada house.
This is one of my biggest challenges between R/T embedded and business apps, but living in Chicago, I don't have much other option, plus it is hard to make a law suit for someone dying while viewing a web page 8).