Gus Toiles

UML : Diagramme de classe + exemple en java

5 posts in this topic

Salut tout le monde. Dans ce topic je vais essayer de vous expliquer un outil très important en programmation et qu'il est très utile de connaître si c'est dans ce domaine-là que vous voulez travailler plus tard : Je veux bien sûr parler de l'UML et plus exactement du diagramme de classe.

Mais qu'est-ce que c'est l'UML ?

L'UML est un ensemble de diagramme utilisé lors de la conception des programmes et qui permettent de faciliter la réalisations de ceux-ci. Celui dont je vais vous parler est le diagramme de classe qui donne une idée des différentes classes qui seront utilisée et comment elles seront intégrées les unes par rapport aux autres.

Commençons par le plus simple.

La classe:

Ca donne ceci en UML:

1461257804-classe.png

Et voici sa traduction en java:

public class Bateau{

}

 

La classe abstraite :

1461258704-classe-abstraite.png

On pourrait croire que la représentation d'une classe et d'une classe abstraite sont les mêmes mais détrompez-vous, le nom de la classe abstraite est écrit en italique. Mais étant donné que cette différence est très "flagrante", on peut utiliser un stéréotype qui facilitera la lecture de la classe.

1461258910-classe-abstraite2.png

La traduction en code donne:

public abstract class Vehicule{

}

La représentation des attributs (variables):

1461259785-attribut.png

petite explication:

Les +, - et # indiquent la portée des variables. Le + signifie que la variable est publique. Le - signifie que la variable est privée. Seule la classe dans laquelle elle se trouve peut y accéder directement. Le # signifie que la variable est protected. Cela signifie que la variable est impossible à atteindre directement sauf pour les classes filles de la fille.

Avant le : c'est le nom de la variable qui l'identifiera. Après le : c'est le type de la variable. Ce type peut être un type primitif ou un type depuis une classe.

La traduction en code donne:

public class Bateau{
	public int longueur;
	private String nom;
	protected Carburant diesel;
}

 

Les méthodes  :

1461261116-methode.png

Petite explication :

On note aussi la portée de la méthode devant le nom de celle-ci.

Les méthodes sont toujours accompagnées d'une parenthère (). Dans la parenthèse, nous trouverons les variables d'entrée de la méthode.

En code, ça donne ceci:

public abstract class Vehicule{
	public abstract int acceleration();
	public String setNom(String nom){
		return nom;
	}
}

 

Méthode et attributs mélangés :

1461262976-attr-meth.png

En code ça donne :

public class Bateau{
	private String nom;
	
	public String setNom(String nom){
		...
	}
}

 

Les interfaces en UML (+ une méthode) :

1461261727-interface1.png

Ou

1461262298-interface2.png

En code, ça donne ceci:

public interface IMoteur{
	public void explosion();
}

 

L'héritage (généralisation) :

1461262668-generalisation.png

En code ça donne ceci pour la classe enfant (la classe mère ne change pas) :

public class Bateau extends Vehicule{

}

Important : en java, une classe ne peut héritée que d'une seule classe. Cela signifie que vous ne pourrez utiliser une flèche comme celle-ci entre deux classe.

 

Realisation en UML (implémentation d'interface dans une classe) :

1461263820-realisation.png

En code ça donne:

public class Bateau implements IMoteur{
	
  	@override	
  	public void explosion(){
    	...
    }
}

L'interface reste inchangée. Une classe peut implémenter plusieurs interfaces.

 

Les dépendances:

1461264374-dependance.png

La dépendance signifie qu'il y aura l'utilisation d'un objet à l'intérieur d'une méthode de la classe.

En code, ça peut se traduire de deux façons :

public class Bateau{
	public void methode(){
		Port amsterdam = new Port();
		amsterdam.autreMethode();
	} //l'objet Amsterdam disparaît à la fin de la méthode
}

Ou

public class Bateau{
	public void methode(Port amsterdam){
		amsterdam.autreMethode();
	}
}

 

L'association directe :

1461265082-association1.png

Se traduit en code comme ceci :

public class Bateau{
	private Port amsterdam;
}

 

L'association directe (suite) :

1461265483-association2.png

L'étoile * signifie qu'il y aura plusieurs fois l'objet Port dans la classe Bateau. Ca peut se traduire en code de deux façons:

public class Bateau{
	private Port[] TableauPort;
}

ou

public class Bateau{
	private ArrayList<Port> ListPort;
}

 

L'association:

1461265875-association3.png

Ceci se traduit de cette façon :

Pour la classe Bateau:

public class Bateau{
	private Port amsterdam;
}

Pour la classe Port :

public class Port{
	private Bateau titanic;
}

 

L'aggrégation :

1461266827-aggregation.png

L'aggrégation signifie est "composé de". Elle se traduit :

public class Bateau{
	private Port amsterdam;
	
	public Bateau(Port nomPort){
		amsterdam=nomPort;
	}
}

 

La composition :

1461267003-composition.png

La composition est très proche de l'aggrégation mais diffère de cette dernière. Ainsi le code donne ceci :

public class Bateau{
	private Port amsterdam;
	
	public Bateau(){
		amsterdam = new Port();
	}
}

La composition peut aussi traduire une classe interne:

public class Bateau{

	private class Port{ //classe interne

	}

}

 

Voilà, j'espère que ce tuto vous aidera à comprendre un peu mieux les différents diagrammes de classe que vous pourrez rencontrer.

La liste ci-dessus n'est pas exhaustive. Il y aura sûrement des choses que j'aurais oubliés.

Share this post


Link to post
Share on other sites

Hohoho juste génial comme topic !
J'accroche pas aux cours de ma prof et j'ai vachement de mal ! Merci à toi ^^


Gameuse Minstery, Administratrice, Streameuse et Journaliste :angel:

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now