Академический Документы
Профессиональный Документы
Культура Документы
fabien.romeo@fromeo.fr
http://www.fromeo.fr
Mapping UML - JAVA
Plan
• Introduction
– Mapping UML-Java
– Génération de code vs. reverse engineering (outils)
• UML et Java : concepts OO
– Classe, classe abstraite, interface, héritage, …
• Attributs et getter&setter
– Mapping UML-Java : pas forcément uniforme dans les 2 sens
– Setter -> Contraintes OCL
• Associations
– Pas de concept d’association en Java
– 1-1 ; 1-* ; qualifier ; classe d’association
• Composition et agrégation
• Diagramme de séquences
• Machine à états
fabien.romeo@fromeo.fr 3
Introduction
• Mapping UML – Java
– à la main (1e année) : passage de la conception à l’implémentation
– utilisation d’outils (2e année MDA/IDM)
Java Java
• Génération de code
– Plusieurs choix de mapping possibles (plusieurs interprétations)
• Rétro-ingénierie
– Le modèle retrouvé peut ne pas être identique au modèle de départ
fabien.romeo@fromeo.fr 4
UML et Java
• UML = conception orientée objet
• Java = programmation orientée objet
• UML n’est pas lié à un langage de
programmation en particulier et n’impose même
pas d’utiliser un langage orienté objet
• Parce qu’ils sont orientés objets, UML et Java
ont des concepts en commun qui facilitent le
mapping
– Classe, classe abstraite, interface, héritage, …
• Mais tous les concepts d’UML ne se retrouve
pas forcément dans Java
fabien.romeo@fromeo.fr 5
UML et Java (classes)
public class A {
A
AbstractA
public abstract class AbstractA {
A
public class B extends A {
}
B
fabien.romeo@fromeo.fr 6
UML et Java (interfaces)
<<interface>> public interface IA {
IA
<<interface>>
IA A
IA
ou
}
<<interface>>
IA
}
<<interface>>
IB
fabien.romeo@fromeo.fr 7
Attributs et getter&setter
Person public class Person {
+firstname
public String firstname;
+lastname public String lastname;
+age
public int age;
}
fabien.romeo@fromeo.fr 10
UML sans association
• Un modèle UML utilisant des associations
peut se traduire en un modèle sans association
• Le mapping vers Java peut alors s’effectuer
A B
public class A {
1
private B b;
}
public class B {
A B }
-b: B
fabien.romeo@fromeo.fr 11
Association avec rôle
• Même convention qu’en OCL,
– quand il n’y a pas de rôle : nom de la classe
avec première lettre en minuscule
– quand il y a un rôle : nom du rôle
A +role B
public class A {
1 private B role;
}
public class B {
A B }
-role: B
fabien.romeo@fromeo.fr 12
Associations et cardinalités
A B public class A {
1 private B b;
}
OCL self.b : B
A B public class A {
* private Set<B> b;
}
OCL self.b : Set(B)
A B public class A {
* private List<B> b;
{ordered}
}
fabien.romeo@fromeo.fr 13
Associations [1]
public class A {
private B b;
A B
public A() {
1
b = new B();
}
OCL self.b : B
public B getB() {
return b;
}
}
public A() {
b = new HashSet<B>(); OCL self.b : Set(B)
// b = new HashSet<B>();
// b = new CopyOnWriteArraySet<B>();
// b = new … implements Set<>
}
public A(Set<B> b) {
this.b = b; OCL self.b : Set(B)
}
public A(B... b) {
this.b = new HashSet<B>(Arrays.asList(b));
}
fabien.romeo@fromeo.fr 16
Associations [*]
public class A {
A B
private Set<B> b;
*
public A() {
b = new HashSet<B>(); OCL self.b : Set(B)
// b = new HashSet<B>();
// b = new CopyOnWriteArraySet<B>();
// b = new … implements Set<>
}
public A() {
b = new ArrayList<B>(); OCL self.b : OrderedSet(B)
// b = new LinkedList<B>();
// b = new CopyOnWriteArrayList<B>();
// b = new … implements List<>
}
A B
+id : Type
0..1
public class A {
private Map<K,B> b;
}
K
+key
1
A Tuple
*
+value
1 B
fabien.romeo@fromeo.fr 19
Associations qualifiées [*]
A B
+id : Type
*
public class A {
private Map<K,Set<B>> b;
}
K
+key
1
A Tuple
*
+value
* B
fabien.romeo@fromeo.fr 20
Association, agrégation,
composition
• ToDo en TD
fabien.romeo@fromeo.fr 21
Classes d’association
• ToDo en TD
fabien.romeo@fromeo.fr 22
Mapping Sequence Diagram - Java
public class Order {
List<LineItem> lineItems;
Distributor careful;
Distributor regular;
Messenger messenger;
boolean needsConfirmation;
}
[Fowler2003]
fabien.romeo@fromeo.fr 23
public class MessageParser {