|UML Distilled / Martin Fowler, with Kendall Scott|
|Reviewed by Tal Cohen||Saturday, 06 March 1999|
Well, almost. While UML is a remarkably clear and easy to learn notation language (much more so than many of the languages it intends to replace), it still has its subtleties. And Fowler does a fantastic job of pointing them out.
There are several distinct advantages to this book over any other UML guide. First, it is not written as a specification: it’s written as a practical guide. Second, the clear language and the examples are well defined. But perhaps most important are Fowler’s advices, that are not part of the UML language but tell you how to use it practically. Fowler knows what works and what doesn’t, and he’s not shy of pointing out UML’s weak points (and the workarounds he had developed).
Another refreshing point about the book is its size. It seems that contemporary computing books sell by weight: the fatter, the better. Monster books written by half a dozen authors with huge margins, tons of screenshots and no consistency whatsoever seem to be the standard. UML Distilled is less than 200 pages long: short, concise, and useful.
An important observation included in the book, which is not part of the UML standard, is the “perspective” aspect of class diagrams. A class diagram, according to Fowler, can have one of three points of view: conceptual, specification, or implementation. “Understanding perspective”, Fowler writes, “is crucial to both drawing and reading class diagrams.” He goes on to note that the lines between the three perspectives are not always sharp; and yet, merely being aware of the concept can make you a much better user of UML.
Apart from teaching UML (and how to use it), the book also covers object-oriented methodology in general. It was most refreshing, for example, to see a “sidebar” about Bertrand Meyer’s Design by Contract (with a pointer to Meyer’s book Object Oriented Software Construction, reviewed here).
Alas: while the book itself is very good, UML (especially the class diagrams notation of version 1.2) still has some noticeable shortcomings. Chief of these is the inability to specify, in a class diagram, when instances one class create instances of another. There’s also no way of specifying if a method is static or abstract. To realize how useful these three seemingly marginal features of a class diagram can be, check out the class diagrams in Design Patterns (reviewed here). Most of them use at least one of these features, and in some cases the diagrams would be meaningless without them. (This is especially true of the notation for marking instance creation, when it comes to creational patterns.)
Also disappointing are UML’s state diagrams, which, while obviously based on David Harel’s state diagrams, are merely an incomplete subset.
But once again: these are problems with UML, not with UML Distilled. If you need, or want, to learn UML, I know of no better place to start.
Note: The second edition of UML Distilled covers UML version 1.3, which addresses most of these minor issues. The third edition (published in 2003) covers UML 2.