Académique Documents
Professionnel Documents
Culture Documents
u Préciser les différences sémantiques entre modèle UML (partie diagramme de classes)
et code (Java)
Concepts communs à UML et aux langages de programmation qui n’ont pas le même sens
u Héritage
u En Java, uniquement de l’héritage simple
u En UML, héritage multiple autorisé
u Types de base
u Java : langage de programmation donc types de bases nombreux (byte, short, int, long, float, double,
boolean, char + autres types définis dans l’API+ types énumérés
u UML : langage de modélisation
u pas besoin d’un système de typage aussi fin que dans un langage de programmation
u peu de types de base: integer, string, boolean, char, real
Le reverse engineering (1)
Reverse Engineering
Règles de correspondance du reverse
engineering de Java vers UML (1)
1. A toute classe Java doit correspondre une classe UML portant le même nom que la classe Java.
Etudiant
class Etudiant {
}
Règles de correspondance du reverse
engineering de Java vers UML (2)
2. A toute interface Java doit correspondre une interface UML portant le même nom que
l’interface Java.
IEtudiant
interface IEtudiant {
}
Règles de correspondance du reverse
engineering de Java vers UML (3)
3. A tout attribut d’une classe Java doit correspondre une propriété appartenant à la classe UML
correspondant à la classe Java. Le nom de la propriété doit être le même que le nom de l’attribut.
Le type de la propriété doit être une correspondance UML du type de l’attribut Java. Si l’attribut
est un tableau, la propriété peut avoir plusieurs valeurs (en fonction de la taille du tableau).
Etudiant
class Etudiant {
int numero; numéro: integer
nom: string
String nom;
Cours cours[]; cours: Cours[*]
}
Règles de correspondance du reverse
engineering de Java vers UML (4)
4. A toute méthode d’une classe Java doit correspondre une opération UML appartenant à la
classe UML correspondant à la classe Java. Le nom de l’opération UML doit être le même que celui
de l’opération Java. Pour chaque paramètre de l’opération Java doit correspondre un paramètre
UML de même nom, dont la direction est in et dont le type est le type UML correspondant au type
du paramètre Java.
class Etudiant {
String getNom() { Etudiant
//CODE
}
void setNom(string nom) getNom():string
{ setNom(in nom: string)
//CODE
}
}
Règles de correspondance du reverse
engineering de Java vers UML (5)
5. Si une classe Java appartient à un package Java, ce dernier doit correspondre à un package
UML correspondant au package Java qui doit contenir la classe UML correspondant à la classe
Java.
6. Si une classe Java importe un package Java, ce dernier doit correspondre à une relation
d’import entre le package UML de la classe UML correspondant à la classe Java et le package
UML correspondant au package Java importé.
class Etudiant {
}
Règles de correspondance du reverse
engineering de Java vers UML (7)
7. Si une classe Java hérite d’une autre classe Java, les classes UML correspondantes doivent avoir
elles aussi une relation d’héritage UML (appelée aussi généralisation).
Personne
Etudiant
Règles de correspondance du reverse
engineering de Java vers UML (8)
8. Si une classe Java réalise une interface, la classe UML correspondante doit aussi réaliser
l’interface UML correspondante.
IEtudiant
Etudiant
Règles de correspondance du reverse
engineering de Java vers UML (9)
9. Si une méthode Java possède un code de traitement, alors une note UML contenant ce code
doit être attachée à l’opération UML correspondant à l’opération Java.
class Etudiant {
return this.nom;
String getNom() { Etudiant
return this.nom;
}
void setNom(String nom)
{ getNom():string
setNom(in nom: string)
this.nom = nom;
} this.nom = nom;
}
Règles de correspondance du reverse
engineering de Java vers UML (10)
Nous pouvons considérer qu’il est possible de construire une association dans le modèle UML plutôt
qu’une propriété lorsqu’une classe Java référence une autre classe Java.
3. A tout attribut d’une classe Java, nous distinguons trois cas en fonction du type de cet attribut
u type primitif: à l’attribut doit correspondre une propriété appartenant à la classe UML correspondant à
la classe Java. Le nom de la propriété doit être le même que le nom de l’attribut. Le type de la
propriété doit être une correspondance UML du type de l’attribut Java
Etudiant
class Etudiant {
int numero; numéro: integer
nom: string
String nom;
}
Règles de correspondance du reverse
engineering de Java vers UML (11)
u classe Java: à l’attribut doit correspondre à une association UML entre la classe UML correspondant à la
classe Java de l’attribut et la classe UML correspondant au type de l’attribut Java. Cette association
doit être navigable vers la classe UML correspondant au type de l’attribut Java. Le nom de rôle de la
classe correspondant au type de l’attribut doit être le même que le nom de l’attribut Java (multiplicité =
0..1. ou celle du tableau).
class Etudiant {
cours
Cours cours[]; Etudiant Cours
*
}
Règles de correspondance du reverse
engineering de Java vers UML (12)
u collection générique (exemple ArrayList<B>): à l’attribut doit correspondre une association UML entre la
classe UML correspondant à la classe Java de l’attribut et la classe UML correspondant au type spécifié
dans la collection générique de l’attribut Java (i.e. B dans l’exemple). La multiplicité sera 0..*. Une note
UML est ajoutée à l’association pour préciser le nom exacte de la collection générique.
class Etudiant {
cours
ArrrayList<Cours> cours[]; Etudiant Cours
*
}
ArrayList
Intérêts et limites du Reverse Engineering
u Construit la partie structurelle de plus bas niveau d’abstraction du modèle UML à partir de code
Java
u UML fait la distinction entre modèle UML et diagramme UML
u Un diagramme n’est qu’une représentation graphique d’une partie d’un modèle
u Il est possible de définir plusieurs diagrammes pour un même modèle
u Les diagrammes représentent graphiquement l’information contenue dans un modèle. Le
Reverse Engineering ne construit donc pas de diagramme de classes mais une partie du
modèle => plusieurs diagrammes de classes possibles.
u UML définit un type de diagramme particulier pour chacune des vues. Diagramme de classes
=> vue structurelle
Diagrammes de classe à réaliser après
un reverse engineering
u Les diagrammes de classe « classiques »
u 1 représentant l’intégralité des informations
u 1 représentant uniquement l’ensemble des packages et leurs relations d’import sans montrer leur
contenu
u 1 par package montrant uniquement le contenu d’un package
u 1 permettant de montrer le contenu de la classe et les associations et les liens d’héritage vers les autres
classes
u Au final, le choix des diagrammes à réaliser dépend de l’application
u Il faut construire tous les diagrammes de classes permettant de bien comprendre l’application
Gains offerts par le Reverse Engineering
u Possibilité d’élaborer les autres parties du modèle UML tout en gardant une
cohérence avec le code
Dans ce cours :
u Différences sémantiques entre UML et les LPOO => UML : sémantique OO qui lui est propre
u Détail des principes du Reverse Engineering => pont sémantique entre un langage de
programmation et UML.
u Indique UNE façon de passer du code Java vers les diagrammes de classes. (utilisée dans la suite de
ce cours).
u Modèle UML ≠ diagramme UML= représentation graphique de l’information contenue dans un
modèle.
u Reverse Engineering => ne génère AUCUN diagramme.