Советую Sparx Systems Enterprise Architect. Функционал позволяет не только строить диаграммы, описанные в спецификации UML, но и выполнять кодогенерацию. Также возможен обратный процесс: из кода получить диаграммы, что полезно при анализе уже написанной системы.