Je pense que le diagramme de classe devrait toujours être utilisé pour documenter le code. Je ne pense pas que si vous regardez directement le code, vous pouvez voir l'architecture complète. Je conviens que si vous avez écrit le code vous-même ou que vous y travaillez depuis longtemps, vous pouvez comprendre, mais chaque fois qu'une nouvelle demande survient chaque fois que vous devez consulter le code et rechercher où ajouter ce nouveau code.
Ce que nous faisons dans notre entreprise, c'est d'avoir des vues de diagrammes de classes de notre projet. Nous ne passons pas vraiment de temps à modéliser mais utilisons uniquement le diagramme de classes pour visualiser le code après une rétro-ingénierie. Si le code change, il existe un mécanisme de fusion et mes diagrammes de classes sont toujours mis à jour.
Ce qui est fantastique, c'est de pouvoir ajouter des commentaires, des contraintes dans le diagramme en plus de java doc. Nous inversons le projet, puis créons un modèle et finissons par extraire des vues du modèle affiché sous forme de diagrammes de classes UML. Je ne code pas à ce stade, mais j'obtiens une impression bleue de l'architecture de code et je travaille dessus pour créer ou étendre mon architecture actuelle. Si je l'aime, j'appuie sur un bouton et mon code existant est fusionné avec mes diagrammes. Je veux dire la fusion et certainement pas la génération de code complète. Seul le delta entre le code existant et mes diagrammes est écrit, pas le code complet à chaque fois.
J'étudie depuis de nombreuses années, j'ai un master et je code toujours, mais je ne veux pas seulement être un écrivain java et j'aimerais utiliser mon cerveau un peu plus. Les vues UML me donnent ce dont j'ai besoin pour réfléchir à mon architecture, communiquer avec les autres membres de l'équipe et créer une meilleure architecture sans utiliser le développement piloté par modèle, mais uniquement le delta entre le code écrit manuellement existant et créer graphiquement des diagrammes de classes. Je crée mon architecture au niveau du code, puis je l'inverse et regarde le modèle. Je crée des vues et j'essaye d'améliorer mon architecture directement dans le code, puis j'inverse à nouveau et je vois ce qui est fait etc ... C'est une itération permanente sans génération de code pilotée par le modèle mais synchronisation en direct ou fusion entre code et UML. Ce que j'aime, c'est que le code pilote l'UML et certainement pas le contraire.