UML POO Seance4

Télécharger au format ppt, pdf ou txt
Télécharger au format ppt, pdf ou txt
Vous êtes sur la page 1sur 10

UML et Java

Passage
d’UML à Java

MSIAG 2007-2008 UML & POO – Section 4 1


Classe / attribut / opération

Java

public class Voiture


UML {
private int niveauDeCarburant;
private final int capaciteReservoir;
Voiture
public Voiture(int capaciteReservoir)
- capaciteReservoir: int {
this.capaciteReservoir = capaciteReservoir;
- niveauDeCarburant : int
this.niveauDeCarburant = 0;
+ faireLePlein() }

+ niveauDeCarburant() : int
public void faireLePlein()
{
niveauDeCarburant = capaciteReservoir;
}
public int niveauDeCarburant()
UML ne précise que la déclaration {
et non l’implémentation des return niveauDeCarburant;
méthodes !
}
}

MSIAG 2007-2008 UML & POO – Section 4 2


Association et agrégation

est composé de
Equipe Joueur
0..1 0..n

public class Equipe public class Joueur


{ {
private List joueurs; private String nom;
public Equipe() private Equipe equipe;
{
this. joueurs = new ArrayList(); public Joueur(String nom)
} {
this. nom = nom;
public void recruter(Joueur joueur) }
{
// on ajoute le joueur à la liste public void nouvelleEquipe(Equipe nouvelleEquipe)
this.joueurs.add(joueur); {
// on met à jour l’équipe du joueur this.equipe = nouvelleEquipe;
joueur. nouvelleEquipe(this); }
} }
} Nécessaire parce que l’association est
bidirectionnelle et que le Joueur doit
pouvoir dire quelle est son équipe.

MSIAG 2007-2008 UML & POO – Section 4 3


Composition

Voiture Moteur
1

Le langage Java ne supporte pas naturellement la notion de composition


C’est au programmeur d’assurer le respect de la composition en clonant le
composant avant de le retourner

public class Voiture public class Moteur


{ {
private Moteur moteur; private int chevauxFiscaux;
public Voiture(Moteur moteur) public Moteur(Moteur moteurADupliquer) {
{ // on clone moteurADupliquer
this.moteur = moteur; chevauxFiscaux =
} moteurADupliquer.chevauxFiscaux;
public Moteur getMoteur() }
{ public Moteur cloneMoteur() {
return moteur.cloneMoteur(); return new Moteur(this);
} }
} }

MSIAG 2007-2008 UML & POO – Section 4 4


Classe d’associations (1/2)

connait
Employe Domaine
0..* 1..*

Competence
niveau

Pour une instance d’Employe et une instance de Domaine

donné il n’y a qu’une instance de Competence

Un employé peut connaître plusieurs domaines et a donc

autant de compétences que de domaines connus (par lui).

MSIAG 2007-2008 UML & POO – Section 4 5


Classe d’associations (2/2)

public class Employe // … suite et fin


{ private void augmenterEnCompetence(Domaine domaine)
private static final int NIVEAU_1 = 1; {
private Map competences = new HashMap(); Competence competence = getCompetence(domaine);
public int niveauDans(Domaine domaine) int niveauAvantFormation = competence.getNiveau();
{ competence.setNiveau(niveauAvantFormation + 1);
Competence competence = getCompetence(domaine); }
return competence.getNiveau();
} private void gagnerUneCompetence(Domaine domaine)
public boolean estCompetentDans(Domaine domaine) {
{ Competence nouvelleCompetence = new
return (competences.get(domaine) == null); Competence(domaine);
} nouvelleCompetence.setNiveau(NIVEAU_1);
public void suivreUneFormation(Domaine domaine) competences.put(domaine, nouvelleCompetence);
{ }
if (estCompetentDans(domaine)) {
augmenterEnCompetence(domaine); private Competence getCompetence(Domaine domaine)
} else { {
gagnerUneCompetence(domaine); return (Competence) competences.get(domaine);
} }
}
// to be continued … } // fin de la classe

MSIAG 2007-2008 UML & POO – Section 4 6


Héritage

public class Personne {


private String nom, prenom;
public Personne (String nom, String prenom) {
UML this.nom = nom;
this.prenom = prenom;
Personne }
- nom
- prenom public String donnerSonIdentite() {
+ donnerSonIdentité()
return prenom + " " + nom;
}
}

Employe
public class Employe extends Personne {
- ancienneté
private int anciennete;
+ primeAnciennete()
public Employe (String nom, String prenom, int anciennete) {
super(nom, prenom);
this.anciennete = anciennete;
}
public double primeAnciennete() {
return anciennete*100.0;
}
}

MSIAG 2007-2008 UML & POO – Section 4 7


Implémentation d’interface

public interface ServiceAdresse {


public String chercherAdresse(String nom);
}

public class ServiceAdresseLDAP implements ServiceAdresse {


public String chercherAdresse(String nom) {
ldap.lookForAdressesOf(nom); // on suppose que ldap a été correctement initialisé avant…
}
}

public class ServiceAdresseJDBC implements ServiceAdresse {


public String chercherAdresse(String nom) {
// on suppose que dataBase a été correctement initialisé avant…
return dataBase.querySQL("select libelle_adresse from table_adresse where habitant = nom" );
}
}

MSIAG 2007-2008 UML & POO – Section 4 8


Diagramme de séquence

Recherche d’employés par domaine et niveau de compétence

: ProfilService : Departement : Employe


: Commercial

1: rechercheParProfilDeCompetence(domaine, niveau) iteration sur tous les


employes du département
2: getListeEmployesCompetent(domaine, niveau)

3: estSuffisamentCompetentPour(domaine, niveau)

4: [est compétent] : ajouter à la liste des employés compétent

5: liste employés compétent


6: liste employés compétent

MSIAG 2007-2008 UML & POO – Section 4 9


Diagramme de séquence

public class ProfilService


{
private Departement departement;
public Employe[] rechercheParProfilDeCompetence(Domaine d, int niveau)
{
return departement.getListeEmployesCompetent(d, niveau); Correspond au
} message 2
}

public class Departement


{
private Employe[] employes;
public Employe[] getListeEmployesCompetent(domaine d, int niveau)
{
ArrayList employesCompetents = new ArrayList();
for(int i=0 ; i<employes.length; i++) { Correspond au
if (employes[i].estSuffisamentCompetentPour(d, niveau)) { message 3
employesCompetents.add(employes[i]);
}
}
return employesCompetents.toArray(new Employe[] {}); // conversion en Employe[]
}
}
MSIAG 2007-2008 UML & POO – Section 4 10

Vous aimerez peut-être aussi