Vous êtes sur la page 1sur 5

Correspondance ULM Java

Implémentation UML en Java

1. La modélisation statique
Les codes Java d’implémentation des concepts UML ne sont que des exemples. Il existe
quelques fois plusieurs implémentations possibles et équivalentes.

Classe
UML Java
public class Student { …
Classe concrète }

<<abstract>>
public abstract class People {
People
Classe abstraite …
}

Interface
Trois représentations sont possibles. Les deux premières sont à privilégier parce qu’elles
sont plus claires. La dernière peut être confondue avec une classe.
UML Java

Classe stéréotypée

public interface ICollection {


Icône public void sort();
}
ICollection

Classe avec 2 ICollection


compartiments + sort()

Paquet
UML Java
example

Paquet ou package example;

École Nationale Supérieure d'Ingénieurs 6, Boulevard Maréchal Juin, F-14050 CAEN cedex
& Groupe de Laboratoires, C.N.R.S. http://www.ensicaen.fr
Correspondance UML Java ■ 2

package example1 ;
Importation import example2.*; package example2;

Attribut
UML Java
public final class Student {
private int _promotion;
Attribut privé private String _specialty;

}

<<abstract>>
<<abstract>> public abstract class People {
People
People private String _name;
private String _lastName;
Attribut protégé et --name
name: :String
String protected Date _birthDate;
attribut statique --lastName
lastName: :String
String private static int _majorityAge = 18;
##birthDate
birthDate::Date
Date …
--majorityAge
majorityAge: :int
int==18
18 }

Opération

ENSICAEN - Spécialité Informatique


UML Java
public final class Student {
private int _promotion;
Opération avec private String _specialty;
valeur de retour et public int getRank( int scale ) {

paramètre }
}
public abstract class People {
<<abstract>> private String _name;
<<abstract>>
People private String _lastName;
People protected Date _birthDate;
--name : String
name : String private static int _majorityAge;
--lastName
lastName: :String
String
Opération statique, ##birthDate
birthDate: :Date
Date public abstract void laught();
Opération abstraite --majorityAge public static void setMajority( Date date ) {
majorityAge: :int
int …
}
++<<abstract>>laught()
<<abstract>>laught() public int getAge() {
++setMajoity(age
setMajoity(age: :Date)
Date) …
++getAge()
getAge(): :int
int }
}

2. Relation

Généralisation
UML Java
<<abstract>> public abstract class People {
People …
}
Héritage de classe
public final class Student extends People {
Student …
}
3 ■ Correspondance UML Java

public interface Sortable {


public void isGreaterThan( Sortable o );
}
Héritage d'interface
public interface Ordonable extends Sortable {
public int getRank();
}

Réalisation
UML Java

public interface Ordonable {


public int getRank();
}

public final class Student implements Ordonable {


Réalisation d'une private int _promotion;
interface private String _specialty;
Ordonable
ENSICAEN - Spécialité Informatique

public int getRank() {



}
}
Student
- promotion: int
- specialty : String
+ getRank(): int

public interface Imprimable {


public void print();
}
public interface Ordonable {
public int getRank();
}
class Student implements Ordonable, Imprimable {
private int _promotion;
Réalisation de private String _specialty;
plusieurs interfaces
public int getRank() {

}
public void print() {

}
}

Association
UML Java
public final class A {
Association private B _b;
A -b B …
navigable de }
0..1
multiplicité 0..1 public final class B {
}
public final class A {
Association private B _b = new B();
A -b B …
navigable de }
multiplicité 1 public final class B {
}
Correspondance UML Java ■ 4

Association avec public final class A {


A -bs B private B[] _bs = new B[10];
une multiplicité …
10
fixée }
Association avec public final class A {
A -bs B private List<B> _bs = new ArrayList<B>();
une multiplicité …
*
quelconque }
public final class A {
private Set<B> _bs = new TreeSet<B>();

Association multiple A -bs B
}
ordonnée {ordered} * public final class B implements Comparable<B> {
int compareTo( B b ) { }
}
public final class A {
A -bs B private Map<B> _bs = new HashMap<B>();
Association qualifiée …
*
}
public final class A {
Association sans A B
private B _b;
}
navigabilité public final class B {
(bidirectionnelle) private A _a;
}

Association public final class People {


private List<People> _employees;
réflexive private People _employer;
(bidirectionnelle) }

ENSICAEN - Spécialité Informatique


Agrégation et composition
UML Java
Voiture -pneus Pneu
public final class Voiture {
Agrégation *
private List<Pneu> _pneus = new ArrayList<Pneu>();
}
public final class Voiture {
private final Chassis _chassis;
private Voiture() {
_chassis = new Chassis();
Composition }

}
public final class Chassis {
Voiture -chassis Chassis }
public final class Voiture {
private final Chassis _chassis;
private Voiture() {
_chassis = new Chassis();
Composition comme }
une classe interne class Chassis {
}

}

Dépendance
UML Java
public final class A {

public use( B b ) {
}
}
Lien de dépendance public final class B {
entre classes public void method() {
C c;
}
}
public final class C {
}
5 ■ Correspondance UML Java

Classe d’association
UML Java
public final class Student {
}

public final class Professor {


}
Association promue
au rang de classe. public final class Teach {
(abstraction private String _course;
private int _year;
hypostatique)
private Professor _professor;
private Student _student;

}

3. La modélisation dynamique

Séquences
UML Java
public final class A {
public void scenario() {
ENSICAEN - Spécialité Informatique

b.operationB1();
operationA1();
b.operationB2();
}
Diagramme de private void operationA1() { … }
séquences }

public final class B {



public void operationB1() { … }
public boolean operationB2() { … }
}

Communication
UML Java
public final class Library {
private Librarian _lib;
private Member _a123;
Diagramme de public void register( int idLib ) {
communication Member a = _a123.find(idLib);
_lib.SetMembers(a);
}
}

États-transitions
UML Java
public final class A {
Enum States {state1, state2, state3 }
private Enum States _state;
public void do( Event e) {
Diagramme états- switch (_state) {
case state1 : …
transitions case state2 : …
}
}
(Voir le cours de 2A sur le patron de conception État.)