Microsoft have recently started talking about "Domain-Specific Languages", modelling techniques which are aimed at specific tasks. While some DSLs may derive from UML, others may be quite separate from it. This page outlines useful DSLs I have developed or discovered.
In strict UML, components have a dependency on the interfaces of other components, as in the following example:
There are several problems with this notation:
Therefore I've found it useful to extend the UML notation to provide a more complete and intuitive picture, with two main changes:
Remember that content is more important than representation. If you’re modelling to communicate, use models which avoid confusion.
An interesting (ab)use of the UML Use Case diagram is as a DSL to model dependencies between things. Essentially you model each thing using a Use Case shape, and use dependency relationships. The things can be almost anything: modules in a system, systems in an enterprise, or activities in a project or programme. (Strictly speaking, of course, component dependencies should be modelled using a UML component diagram, but I've found it useful to use a "generic" dependency diagram in some cases.)