PHP_UML se décompose en 5 packages:

  • le paquetage principal, qui contient la classe publique (PHP_UML) et quelques classes utilitaires
  • le paquetage PHP, qui effectue la lecture et l’analyse de code PHP
  • le paquetage Metamodel, qui contient les structures de données que PHP_UML utilise pour modéliser le code PHP analysé
  • le paquetage XMI, qui contient les classes permettant de sérialiser un métamodèle en code XMI
  • le paquetage Output, qui contient divers outils (des feuilles XSLT en particulier) pour transformer un fichier XMI en un autre format (HTML par exemple)

Vous avez compris le principe : PHP_UML, à mesure qu’il analyse les fichiers PHP, créé une hiérarchie d’objets pour représenter la structure du code rencontré. L’ensemble de ces objets forme un métamodèle.
Une fois que tous les fichiers PHP ont été parsés, PHP_UML procède à une finalisation du métamodèle, en créant tous les liens chaînés nécessaires entre les objets interdépendants (classe héritant d’une autre, classe implémentant une interface, typage explicite dans un paramètre de fonction…)
Puis, PHP_UML sérialise ce métamodèle en XMI à l’aide d’une classe d’implémentation (selon que l’on souhaite du XMI en version 1 ou 2).
PHP_UML peut également appliquer des transformations XSL complexes à des données XMI (celles qu’il a générées lui-même, ou bien celles d’un fichier donné), pour produire une documentation d’API en HTML par exemple, ou des squelettes de code PHP.

En séparant bien les problèmes (analyse du code / production d’un métamodèle abstrait / exploitation du métamodèle produit), on a rendu l’application PHP_UML plus évolutive, et plus facile à maintenir et à réutiliser.